Skip to main content
OpenAI 是一家人工智能(AI)研究实验室。 本指南将帮助您开始使用 OpenAI 聊天模型。有关所有 ChatOpenAI 功能和配置的详细文档,请前往 API 参考
Chat 完成 API 兼容性ChatOpenAI 完全兼容 OpenAI 的(遗留)Chat 完成 API。如果您正在寻找连接到支持 Chat 完成 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} 的形式。例如:

生成元数据

如果您需要额外信息,如 logprobs 或 token 用量,这些信息将直接作为 response_metadata 字段中的内容返回在 invoke 响应的消息中。
需要 @langchain/core 版本 >=0.1.48。

自定义工具

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

strict: true

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

结构化输出

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

响应 API

兼容性以下要点适用于 @langchain/openai>=0.4.5-rc.0
OpenAI 支持一个 响应 API,旨在构建 智能体 应用程序。它包括一套 内置工具,包括网页和文件搜索。它还支持 对话状态 的管理,允许您继续对话线程而无需显式传递之前的消息。 如果使用其中任一功能,ChatOpenAI 将路由到响应 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 工具,允许在 OpenAI 服务器上发生由模型生成的对 MCP 服务器的调用。
MCP 批准当被指示时,OpenAI 将在对远程 MCP 服务器进行调用之前请求批准。在上述命令中,我们指示模型从不要求批准。我们还可以配置模型始终请求批准,或始终针对特定工具请求批准:
使用此配置,响应可以包含类型为 mcp_approval_request 的工具输出。要提交批准请求的批准,您可以将其结构化为后续消息中的内容块:

图像生成

ChatOpenAI 允许您将内置的 图像生成工具 带入多轮对话中,通过响应 API 创建图像。

推理模型

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

提示词缓存

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

预测输出

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

音频输出

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

流式音频输出

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

音频输入

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

API 参考

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