Skip to main content
OpenAI 是一个人工智能(AI)研究实验室。 本指南将帮助您开始使用 OpenAI 聊天模型。有关所有 ChatOpenAI 功能和配置的详细文档,请访问 API 参考
聊天补全 API 兼容性ChatOpenAI 完全兼容 OpenAI 的(旧版)聊天补全 API。如果您希望连接到其他支持聊天补全 API 的模型提供商,可以这样做 – 请参阅说明
托管在 Azure 上的 OpenAI 模型请注意,某些 OpenAI 模型也可以通过 Microsoft Azure 平台 访问。

概述

集成详情

模型功能

有关如何使用特定功能的指南,请参阅下表标题中的链接。

设置

要访问 OpenAI 聊天模型,您需要创建一个 OpenAI 帐户,获取 API 密钥,并安装 @langchain/openai 集成包。

凭证

前往 OpenAI 网站 注册 OpenAI 并生成 API 密钥。完成后,设置 OPENAI_API_KEY 环境变量:
如果您想获得模型调用的自动跟踪,也可以通过取消注释以下内容来设置您的 LangSmith API 密钥:

安装

LangChain ChatOpenAI 集成位于 @langchain/openai 包中:

实例化

现在我们可以实例化模型对象并生成聊天补全:

调用

自定义 URL

您可以通过传递 configuration 参数来自定义 SDK 发送请求的基础 URL,如下所示:
configuration 字段也接受官方 SDK 接受的其他 ClientOptions 参数。 如果您托管在 Azure OpenAI 上,请参阅专用页面

自定义标头

您可以在同一个 configuration 字段中指定自定义标头:

禁用流式使用量元数据

一些代理或第三方提供商提供了与 OpenAI 大致相同的 API 接口,但不支持最近添加的 stream_options 参数来返回流式使用量。您可以通过禁用流式使用量来使用 ChatOpenAI 访问这些提供商,如下所示:

调用微调模型

您可以通过传递相应的 modelName 参数来调用微调的 OpenAI 模型。 这通常采用 ft:{OPENAI_MODEL_NAME}:{ORG_NAME}::{MODEL_ID} 的形式。例如:

生成元数据

如果您需要额外的信息,如对数概率或令牌使用量,这些信息将直接在 invoke 响应中返回,位于消息的 response_metadata 字段内。
需要 @langchain/core 版本 >=0.1.48。

自定义工具

自定义工具支持具有任意字符串输入的工具。当您预计字符串参数会很长或很复杂时,它们特别有用。 如果您使用支持自定义工具的模型,可以使用 ChatOpenAI 类和 customTool 函数来创建自定义工具。

strict: true

自 2024 年 8 月 6 日起,OpenAI 在调用工具时支持 strict 参数,该参数将强制模型遵守工具参数模式。了解更多
需要 @langchain/openai >= 0.2.6
如果 strict: true,工具定义也将被验证,并且只接受 JSON 模式的一个子集。关键是,模式不能有可选参数(那些具有默认值的参数)。请阅读完整文档了解支持的模式类型。
这是一个使用工具调用的示例。向 .bindTools 传递额外的 strict: true 参数会将该参数传递给所有工具定义:
如果您只想将此参数应用于特定工具,也可以直接传递 OpenAI 格式的工具模式:

结构化输出

我们也可以将 strict: true 传递给 .withStructuredOutput()。这是一个示例:

Responses API

兼容性以下几点适用于 @langchain/openai>=0.4.5-rc.0
OpenAI 支持一个 Responses API,该 API 面向构建代理应用程序。它包含一套内置工具,包括网络和文件搜索。它还支持管理对话状态,允许您继续对话线程而无需显式传递之前的消息。 如果使用了这些功能之一,ChatOpenAI 将路由到 Responses API。您也可以在实例化 ChatOpenAI 时指定 useResponsesApi: true

内置工具

ChatOpenAI 配备内置工具将使其响应基于外部信息,例如通过文件或网络中的上下文。从模型生成的 AIMessage 将包含有关内置工具调用的信息。

