工具接入

在 LangChain 中使用 Claude API

Claude API 开箱即可配合 LangChain 使用,而 ChatAnthropic 接受自定义 API URL——所以只要改两行,你的链和智能体就能通过 apitoken.sale 运行 Claude。同一个 langchain-anthropic 包、同样的模型 ID、同样的流式输出与工具调用;变化的只有端点和 token 单价。

·

把 ChatAnthropic 指向 router.apitoken.sale

LangChain 的 Anthropic 集成接受自定义 API URL,因此通过 apitoken.sale 把 Claude API 接入 LangChain,只需要两个构造函数参数:anthropic_api_url 和 anthropic_api_key。现有链中的提示词、输出解析器、回调和重试逻辑完全不用动。

from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(
    model="claude-opus-4-8",
    anthropic_api_url="https://router.apitoken.sale",
    anthropic_api_key="sk-pool-•••",
)
print(llm.invoke("Hello").content)

严格按示例填写路由根地址:不要末尾斜杠,不要 /v1 后缀。底层 Anthropic 客户端会自己拼接 /v1/messages,路径重复是配置正确却返回 404 的最常见原因。

有一个参数值得显式设置:max_tokens。ChatAnthropic 默认只输出 1024 个 token,长回答会被静默截断——做摘要或代码生成的链要把它调大。temperature、top_p 等采样参数会原样透传,系统提示词和停止序列也一样。

另见: 把 Anthropic SDK 指向 apitoken.sale

用环境变量一次配好

如果你的代码库要和用官方端点的人共享——或者在不便改源码的 notebook 里跑——完全可以跳过构造函数参数。ChatAnthropic 会从环境变量读取这两个值,已入库的项目零代码改动。

export ANTHROPIC_API_URL=https://router.apitoken.sale
export ANTHROPIC_API_KEY=sk-pool-•••
  1. 01安装合作方包:pip install -U langchain-anthropic。LangChain 把 Anthropic 支持放在这个包里,而不是 langchain-core。
  2. 02在 apitoken.sale 控制台生成密钥——以 sk-pool- 开头,可在受支持的 Claude、GPT、Gemini 和 Kimi 模型间通用。
  3. 03按上面的方式导出 ANTHROPIC_API_URL 和 ANTHROPIC_API_KEY(或写进你的运行器加载的 .env 文件)。
  4. 04不带其他参数实例化 ChatAnthropic(model="claude-sonnet-5"),跑一次 invoke() 确认返回正常响应。

显式的构造函数参数优先于环境变量,所以本地覆盖绝不会泄漏进共享配置。环境变量方式还能让密钥不进 git 历史——把 sk-pool-… 当作普通机密对待:.env 文件不提交,CI 从自己的密钥存储里取值。

流式输出、工具调用和 LangGraph 全部照常

网关提供标准的 Anthropic Messages API,LangChain 通过官方客户端与之通信。建立在该协议之上的一切——SSE 流式输出、tool-use 块、结构化输出——行为与直连 api.anthropic.com 完全一致。这包括 LangChain 基于工具调用实现的 with_structured_output(),以及异步应用中用于 token 级回调的 .astream_events()。

from langchain_anthropic import ChatAnthropic
from langchain_core.tools import tool

@tool
def get_weather(city: str) -> str:
    """Return the current weather for a city."""
    return f"Sunny in {city}"

llm = ChatAnthropic(model="claude-sonnet-5")  # env vars supply URL and key
llm_with_tools = llm.bind_tools([get_weather])

for chunk in llm_with_tools.stream("What is the weather in Paris?"):
    print(chunk.content, end="")

LangGraph 智能体继承同一套配置,因为图节点无非是调用一个聊天模型。把模型指向路由一次,建立在它之上的每个智能体、supervisor 和子图都会跟随——没有任何 LangGraph 专属配置需要重做。

token 统计也照常工作:每条 AIMessage 仍然携带包含输入输出 token 数的 usage_metadata,因为网关返回标准的 Anthropic usage 对象。读取 usage_metadata 的 LangSmith 追踪和自定义回调无需任何改动。

什么变了,什么没变

迁移生产应用之前,最好把全部差异放在一处看清楚。简版结论:你的代码、你的模型和你的 LangChain 功能原地不动——唯一变动的部分是端点、密钥和每 token 价格。

关注点通过 apitoken.sale
模型 ID不变——claude-opus-4-8、claude-sonnet-5、claude-haiku-4-5 及目录中的其余模型
协议不变——通过官方客户端走 Anthropic Messages API
流式输出与工具调用不变——SSE 块和 tool-use 块照常
链、智能体、LangGraph不变——除 URL 和密钥外零代码改动
每 token 价格同样的模型便宜 50%
API 密钥一把 sk-pool-… 密钥通用于受支持的 Claude、GPT、Gemini 和 Kimi 模型
计费预付余额,控制台提供按密钥的消费与 token 明细

