ChatOpenAI 所有功能和配置的详细文档,请参阅 API 参考。
Chat Completions API 兼容性
ChatOpenAI 完全兼容 OpenAI 的(旧版)Chat Completions API。如果你想连接到其他支持 Chat Completions API 的模型提供商,也可以这样做 - 请参阅说明。托管在 Azure 上的 OpenAI 模型请注意,某些 OpenAI 模型也可以通过 Microsoft Azure 平台 访问。
概述
集成详情
| 类 | 包 | 可序列化 | Python 支持 | 下载量 | 版本 |
|---|---|---|---|---|---|
ChatOpenAI | @langchain/openai | ✅ | ✅ |
模型特性
请参阅下表标题中的链接,了解如何使用特定功能的指南。设置
要访问 OpenAI 聊天模型,你需要创建一个 OpenAI 账户,获取一个 API 密钥,并安装@langchain/openai 集成包。
凭据
前往 OpenAI 的网站 注册 OpenAI 并生成 API 密钥。完成此操作后,设置OPENAI_API_KEY 环境变量:
安装
LangChain 的ChatOpenAI 集成位于 @langchain/openai 包中:
实例化
现在我们可以实例化模型对象并生成聊天补全:调用
自定义 URL
你可以通过传递configuration 参数来自定义 SDK 发送请求的基础 URL,如下所示:
configuration 字段也接受官方 SDK 支持的其他 ClientOptions 参数。
如果你在 Azure OpenAI 上托管,请参阅专用页面。
自定义请求头
你可以在同一个configuration 字段中指定自定义请求头:
禁用流式传输用量元数据
某些代理或第三方提供商的 API 接口与 OpenAI 大体相同,但不支持最近新增的用于返回流式用量的stream_options 参数。你可以通过禁用流式用量来使用 ChatOpenAI 访问这些提供商:
调用微调模型
你可以通过传入相应的modelName 参数来调用微调过的 OpenAI 模型。
这通常采用 ft:{OPENAI_MODEL_NAME}:{ORG_NAME}::{MODEL_ID} 的形式。例如:
生成元数据
如果你需要额外的信息,例如对数概率(logprobs)或令牌用量,这些信息将在invoke 响应的消息 response_metadata 字段中直接返回。
需要
@langchain/core 版本 >=0.1.48。自定义工具
自定义工具支持具有任意字符串输入的工具。当你预期字符串参数较长或复杂时,它们尤其有用。 如果你使用的是支持自定义工具的模型,则可以使用ChatOpenAI 类和 customTool 函数来创建自定义工具。
strict: true
自 2024 年 8 月 6 日起,OpenAI 支持在调用工具时使用 strict 参数,这将强制模型遵守工具参数的模式。了解更多。
需要
@langchain/openai >= 0.2.6strict: true 参数传递给 .bindTools 会将该参数传递给所有工具定义:
结构化输出
我们也可以将strict: true 传递给 .withStructuredOutput()。这是一个例子:
Responses API
OpenAI 支持一个面向构建智能体应用的 Responses API。它包含一套内置工具,包括网络和文件搜索。它还支持对话状态的管理,允许你在不显式传入先前消息的情况下继续对话线程。 如果使用了这些功能之一,ChatOpenAI 将自动路由到 Responses API。你也可以在实例化 ChatOpenAI 时指定 useResponsesApi: true。
内置工具
为ChatOpenAI 配置内置工具将使其响应基于外部信息,例如文件或网络中的上下文。模型生成的 AIMessage 将包含有关内置工具调用的信息。
网络搜索
要触发网络搜索,请像使用其他工具一样,将{"type": "web_search_preview"} 传递给模型。
文件搜索
要触发文件搜索,请像使用其他工具一样,将文件搜索工具传递给模型。你需要填充一个 OpenAI 管理的向量存储,并在工具定义中包含向量存储 ID。更多详情请参见 OpenAI 文档。计算机使用
ChatOpenAI 支持computer-use-preview 模型,这是一个专为内置计算机使用工具设计的特殊模型。要启用,请像传递其他工具一样传递计算机使用工具。
目前,计算机使用的工具输出存在于 AIMessage.additional_kwargs.tool_outputs 中。要回复计算机使用工具调用,你需要在创建相应的 ToolMessage 时设置 additional_kwargs.type: "computer_call_output"。
更多详情请参见 OpenAI 文档。
代码解释器
ChatOpenAI 允许你使用内置的代码解释器工具来支持沙盒化的代码生成和执行。远程 MCP
ChatOpenAI 支持内置的远程 MCP 工具,允许模型发起的对 MCP 服务器的调用发生在 OpenAI 服务器上。MCP 审批在收到指令时,OpenAI 将在对远程 MCP 服务器进行调用之前请求批准。在上面的命令中,我们指示模型永远不需要批准。我们还可以将模型配置为始终请求批准,或者始终为特定工具请求批准:使用此配置,响应可能包含类型为
mcp_approval_request 的工具输出。要为审批请求提交批准,你可以在后续消息中将其构建为内容块:图像生成
ChatOpenAI 允许你通过 responses API 使用内置的图像生成工具在多轮对话中创建图像。推理模型
当使用像o1 这样的推理模型时,withStructuredOutput 的默认方法是 OpenAI 内置的结构化输出方法(相当于将 method: "jsonSchema" 作为选项传入 withStructuredOutput)。JSON 模式的使用方式大多与其他模型相同,但有一个重要的注意事项:在定义模式时,z.optional() 不会被遵循,你应该改用 z.nullable()。
这是一个例子:
z.nullable() 的例子:
提示词缓存
如果你的输入超过一定大小(撰写本文时为 1024 个令牌),较新的 OpenAI 模型将自动缓存你的部分提示词,以降低需要长上下文的用例的成本。 注意: 给定查询缓存的令牌数量尚未在AIMessage.usage_metadata 中标准化,而是包含在 AIMessage.response_metadata 字段中。
这是一个例子:
预测输出
某些 OpenAI 模型(例如其gpt-4o 和 gpt-4o-mini 系列)支持预测输出,允许你提前传入 LLM 预期输出的已知部分以减少延迟。这对于编辑文本或代码等情况非常有用,其中只有一小部分模型的输出会更改。
这是一个例子:
音频输出
某些 OpenAI 模型(例如gpt-4o-audio-preview)支持生成音频输出。此示例展示了如何使用该功能:
data 字段中返回。我们还会得到一个 expires_at 日期字段。这个字段表示音频响应在服务器上不再可访问的日期,在此期间内可用于多轮对话。
流式传输音频输出
OpenAI 也支持流式传输音频输出。这是一个例子:音频输入
这些模型也支持将音频作为输入传递。为此,你必须如下所示指定input_audio 字段:
API 参考
有关所有ChatOpenAI 功能和配置的详细文档,请参阅 API 参考。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