网络搜索

要触发网络搜索,请将 {"type": "web_search_preview"} 作为另一个工具传递给模型。
您也可以将内置工具作为调用参数传递:
请注意,响应包含结构化的内容块,其中包括响应文本和引用其来源的 OpenAI 注释。输出消息还将包含来自任何工具调用的信息。

文件搜索

要触发文件搜索,请将文件搜索工具作为另一个工具传递给模型。您需要填充一个 OpenAI 管理的向量存储,并在工具定义中包含向量存储 ID。详情请参阅 OpenAI 文档
网络搜索一样,响应将包含带有引用的内容块。它还将包含来自内置工具调用的信息。

计算机使用

ChatOpenAI 支持 computer-use-preview 模型,这是一个用于内置计算机使用工具的专用模型。要启用,请像传递另一个工具一样传递计算机使用工具 目前,计算机使用的工具输出位于 AIMessage.additional_kwargs.tool_outputs 中。要回复计算机使用工具调用,您需要在创建相应的 ToolMessage 时设置 additional_kwargs.type: "computer_call_output" 详情请参阅 OpenAI 文档

代码解释器

ChatOpenAI 允许您使用内置的代码解释器工具来支持代码的沙盒生成和执行。
请注意,上述命令创建了一个新的容器。我们可以通过指定现有的容器 ID 来跨调用重用容器。

远程 MCP

ChatOpenAI 支持内置的远程 MCP 工具,该工具允许模型生成的对 MCP 服务器的调用在 OpenAI 服务器上发生。
MCP 审批当被指示时,OpenAI 将在调用远程 MCP 服务器之前请求批准。在上面的命令中,我们指示模型永远不需要批准。我们还可以配置模型始终请求批准,或者始终为特定工具请求批准:
使用此配置,响应可以包含类型为 mcp_approval_request 的工具输出。要提交审批请求的批准,您可以将其结构化为后续消息中的内容块:

图像生成

ChatOpenAI 允许您使用内置的图像生成工具通过 responses API 在多轮对话中创建图像。

推理模型

兼容性:以下几点适用于 @langchain/openai>=0.4.0
使用 o1 等推理模型时,withStructuredOutput 的默认方法是 OpenAI 的内置结构化输出方法(等效于将 method: "jsonSchema" 作为选项传递给 withStructuredOutput)。JSON 模式与其他模型基本相同,但有一个重要的注意事项:定义模式时,z.optional() 不被支持,您应该改用 z.nullable() 这是一个示例:
这是一个使用 z.nullable() 的示例:

提示缓存

较新的 OpenAI 模型将自动缓存提示的某些部分,如果您的输入超过一定大小(撰写本文时为 1024 个令牌),以减少需要长上下文的用例的成本。 注意: 给定查询缓存的令牌数量尚未在 AIMessage.usage_metadata 中标准化,而是包含在 AIMessage.response_metadata 字段中。 这是一个示例

预测输出

一些 OpenAI 模型(例如其 gpt-4ogpt-4o-mini 系列)支持预测输出,这允许您提前传递 LLM 预期输出的已知部分以减少延迟。这对于编辑文本或代码等情况很有用,因为模型输出中只有一小部分会发生变化。 这是一个示例:
请注意,目前预测作为额外令牌计费,将增加您的使用量和成本,以换取这种降低的延迟。

音频输出

一些 OpenAI 模型(例如 gpt-4o-audio-preview)支持生成音频输出。此示例展示了如何使用该功能:
我们看到音频数据返回在 data 字段中。我们还提供了一个 expires_at 日期字段。此字段表示音频响应在服务器上不再可用于多轮对话的日期。

流式音频输出

OpenAI 也支持流式音频输出。这是一个示例:

音频输入

这些模型也支持将音频作为输入传递。为此,您必须指定 input_audio 字段,如下所示:

API 参考

有关所有 ChatOpenAI 功能和配置的详细文档,请访问 API 参考