查看受支持的 Claude 模型与价格完整列表

为每个节点选对 Claude 模型

切换模型只是改一个参数,所以把模型选择当作逐节点的决策,而不是全局决策。负责意图分类的路由链,并不需要和撰写最终答案的节点用同一档模型。

  • claude-haiku-4-5——快速、便宜的一档:分类、路由、抽取等大批量步骤。
  • claude-sonnet-5——多数生产链、RAG 流水线和编码智能体的均衡默认选择。
  • claude-opus-4-8——顶级推理档;留给困难分析、长文档和智能体规划步骤。
from langchain_anthropic import ChatAnthropic

fast = ChatAnthropic(model="claude-haiku-4-5")      # routing, extraction
balanced = ChatAnthropic(model="claude-sonnet-5")   # default nodes
deep = ChatAnthropic(model="claude-opus-4-8")       # planning, hard analysis

router_chain = router_prompt | fast
answer_chain = answer_prompt | balanced | StrOutputParser()

三个实例共用同一套由环境变量提供的 URL 和密钥,每次调用都计入同一个预付余额。这让分档实验成本很低:换掉模型字符串,重跑评估集,留下胜出的组合。

先用 Sonnet 做原型,再把简单节点降级到 Haiku,只把困难节点升级到 Opus。按 token 预付计费下,混档链的成本明显低于全部跑旗舰模型。

用成本计算器估算混合模型链的开销

连接问题排查

变化的只有端点和密钥,所以几乎所有故障都是三种配置错误之一——而不是 LangChain 的问题。按顺序逐项排查,先别动链代码。

  • 401 Unauthorized——密钥缺失或拼错,或者环境变量根本没传到进程。在同一个解释器里打印 os.environ 确认,并记住构造函数参数会覆盖环境变量。
  • 404 Not Found——URL 多带了 /v1 或多余的路径后缀。使用裸路由根地址 https://router.apitoken.sale。
  • Model not found——对照 /models 目录重新核对模型 ID;这里的 ID 与 Anthropic 官方发布的完全一致。

如果不确定问题出在网关还是你的链,把 URL 换回官方端点跑一次。行为完全相同说明 bug 在链里;行为有差异则可以把范围缩小到配置上。

遇到偶发的 429 或 5xx 响应不需要自写逻辑:ChatAnthropic 默认以退避策略重试两次(可用 max_retries 调整)。长时间运行的智能体仍应显式设置超时秒数,而不是依赖客户端默认值。

常见问题

LangChain 支持自定义 Claude API 端点吗?

支持。ChatAnthropic 接受 anthropic_api_url(或 ANTHROPIC_API_URL 环境变量),把它指向 https://router.apitoken.sale 即可,其余一切——包、模型 ID、链代码——保持不变。

如何不改代码设置 LangChain 的 Anthropic base URL?

在运行脚本前导出 ANTHROPIC_API_URL=https://router.apitoken.sale 和 ANTHROPIC_API_KEY=sk-pool-…。ChatAnthropic 会自动读取这两个值,共享仓库完全无需改动。

通过 apitoken.sale 还能用流式输出和工具调用吗?

能。网关提供标准的 Anthropic Messages API,因此 .stream()、bind_tools()、结构化输出和 LangGraph 智能体的行为与官方端点完全一致。

从 LangChain 可以调用哪些 Claude 模型?

所有受支持的 Claude 模型——claude-opus-4-8、claude-sonnet-5、claude-haiku-4-5 等——共用同一把密钥和预付余额,每 token 便宜 50%。

可以用 ChatOpenAI 代替 ChatAnthropic 来调 Claude 吗?

可以。路由还提供 OpenAI 兼容通道,地址是 https://router.apitoken.sale/v1,因此 ChatOpenAI(base_url="https://router.apitoken.sale/v1", api_key="sk-pool-•••") 能用同一把密钥访问同样的 Claude 模型——当某个框架只会说 OpenAI 协议时很方便。

在 LangChain 里用 GPT、Gemini 或 Kimi 需要单独的密钥吗?

不需要。同一把 sk-pool-… 密钥在受支持的 Claude、GPT、Gemini 和 Kimi 模型间通用,多供应商的 LangChain 应用可以共用一把密钥和一个预付余额。

先试后付:通过 Google/GitHub 创建的新账户包含 $5 平台欢迎奖励余额。