
LangChain 中的 ChatAnthropic:导入、base_url、流式传输、工具和错误
ChatAnthropic 来自 langchain-anthropic 包,是 LangChain 的 Claude 聊天模型。它封装了官方 Anthropic Python SDK,因此只需设置一个参数即可将其指向网关: base_url,将其设为主机根地址。链、智能体和工具中的其他部分均保持不变。
安装与导入
pip install -U langchain-anthropicfrom langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(
model="claude-sonnet-5",
base_url="https://aiprimetech.io", # host root: the SDK adds /v1/messages
api_key="your_gateway_key", # or set ANTHROPIC_API_KEY
)
print(llm.invoke("Say hello in one word.").text)/v1 在 base_url 此处。底层 Anthropic SDK 会自行追加 /v1/messages ;添加 /v1 会产生 /v1/v1/messages 以及一个 404 page not found.通过环境变量配置
base_url 是以下参数的别名: anthropic_api_url,以及 api_key 是以下参数的别名: anthropic_api_key。如果未传入这些参数,ChatAnthropic 会先读取 ANTHROPIC_API_URL ,然后读取 ANTHROPIC_BASE_URL,并从以下变量读取密钥: ANTHROPIC_API_KEY。显式参数始终优先。
export ANTHROPIC_API_KEY=your_gateway_key
export ANTHROPIC_API_URL=https://aiprimetech.iofrom langchain_anthropic import ChatAnthropic
llm = ChatAnthropic(model="claude-sonnet-5") # picks up the gateway from the environment流式传输
for chunk in llm.stream("Explain backpressure in two sentences."):
print(chunk.text, end="", flush=True).text 仅收集每个分块中的文本块,因此即使模型同时输出思考块或工具使用块,结果仍然保持干净。对于较长的回答,请使用流式输出:耗时较长的非流式请求通常是导致超时的原因。
工具与结构化输出
from langchain_core.tools import tool
@tool
def get_time(city: str) -> str:
"""Return the current local time in a city."""
return "12:00"
msg = llm.bind_tools([get_time]).invoke("What time is it in Tokyo?")
print(msg.tool_calls)from pydantic import BaseModel
class Weather(BaseModel):
city: str
temperature_c: float
print(llm.with_structured_output(Weather).invoke("It is 21 degrees in Lisbon today."))重试、超时与 max_tokens
max_retries 默认值为 2,与 Anthropic SDK 相同;该 SDK 会对连接错误、429 和 5xx 响应进行重试。 timeout (是以下参数的别名: default_request_timeout)的单位为秒。如果你未设置 max_tokens ,则取自模型的配置档案。
llm = ChatAnthropic(
model="claude-sonnet-5",
base_url="https://aiprimetech.io",
max_retries=4,
timeout=120,
max_tokens=8000,
)对于批量请求,请限制并行度,以免超出密钥的并发限制: llm.batch(inputs, config={"max_concurrency": 3}).
ChatOpenAI 替代方案
如果你的代码统一使用 ChatOpenAI,网关的 OpenAI 兼容端点也支持 Claude。此方式要求在末尾添加 /v1 ,这与 ChatAnthropic 相反。
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="claude-sonnet-5", base_url="https://aiprimetech.io/v1", api_key="your_gateway_key")使用 Claude 时,优先选择 ChatAnthropic:它保留了提示词缓存和思考块等原生功能。
故障排查
| 你会看到什么 | 原因 | 解决方法 |
|---|---|---|
404 page not found | /v1 在 ChatAnthropic 的以下参数中: base_url | 使用主机根地址, https://aiprimetech.io |
Model "..." is not supported | 密钥所属组不支持的 ID,或带有旧日期的名称 | 使用下表中的当前 ID |
AuthenticationError | ANTHROPIC_API_KEY 在运行中的进程里为空,或使用了其他端点的密钥 | 传入 api_key= ,通过显式传入进行测试 |
RateLimitError: Concurrency limit exceeded | 并行调用过多(batch、异步 gather) | max_concurrency 在批处理配置中 |
APITimeoutError | 耗时较长的非流式生成 | 使用流式传输,或增大 timeout |
| 模型 ID | 适用场景 |
|---|---|
claude-sonnet-5 | 编程和智能体任务的默认选择:速度快、能力强、价格适中。 |
claude-opus-5-5 | 更复杂的推理、大规模重构、长时间运行的智能体任务。 |
claude-fable-5-1 | 能力最强,价格也最高;留给最困难的任务使用。 |
claude-haiku-4-5 | 价格低、速度快:标题、摘要、分类和小步骤。 |
常见问题
如何导入 ChatAnthropic?
ChatAnthropic 的 base_url 需要包含 /v1 吗?
ChatAnthropic 会读取哪些环境变量?
base_url 与 anthropic_api_url 相同吗?
获取 API 密钥,无需 Anthropic 账户,也无需加入候补名单。
获取你的 API 密钥AI Prime Tech 是独立的 API 网关,与 Anthropic 无关联,未获得其背书,也不是其经销商。Claude 及相关模型名称是其各自所有者的商标。