- 工具调用 - 调用外部工具(如数据库查询或API调用)并在响应中使用结果。
- 结构化输出 - 模型的响应被约束为遵循定义的格式。
- 多模态 - 处理和返回文本以外的数据,如图像、音频和视频。
- 推理 - 模型执行多步推理以得出结论。
有关特定提供商的集成信息和功能,请参阅提供商的聊天模型页面。
基本用法
模型可以通过两种方式使用:- 与智能体一起使用 - 在创建智能体时可以动态指定模型。
- 独立使用 - 可以直接调用模型(在智能体循环之外)用于文本生成、分类或提取等任务,无需智能体框架。
初始化模型
在LangChain中开始使用独立模型的最简单方法是使用initChatModel 从您选择的聊天模型提供商初始化一个模型(示例如下):
- OpenAI
- Anthropic
- Azure
- Google Gemini
- Bedrock Converse
initChatModel。
支持的提供商和模型
LangChain通过专用的集成包支持所有主要的模型提供商。每个提供商包实现相同的标准化接口,因此您可以更换提供商而无需重写应用程序逻辑。新的模型名称可以立即使用——无需更新LangChain——因为提供商包会将模型名称直接传递给提供商的API。 浏览支持的提供商完整列表,或参阅提供商和模型了解提供商、包和模型名称在LangChain中如何协同工作的概念概述。关键方法
调用
模型接收消息作为输入,并在生成完整响应后输出消息。
流式传输
调用模型,但实时流式传输生成的输出。
批处理
向模型发送多个请求进行批处理,以实现更高效的处理。
除了聊天模型,LangChain还提供对其他相关技术的支持,如嵌入模型和向量存储。有关详细信息,请参阅集成页面。
参数
聊天模型接受可用于配置其行为的参数。支持的完整参数集因模型和提供商而异,但标准参数包括:string
required
您要与提供商一起使用的特定模型的名称或标识符。您也可以使用 ’:’ 格式在单个参数中同时指定模型及其提供商,例如 ‘openai:o1’。
string
与模型提供商进行身份验证所需的密钥。这通常在您注册访问模型时颁发。通常通过设置来访问。
number
控制模型输出的随机性。较高的数字使响应更具创造性;较低的数字使响应更具确定性。
number
限制响应中的总数,从而有效控制输出的长度。
number
在取消请求之前等待模型响应的最长时间(以秒为单位)。
number
default:"6"
如果请求因网络超时或速率限制等问题失败,系统将重新发送请求的最大尝试次数。重试使用带有抖动的指数退避。网络错误、速率限制(429)和服务器错误(5xx)会自动重试。客户端错误(如401未授权或404)不会重试。对于在不可靠网络上运行的长时间智能体任务,考虑将其增加到10-15。
initChatModel 时,将这些参数作为内联参数传递:
使用模型参数初始化
每个聊天模型集成可能有额外的参数,用于控制特定于提供商的功能。例如,
ChatOpenAI 有 use_responses_api 来决定是使用 OpenAI Responses 还是 Completions API。要查找给定聊天模型支持的所有参数,请转到聊天模型集成页面。调用
必须调用聊天模型才能生成输出。有三种主要的调用方法,每种方法都适用于不同的用例。调用
调用模型最直接的方法是使用invoke() 并传递单个消息或消息列表。
单条消息
对象格式
消息对象
如果您的调用返回类型是字符串,请确保您使用的是聊天模型而不是LLM。传统的文本补全LLM直接返回字符串。LangChain聊天模型以”Chat”为前缀,例如
ChatOpenAI(/oss/integrations/chat/openai)。流式传输
大多数模型可以在生成输出内容时进行流式传输。通过逐步显示输出,流式传输显著改善了用户体验,特别是对于较长的响应。 调用stream() 返回一个,该迭代器在生成输出块时产生它们。您可以使用循环实时处理每个块:
invoke() 在模型完成生成完整响应后返回单个 AIMessage 不同,stream() 返回多个 AIMessageChunk 对象,每个对象包含输出文本的一部分。重要的是,流中的每个块都设计为可以通过求和聚合为完整消息:
构建 AIMessage
invoke() 生成的消息一样处理——例如,它可以被聚合到消息历史中,并作为对话上下文传递回模型。
高级流式传输主题
高级流式传输主题
流式传输事件
流式传输事件
LangChain 聊天模型还可以使用
[有关事件类型和其他详细信息,请参阅
streamEvents()][BaseChatModel.streamEvents] 流式传输语义事件。这简化了基于事件类型和其他元数据的过滤,并将在后台聚合完整消息。请参阅下面的示例。streamEvents() 参考。"自动流式传输"聊天模型
"自动流式传输"聊天模型
LangChain 通过在某些情况下自动启用流式传输模式来简化从聊天模型的流式传输,即使您没有显式调用流式传输方法。当您使用非流式传输的 invoke 方法但仍希望流式传输整个应用程序(包括聊天模型的中间结果)时,这特别有用。例如,在 LangGraph 智能体中,您可以在节点内调用
model.invoke(),但如果在流式传输模式下运行,LangChain 将自动委派给流式传输。工作原理
当您invoke() 聊天模型时,如果 LangChain 检测到您正在尝试流式传输整个应用程序,它将自动切换到内部流式传输模式。就使用 invoke 的代码而言,调用的结果将是相同的;但是,当聊天模型被流式传输时,LangChain 将负责在 LangChain 的回调系统中调用 on_llm_new_token 事件。回调事件允许 LangGraph stream() 和 streamEvents() 实时显示聊天模型的输出。批处理
将一组独立请求批处理到模型可以显著提高性能并降低成本,因为可以并行处理:批处理
工具调用
模型可以请求调用执行任务的工具,例如从数据库获取数据、搜索网络或运行代码。工具是以下内容的配对:- 一个模式,包括工具的名称、描述和/或参数定义(通常是JSON模式)
- 一个函数或来执行。
您可能会听到”函数调用”这个术语。我们将其与”工具调用”互换使用。
bindTools 绑定它们。在后续调用中,模型可以根据需要选择调用任何绑定的工具。
一些模型提供商提供,可以通过模型或调用参数启用(例如 ChatOpenAI、ChatAnthropic)。有关详细信息,请查看相应的提供商参考。
绑定用户工具
工具执行循环
工具执行循环
当模型返回工具调用时,您需要执行工具并将结果传递回模型。这创建了一个对话循环,模型可以使用工具结果生成其最终响应。LangChain 包含智能体抽象来为您处理此编排。这是一个简单的示例:工具返回的每个
工具执行循环
ToolMessage 都包含一个与原始工具调用匹配的 tool_call_id,帮助模型将结果与请求关联起来。强制工具调用
强制工具调用
默认情况下,模型可以自由选择使用哪个绑定的工具,这取决于用户的输入。但是,您可能希望强制选择一个工具,确保模型使用特定工具或给定列表中的任何工具:
并行工具调用
并行工具调用
许多模型支持在适当时并行调用多个工具。这允许模型同时从不同来源收集信息。模型根据请求操作的独立性智能地确定何时适合并行执行。
并行工具调用
流式传输工具调用
流式传输工具调用
结构化输出
可以请求模型以匹配给定模式的格式提供其响应。这对于确保输出可以轻松解析并在后续处理中使用非常有用。LangChain 支持多种模式类型和强制结构化输出的方法。- Zod
- JSON Schema
- Standard Schema
zod 模式是定义输出模式的首选方法。请注意,当提供 zod 模式时,模型输出也将使用 zod 的解析方法根据模式进行验证。
结构化输出的关键考虑因素:
- 方法参数:一些提供商支持不同的方法(
'jsonSchema'、'functionCalling'、'jsonMode') - 包含原始数据:使用
includeRaw: true可以同时获取解析后的输出和原始AIMessage - 验证:Zod 和 Standard Schema 对象提供自动验证,而 JSON Schema 需要手动验证
- Standard Schema:任何实现 Standard Schema 规范的模式库都受支持,并在运行时进行验证
示例:消息输出与解析结构并存
示例:消息输出与解析结构并存
返回原始
AIMessage 对象与解析后的表示一起返回可能很有用,以便访问响应元数据,如令牌计数。为此,请在调用 with_structured_output 时设置 include_raw=True:示例:嵌套结构
示例:嵌套结构
模式可以嵌套:
高级主题
模型配置文件
模型配置文件需要
langchain>=1.1。profile 属性公开支持的功能和能力的字典:
- 摘要中间件可以根据模型的上下文窗口大小触发摘要。
createAgent中的结构化输出策略可以自动推断(例如,通过检查对原生结构化输出功能的支持)。- 模型输入可以根据支持的模态和最大输入令牌数进行门控。
- Deep Agents CLI 将交互式模型切换器过滤为配置文件报告
tool_calling支持和文本 I/O 的模型,并在选择器详细视图中显示上下文窗口大小和能力标志。
修改配置文件数据
修改配置文件数据
如果模型配置文件数据缺失、过时或不正确,可以对其进行更改。选项1(快速修复)您可以使用任何有效的配置文件实例化聊天模型:选项2(在上游修复数据)数据的主要来源是 models.dev 项目。这些数据与 LangChain 集成包中的额外字段和覆盖项合并,并随这些包一起发布。模型配置文件数据可以通过以下流程更新:
- (如果需要)通过向其 GitHub 仓库提交拉取请求来更新 models.dev 上的源数据。
- (如果需要)通过向 LangChain 集成包提交拉取请求来更新
langchain-<package>/profiles.toml中的额外字段和覆盖项。
多模态
某些模型可以处理和返回非文本数据,如图像、音频和视频。您可以通过提供内容块将非文本数据传递给模型。 有关详细信息,请参阅消息指南的多模态部分。 可以在其响应中返回多模态数据。如果被调用这样做,生成的AIMessage 将包含具有多模态类型的内容块。
多模态输出
推理
许多模型能够执行多步推理以得出结论。这涉及将复杂问题分解为更小、更易于管理的步骤。 **如果底层模型支持,**您可以将此推理过程呈现出来,以更好地理解模型如何得出最终答案。'low' 或 'high')或整数令牌预算的形式。
有关详细信息,请参阅您的相应聊天模型的集成页面或参考。
本地模型
LangChain 支持在您自己的硬件上本地运行模型。这对于数据隐私至关重要、您想调用自定义模型或希望避免使用基于云的模型所产生的成本的场景非常有用。 Ollama 是本地运行聊天和嵌入模型的最简单方法之一。提示缓存
许多提供商提供提示缓存功能,以减少重复处理相同令牌时的延迟和成本。这些功能可以是隐式的或显式的:- 隐式提示缓存: 如果请求命中缓存,提供商将自动传递成本节省。示例:OpenAI 和 Gemini。
- 显式缓存: 提供商允许您手动指示缓存点,以获得更大的控制权或保证成本节省。示例:
ChatOpenAI(通过prompt_cache_key)- Anthropic 的
AnthropicPromptCachingMiddleware - Gemini。
- AWS Bedrock
服务器端工具使用
一些提供商支持服务器端工具调用循环:模型可以在单个对话轮次中与网络搜索、代码解释器和其他工具交互并分析结果。 如果模型在服务器端调用工具,响应消息的内容将包含表示工具调用和结果的内容。访问响应的内容块将以与提供商无关的格式返回服务器端工具调用和结果:基础 URL 和代理设置
您可以为实现 OpenAI 聊天补全 API 的提供商配置自定义基础 URL。自定义基础 URL
自定义基础 URL
许多模型提供商提供 OpenAI 兼容的 API(例如 Together AI、vLLM)。您可以通过指定适当的
base_url 参数,将 initChatModel 与这些提供商一起使用:使用直接聊天模型类实例化时,参数名称可能因提供商而异。有关详细信息,请查看相应的参考。
对数概率
某些模型可以通过在初始化模型时设置logprobs 参数来配置返回令牌级别的对数概率,该概率表示给定令牌的可能性:
令牌使用情况
许多模型提供商在调用响应中返回令牌使用情况信息。当可用时,此信息将包含在相应模型生成的AIMessage 对象上。有关更多详细信息,请参阅消息指南。
调用配置
调用模型时,您可以使用RunnableConfig 对象通过 config 参数传递其他配置。这提供了对执行行为、回调和元数据跟踪的运行时控制。
常见配置选项包括:
带配置的调用
- 使用 LangSmith 跟踪进行调试
- 实现自定义日志记录或监控
- 在生产环境中控制资源使用
- 跟踪复杂管道中的调用
关键配置属性
关键配置属性
将这些文档通过 MCP 连接到 Claude、VSCode 等,以获取实时答案。

