> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ruapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# LangChain

> 如何通过 ChatOpenAI 的自定义 base_url 把 LangChain 接到 RuAPI——在 Python 与 JS 里用模型和嵌入

[LangChain](https://www.langchain.com) 是构建 LLM 应用的框架 —— 链、智能体、RAG。因为 RuAPI 是 OpenAI 兼容的,接入就归结为给 **`ChatOpenAI`** 改一个 `base_url` —— 不需要单独的集成。

## 前置

<Steps>
  <Step title="RuAPI 账号和密钥">
    控制台 →\*\*「令牌」\*\*→ 创建 `sk-...` 密钥。余额用 USDT 充 —— 见[充值](/zh/topup)。
  </Step>
</Steps>

## Python

```bash theme={null}
pip install langchain langchain-openai
```

```python theme={null}
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-opus-4-8",                     # 精确名称见价格页
    api_key="sk-你的密钥",
    base_url="https://www.ruapi.ai/v1",  # 带 /v1
)

print(llm.invoke("你好!用一句话回答。").content)
```

之后 `llm` 就能像普通模型一样塞进任意链、智能体和 LCEL 结构。

## JavaScript / TypeScript

```bash theme={null}
npm install @langchain/openai @langchain/core
```

```javascript theme={null}
import { ChatOpenAI } from "@langchain/openai";

const llm = new ChatOpenAI({
  model: "claude-opus-4-8",
  apiKey: "sk-你的密钥",
  configuration: { baseURL: "https://www.ruapi.ai/v1" },
});

const res = await llm.invoke("你好!用一句话回答。");
console.log(res.content);
```

<Tip>
  换模型就改 `model` 字段。同一个密钥能调 Claude、GPT、Gemini、DeepSeek 等。
</Tip>

## 嵌入(RAG)

```python theme={null}
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",       # 或目录里其他嵌入模型
    api_key="sk-你的密钥",
    base_url="https://www.ruapi.ai/v1",
)
```

## 出问题时

<AccordionGroup>
  <Accordion title="401 / Unauthorized">
    `api_key` 得是 RuAPI 令牌(`sk-...`)。检查有没有多余空格。
  </Accordion>

  <Accordion title="404 / 找不到模型">
    `model` 里的名称要和 RuAPI 一字不差 —— 见[价格页](https://www.ruapi.ai/pricing)。
  </Accordion>

  <Accordion title="Claude 需要 ChatAnthropic 吗?">
    不需要。Claude 用同一个 `base_url` 走 `ChatOpenAI` 调 —— 在 `model` 字段填 Claude 模型 ID 即可。
  </Accordion>
</AccordionGroup>
