概述
集成详情
模型功能
设置
要访问 OpenAI 模型,您需要安装langchain-openai 集成包并获取 OpenAI 平台 API 密钥。
安装
凭据
前往 OpenAI 平台 注册并生成 API 密钥。完成后,在您的环境中设置OPENAI_API_KEY 环境变量:
实例化
现在我们可以实例化我们的模型对象并生成响应:ChatOpenAI API 参考。
令牌参数弃用OpenAI 于 2024 年 9 月弃用了
max_tokens,改用 max_completion_tokens。虽然 max_tokens 仍为向后兼容而受支持,但它会在内部自动转换为 max_completion_tokens。调用
流式传输用法元数据
OpenAI 的 Chat Completions API 默认不流式传输令牌用量统计(参见 OpenAI API 参考中的流选项)。 要在使用ChatOpenAI 或 AzureChatOpenAI 进行流式传输时恢复令牌计数,请将 stream_usage=True 设置为初始化参数或在调用时设置:
与 Azure OpenAI 配合使用
Azure OpenAI v1 API 支持自
langchain-openai>=1.0.1 起,ChatOpenAI 可直接用于 Azure OpenAI 端点,使用新的 v1 API。这提供了一种统一的方式来使用托管在 OpenAI 或 Azure 上的 OpenAI 模型。对于传统的 Azure 特定实现,请继续使用 AzureChatOpenAI。使用 Azure OpenAI v1 API 和 API 密钥
使用 Azure OpenAI v1 API 和 API 密钥
要将
ChatOpenAI 与 Azure OpenAI 配合使用,请将 base_url 设置为您的 Azure 端点,并在末尾附加 /openai/v1/:使用 Microsoft Entra ID 与 Azure OpenAI 配合使用
使用 Microsoft Entra ID 与 Azure OpenAI 配合使用
v1 API 添加了原生的 Microsoft Entra ID(前身为 Azure AD)身份验证支持,具有自动令牌刷新功能。将令牌提供者可调用对象传递给 令牌提供者是一个可调用对象,它会自动检索和刷新身份验证令牌,无需手动管理令牌过期。当使用异步函数时,您也可以将令牌提供者可调用对象传递给
api_key 参数:api_key 参数。您必须从 azure.identity.aio 导入 DefaultAzureCredential:当对 API 密钥使用异步可调用对象时,您必须使用异步方法(
ainvoke、astream 等)。同步方法将引发错误。工具调用
OpenAI 有一个 工具调用(此处我们互换使用“工具调用”和“函数调用”)API,允许您描述工具及其参数,并使模型返回一个包含要调用的工具和该工具输入的 JSON 对象。工具调用对于构建使用工具的链和代理,以及更广泛地从模型获取结构化输出非常有用。绑定工具
使用ChatOpenAI.bind_tools,我们可以轻松地将 Pydantic 类、dict 模式、LangChain 工具甚至函数作为工具传递给模型。底层这些会被转换为 OpenAI 工具模式,如下所示:
严格模式
需要
langchain-openai>=0.1.21strict 参数,这将强制模型遵守工具参数模式。查看更多。
如果
strict=True,工具定义也将被验证,并且只接受 JSON 模式的子集。关键的是,模式不能有可选参数(那些带有默认值的参数)。阅读 完整文档 了解支持的模式类型。工具调用
注意 AIMessage 有一个tool_calls 属性。它以标准化的 ToolCall 格式包含内容,这是与模型提供商无关的。
自定义工具
需要
langchain-openai>=0.3.29上下文无关文法
上下文无关文法
结构化输出
OpenAI 支持原生的 结构化输出功能,保证响应遵循给定的模式。 您可以在单个模型调用中访问此功能,或者通过指定 LangChain 代理 的 响应格式。示例如下。单个模型调用
单个模型调用
代理响应格式
代理响应格式
带工具调用的结构化输出
OpenAI 的 结构化输出 功能可以与工具调用同时使用。模型将生成工具调用或遵循所需模式的响应。见下方示例:Responses API
需要
langchain-openai>=0.3.9ChatOpenAI 将路由到 Responses API。也可以在实例化 ChatOpenAI 时指定 use_responses_api=True。
网页搜索
要触发网页搜索,像传递其他工具一样向模型传递{"type": "web_search_preview"}。
图像生成
需要
langchain-openai>=0.3.19{"type": "image_generation"}。

