Skip to main content
OpenAI 是一个人工智能(AI)研究实验室。 本指南将帮助你开始使用 OpenAI 对话模型。有关所有 ChatOpenAI 功能和配置的详细文档,请访问 API 参考。
与 Chat Completions API 兼容ChatOpenAI 完全兼容 OpenAI 的(旧版)Chat Completions API。如果你希望连接到支持 Chat Completions API 的其他模型提供方,你可以这样做——请参阅 说明。
Azure 上的 OpenAI 模型注意,某些 OpenAI 模型也可以通过 微软 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 使用情况,这些信息将直接在 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 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 批准当被指示时,OpenAI 会在调用远程 MCP 服务器之前请求批准。在上述命令中,我们指示模型永远不需要批准。我们还可以配置模型始终请求批准,或始终对特定工具请求批准:
使用此配置,响应可以包含作为 mcp_approval_request 类型的工具输出。要提交批准请求的批准,您可以在后续消息中将其结构化为内容块:

图像生成

ChatOpenAI 允许您通过响应 API 在多轮对话中作为图像生成的一部分使用内置的 图像生成工具 来创建图像。

推理模型

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

在对话中中途添加工具

additional_tools 需要 @langchain/openai>=1.6.2。
使用一个 additional_tools 内容块来从对话中的某个点开始提供工具。当您的应用程序在 OpenAI 的 工具搜索 流程之外加载工具时,这很有用。将块放在 @[SystemMessage] 中:
该块需要响应 API,因此设置 useResponsesApi: true。在 Chat Completions 或其他不是 SystemMessage 的消息上,ChatOpenAI 会抛出错误。您也可以将块包装在 non_standard 块中,放在 content 或 contentBlocks 中。

提示词缓存

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

预测输出

一些 OpenAI 模型(如它们的 gpt-4o 和 gpt-4o-mini 系列)支持 预测输出,这允许您提前传递 LLM 预期输出的已知部分,以减少延迟。这对于编辑文本或代码等用例很有用,在这些用例中,模型输出的只有一小部分会改变。 以下是一个示例:
请注意,目前预测按额外 Token 计费,并且为了这种减少延迟,您的使用和成本会增加。

音频输出

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

流式音频输出

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

音频输入

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

API 参考

有关所有 ChatOpenAI 功能和配置的详细文档,请访问 API 参考。
官方原文:src/oss/javascript/integrations/chat/openai.mdx · 非官方翻译,译文由 AI 生成,以英文原文为准。
Last modified on November 3, 2026