概述
集成细节
模型特性
配置
要通过OpenRouter访问模型,您需要创建一个OpenRouter账户,获取API密钥并安装langchain-openrouter集成包。
安装
LangChain OpenRouter集成包位于langchain-openrouter包中:
凭据
前往OpenRouter密钥页面注册并生成API密钥。配置完成后设置OPENROUTER_API_KEY环境变量:
实例化
现在可以实例化模型对象并生成对话补全:调用
流式输出
工具调用
OpenRouter采用OpenAI兼容的工具调用格式。您可以通过描述工具及其参数,使模型返回包含要调用的工具及其输入的JSON对象。绑定工具
使用ChatOpenRouter.bind_tools,可传入Pydantic类、字典模式、LangChain工具或函数作为工具传递给模型。底层会将这些对象转换为OpenAI工具 schema 并在每次模型调用时传递。
工具调用
AIMessage对象具有tool_calls属性,其中包含标准化格式的工具调用,与模型供应商无关。
严格模式
传递strict=True以确保模型输出严格匹配工具定义的JSON Schema:
结构化输出
ChatOpenRouter支持通过with_structured_output方法实现结构化输出。提供两种方法:function_calling(默认)和json_schema。
Individual model calls
Individual model calls
使用
with_structured_output生成结构化模型响应。指定method="json_schema"以启用基于JSON Schema的结构化输出;否则该方法默认使用函数调用。Agent response format
Agent response format
strict=True与function_calling、json_schema方法强制遵循精确Schema。strict参数不支持与json_mode组合使用。
推理输出
对于支持推理的模型(如anthropic/claude-sonnet-4.5、deepseek/deepseek-r1),可通过reasoning参数启用推理Token。详见OpenRouter推理文档:
reasoning字典包含两个键:
effort:控制推理Token预算。取值:"xhigh"、"high"、"medium"、"low"、"minimal"、"none"。summary:控制推理摘要返回的详细程度。取值:"auto"、"concise"、"detailed"。
usage_metadata中:
努力与预算的映射关系取决于具体模型。例如,Google Gemini模型将努力值映射到内部
thinkingLevel而非精确Token预算。详见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 文档。
官方原文:src/oss/python/integrations/chat/openrouter.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。