文件搜索
要触发文件搜索,像传递其他工具一样向模型传递 文件搜索工具。您需要填充 OpenAI 管理的向量存储,并在工具定义中包含向量存储 ID。有关更多详细信息,请参阅 OpenAI 文档。工具搜索
需要
langchain-openai>=1.1.11@tool(extras={"defer_loading": True}) 标记工具,并将 OpenAI 的搜索工具添加到可用工具中。示例如下。
服务器端工具搜索
服务器端工具搜索
OpenAI 可以在可用工具中搜索,并在同一响应中返回加载的工具(如果有适当的工具调用):
客户端执行工具搜索
客户端执行工具搜索
计算机使用
ChatOpenAI 支持 "computer-use-preview" 模型,这是一个专为内置计算机使用工具设计的专用模型。要启用,像传递其他工具一样传递 计算机使用工具。
目前,计算机使用的工具输出存在于消息 content 字段中。要回复计算机使用工具调用,请构造一个 ToolMessage,在其 additional_kwargs 中包含 {"type": "computer_call_output"}。消息的内容将是一张屏幕截图。下面,我们演示一个简单的示例。
首先,加载两张屏幕截图:
content 中包含对计算机使用工具的调用:
ToolMessage:
- 它具有与计算机调用的
call_id匹配的tool_call_id。 - 它在
additional_kwargs中具有{"type": "computer_call_output"}。 - 其内容是
image_url或input_image输出块(有关格式说明,请参阅 OpenAI 文档)。
previous_response_id:
代码解释器
OpenAI 实现了 代码解释器 工具,以支持沙盒代码生成和执行。Example use
远程 MCP
OpenAI 实现了 远程 MCP 工具,允许模型生成的调用 MCP 服务器。Example use
MCP 批准
MCP 批准
OpenAI 有时会在与远程 MCP 服务器共享数据之前请求批准。在上述命令中,我们指示模型从不要求批准。我们也可以配置模型始终请求批准,或始终为特定工具请求批准:响应可能包含类型为
"mcp_approval_request" 的块。要提交批准请求的批准,将其结构化到输入消息的内容块中:管理对话状态
Responses API 支持 对话状态 的管理。手动管理状态
您可以手动管理状态或使用 LangGraph,与其他聊天模型一样:传递 previous_response_id
使用 Responses API 时,LangChain 消息将在其元数据中包含 "id" 字段。将此 ID 传递给后续调用将继续对话。请注意,这在计费方面是 等效的 手动传递消息。
previous_response_id:
use_previous_response_id=True,输入消息直到最近的响应将从请求负载中删除,并且 previous_response_id 将使用最近响应的 ID 设置。
也就是说,
上下文管理
Responses API 支持自动 服务器端上下文压缩。当对话大小达到令牌阈值时,这会减少对话大小,从而支持长时间运行的交互:AIMessage 响应可能在内容中包含类型为 "compaction" 的块。这些应保留在对话历史记录中,并可以按 通常方式 附加到消息序列。最近的 compaction 项之前的消息可以保留,也可以丢弃以提高延迟。
推理输出
一些 OpenAI 模型将生成单独的文本内容来说明其推理过程。有关详细信息,请参阅 OpenAI 的 推理文档。 OpenAI 可以返回模型推理的摘要(尽管它不暴露原始推理令牌)。要配置ChatOpenAI 返回此摘要,请指定 reasoning 参数。如果设置了此参数,ChatOpenAI 将自动路由到 Responses API。
微调
您可以通过传递相应的modelName 参数来调用微调后的 OpenAI 模型。
这通常采用 ft:{OPENAI_MODEL_NAME}:{ORG_NAME}::{MODEL_ID} 的形式。例如:
多模态输入(图像、PDF、音频)
OpenAI 有支持多模态输入的模型。您可以将这些模型传递图像、PDF 或音频。有关如何在 LangChain 中执行此操作的更多信息,请前往 多模态输入 文档。 您可以在 OpenAI 文档 中查看支持不同模态的模型列表。 对于所有模态,LangChain 都支持其跨提供商标准以及 OpenAI 的原生内容块格式。 要将多模态数据传递给ChatOpenAI,请创建包含数据的 内容块 并将其合并到消息中,例如如下:
图像
图像
PDF
注意:OpenAI 要求为 PDF 输入指定文件名。使用 LangChain 格式时,请包含
filename 键。阅读有关 OpenAI 多模态消息的文件名 的更多信息。请参阅 PDF 文档操作指南 中的示例。In-line base64 data
预测输出
需要
langchain-openai>=0.2.6gpt-4o 和 gpt-4o-mini 系列)支持 预测输出,允许您提前传递 LLM 预期输出的一部分以减少延迟。这对于编辑文本或代码等情况很有用,其中只有模型输出的一小部分会更改。
这是一个示例:
预测作为额外令牌计费,可能会增加您的使用量和成本,以换取这种降低的延迟。
音频生成(预览)
需要
langchain-openai>=0.2.3gpt-4o-audio-preview 模型的音频输入和输出。
output_message.additional_kwargs['audio'] 将包含一个字典,如下所示
model_kwargs['audio']['format'] 中传递的格式。
我们也可以在此消息中传递带有音频数据的消息作为消息历史的一部分,在 openai expires_at 到期之前。
输出音频存储在
AIMessage.additional_kwargs 的 audio 键下,但输入内容块在 HumanMessage.content 列表中类型为 input_audio 类型和键。有关更多信息,请参阅 OpenAI 的 音频文档。提示词缓存
OpenAI 的 提示词缓存 功能自动缓存超过 1024 个令牌的提示词,以降低成本并提高响应速度。此功能对所有近期模型(gpt-4o 及更新版本)启用。
手动缓存
您可以使用prompt_cache_key 参数来影响 OpenAI 的缓存并优化缓存命中率:
缓存键策略
您可以根据应用程序的需求使用不同的缓存键策略:模型级缓存
您还可以使用model_kwargs 在模型级别设置默认缓存键:
灵活处理
OpenAI 提供多种 服务层级。“flex”层级提供更便宜的价格,但代价是响应可能需要更长时间,资源可能并不总是可用。这种方法最适合非关键任务,包括模型测试、数据增强或可以异步运行的作业。 要使用它,使用service_tier="flex" 初始化模型:
API 参考
如需所有功能和配置选项的详细文档,请前往ChatOpenAI API 参考。
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

