概述
集成详情
模型特性
设置
要通过 OpenRouter 访问模型,你需要创建一个 OpenRouter 帐户,获取 API 密钥,并安装langchain-openrouter 集成包。
安装
LangChain OpenRouter 集成位于langchain-openrouter 包中:
凭证
前往 OpenRouter 密钥页面 注册并生成 API 密钥。完成后,设置OPENROUTER_API_KEY 环境变量:
实例化
现在我们可以实例化模型对象并生成聊天补全:调用
流式传输
工具调用
OpenRouter 使用与 OpenAI 兼容的工具调用格式。你可以描述工具及其参数,并让模型返回一个 JSON 对象,其中包含要调用的工具及其输入。绑定工具
通过ChatOpenRouter.bind_tools,你可以将 Pydantic 类、字典模式、LangChain 工具或函数作为工具传递给模型。在底层,这些会被转换为 OpenAI 工具模式,并在每次模型调用时传递。
工具调用
AIMessage 有一个tool_calls 属性。它包含标准化格式的工具调用,与模型提供商无关。
严格模式
传递strict=True 以保证模型输出与工具定义中提供的 JSON Schema 完全匹配:
结构化输出
ChatOpenRouter 支持通过 with_structured_output 方法进行结构化输出。有两种方法可用:function_calling(默认)和 json_schema。
单个模型调用
单个模型调用
使用
with_structured_output 生成结构化的模型响应。指定 method="json_schema" 以使用基于 JSON Schema 的结构化输出;否则该方法默认为函数调用。代理响应格式
代理响应格式
function_calling 和 json_schema 方法传递 strict=True 以强制精确遵循模式。json_mode 不支持 strict 参数。
推理输出
对于支持推理的模型(例如anthropic/claude-sonnet-4.5、deepseek/deepseek-r1),你可以通过 reasoning 参数启用推理令牌。详情请参阅 OpenRouter 推理文档:
reasoning 字典支持两个键:
effort:控制推理令牌预算。值:"xhigh"、"high"、"medium"、"low"、"minimal"、"none"。summary:控制响应中返回的推理摘要的详细程度。值:"auto"、"concise"、"detailed"。
usage_metadata 中:
努力到预算的映射取决于模型。例如,Google Gemini 模型将努力映射到内部的
thinkingLevel,而不是精确的令牌预算。详情请参阅 OpenRouter 推理文档。多模态输入
OpenRouter 支持接受它们的模型的 多模态输入。可用的模态取决于你选择的模型——详情请查看 OpenRouter 模型页面。支持的输入方法
并非所有模型都支持所有模态。请查看 OpenRouter 模型页面 了解特定模型的支持情况。
图像输入
使用带有列表内容格式的HumanMessage 提供图像输入和文本。
音频输入
提供音频输入和文本。音频以 base64 内联数据形式传递。视频输入
视频输入会自动转换为 OpenRouter 的video_url 格式。
PDF 输入
提供 PDF 文件输入和文本。令牌使用量元数据
调用后,令牌使用量信息可在响应的usage_metadata 属性上获取:
推理令牌
output_token_details.reasoning 报告模型用于内部思维链推理的令牌数量。这在使用推理模型(例如 deepseek/deepseek-r1、openai/o3)或显式启用推理时出现:
缓存输入令牌
input_token_details.cache_read 报告从提供商提示缓存中提供的输入令牌数量,input_token_details.cache_creation 报告首次调用时写入缓存的令牌数量。
提示缓存需要在消息内容块中显式设置 cache_control 断点。在你想要缓存的内容块上传递 {"cache_control": {"type": "ephemeral"}}:
如果消息内容块上没有
cache_control,提供商将不会缓存提示,这些字段也不会出现。响应元数据
调用后,提供商和模型元数据可在response_metadata 属性上获取:
native_finish_reason 字段(如果存在)包含底层提供商的原始完成原因,可能与规范化的 finish_reason 不同。
提供商路由
OpenRouter 上的许多模型由多个提供商提供服务。openrouter_provider 参数让你可以控制哪些提供商处理你的请求以及如何选择它们。
排序和过滤提供商
使用order 设置首选提供商顺序。OpenRouter 按顺序尝试每个提供商,如果一个不可用,则回退到下一个:
only。要排除某些提供商,请使用 ignore:
按成本、速度或延迟排序
默认情况下,OpenRouter 在提供商之间进行负载平衡,优先选择成本较低的。使用sort 更改优先级:
数据收集策略
如果你的用例要求提供商不存储或训练你的数据,请将data_collection 设置为 "deny":
按量化过滤
对于开放权重模型,你可以将路由限制为特定精度级别:路由参数
route 参数控制高级路由行为:
"fallback":启用跨提供商的自动故障转移(默认行为)。"sort":基于openrouter_provider中配置的排序策略进行路由。
组合选项
提供商选项可以组合在一起:应用归属
OpenRouter 支持通过 HTTP 头进行应用归属。你可以通过初始化参数或环境变量设置这些:可观测性和跟踪
OpenRouter 可以将请求数据广播到配置的可观测性目标。ChatOpenRouter 暴露两个相关参数:session_id 用于将相关请求分组到单个逻辑工作流下,trace 用于每个请求的跟踪元数据。详情请参阅 OpenRouter 广播文档。
使用 session_id 分组请求
传递 session_id 以将多个请求与同一工作流(对话、代理运行、批处理作业、CI 运行等)关联。最大 256 个字符。
session_id 时,OPENROUTER_SESSION_ID 环境变量在实例化时被读取,这允许进程标记每个请求,而无需在应用程序代码中传递该值。
你也可以在每次调用时覆盖该值:
使用 trace 添加跟踪元数据
传递 trace 以附加每个请求的元数据,OpenRouter 会将其转发到广播目标。识别的键是 trace_id、trace_name、span_name、generation_name 和 parent_span_id;其他键作为自定义元数据传递。
session_id 和 trace 是独立的——session_id 在 OpenRouter 端将请求分组到逻辑工作流中,而 trace 则注释单个请求。
API 参考
有关所有ChatOpenRouter 功能和配置的详细文档,请前往 ChatOpenRouter API 参考。
有关 OpenRouter 平台、模型和功能的更多信息,请参阅 OpenRouter 文档。
将这些文档连接到 Claude、VSCode 等,通过 MCP 获取实时答案。

