- 工具调用 - 调用外部工具(如数据库查询或 API 调用)并在响应中使用结果。
- 结构化输出 - 模型的响应被约束为遵循定义的格式。
- 多模态 - 处理和返回除文本以外的数据,例如图像、音频和视频。
- 推理 - 模型执行多步推理以得出结论。
有关特定于提供程序的集成信息和功能,请参阅提供程序的 聊天模型页面。
基本用法
模型可以通过两种方式利用:- 与智能体配合 - 在创建 智能体 时可以动态指定模型。
- 独立使用 - 可以直接调用模型(在智能体循环之外)用于文本生成、分类或提取等任务,而无需智能体框架。
初始化模型
在 LangChain 中开始使用独立模型的最简单方法是使用init_chat_model 从您选择的聊天模型提供商初始化一个(示例如下):
- OpenAI
- Anthropic
- Azure
- Google Gemini
- AWS Bedrock
- HuggingFace
init_chat_model。
支持的模型
LangChain 支持所有主要模型提供商,包括 OpenAI、Anthropic、Google、Azure、AWS Bedrock 等。每个提供商都提供各种具有不同能力的模型。有关 LangChain 中支持的所有模型的完整列表,请参阅 集成页面。关键方法
调用
模型将消息作为输入,并在生成完整响应后输出消息。
流式传输
调用模型,但在生成时实时流式传输输出。
批处理
批量向模型发送多个请求以实现更高效的处理。
除了聊天模型外,LangChain 还支持其他相关技术,例如嵌入模型和向量存储。有关详细信息,请参阅 集成页面。
参数
聊天模型接受可用于配置其行为的参数。支持参数的完整集因模型和提供商而异,但标准参数包括:string
required
您希望使用的特定模型的名称或标识符。您还可以使用 ’:’ 格式在单个参数中同时指定模型及其提供商,例如 ‘openai:o1’。
string
用于与模型提供商进行身份验证所需的密钥。这通常是在您注册访问模型时颁发的。通常通过设置 来访问。
number
控制模型输出的随机性。较高的数字使响应更具创造性;较低的数字使响应更具确定性。
number
限制响应中的 总数,有效地控制输出可以有多长。
number
在取消请求之前等待模型响应的最长时间(以秒为单位)。
number
default:"6"
如果由于网络超时或速率限制等问题导致请求失败,系统将尝试重新发送请求的最大次数。重试使用带有抖动的指数退避。网络错误、速率限制 (429) 和服务器错误 (5xx) 会自动重试。客户端错误如 401(未授权)或 404 不会重试。对于不可靠网络上的长时间运行 智能体 任务,考虑将此增加到 10–15。
init_chat_model,将这些参数作为内联 传递:
Initialize using model parameters
每个聊天模型集成可能有额外的参数用于控制特定于提供商的功能。例如,
ChatOpenAI 有 use_responses_api 来决定是使用 OpenAI Responses 还是 Completions API。要查找给定聊天模型支持的所有参数,请访问 聊天模型集成 页面。调用
必须调用聊天模型才能生成输出。有三种主要的调用方法,每种方法都适用于不同的用例。调用
调用模型最直接的方法是使用invoke() 并传入单条消息或消息列表。
Single message
Dictionary format
Message objects
如果您的调用返回类型是字符串,请确保您使用的是聊天模型而不是 LLM。传统的文本补全 LLM 直接返回字符串。LangChain 聊天模型以前缀 “Chat” 开头,例如
ChatOpenAI(/oss/integrations/chat/openai)。流式传输
大多数模型可以在生成过程中流式传输其输出内容。通过渐进式显示输出,流式传输显著改善了用户体验,特别是对于较长的响应。 调用stream() 返回一个 ,该迭代器在产生时输出块。您可以使用循环实时处理每个块:
invoke() 不同(它在模型完成生成完整响应后返回单个 AIMessage),stream() 返回多个 AIMessageChunk 对象,每个对象包含一部分输出文本。重要的是,流中的每个块都设计为可以通过求和收集为完整消息:
Construct an AIMessage
invoke() 生成的消息一样处理——例如,它可以聚合到消息历史记录中,并作为对话上下文传递回模型。
高级流式传输主题
高级流式传输主题
流式传输事件
流式传输事件
LangChain 聊天模型也可以使用
astream_events() 流式传输语义事件。这简化了基于事件类型和其他元数据的过滤,并将在后台聚合完整消息。下面是一个示例。“自动流式传输”聊天模型
“自动流式传输”聊天模型
LangChain 通过在特定情况下自动启用流式传输模式来简化聊天模型的流式传输,即使您没有显式调用流式传输方法。当您使用非流式传输调用方法但仍希望流式传输整个应用程序(包括来自聊天模型的中间结果)时,这特别有用。例如,在 LangGraph 智能体 中,您可以在节点中调用
model.invoke(),但如果以流式传输模式运行,LangChain 将自动委托给流式传输。工作原理
当您invoke() 聊天模型时,如果检测到您正在尝试流式传输整个应用程序,LangChain 将自动切换到内部流式传输模式。就使用 invoke 的代码而言,调用的结果将是相同的;然而,在聊天模型被流式传输时,LangChain 将负责在 LangChain 的回调系统中调用 on_llm_new_token 事件。回调事件允许 LangGraph stream() 和 astream_events() 实时显示聊天模型的输出。批处理
将一组独立的请求批处理到模型中可以显著提高性能并降低成本,因为处理可以并行完成:Batch
batch() 将仅返回整个批次的最终输出。如果您希望在每个输入完成生成时接收其输出,可以使用 batch_as_completed() 流式传输结果:
Yield batch responses upon completion
使用
batch_as_completed() 时,结果可能会乱序到达。每个结果都包含输入索引,以便根据需要匹配以重建原始顺序。工具调用
模型可以请求调用执行任务的工具,例如从数据库获取数据、搜索网络或运行代码。工具是以下两者的配对:- 一个模式,包括工具的名称、描述和/或参数定义(通常是 JSON 模式)
- 一个函数或 来执行。
您可能听说过“函数调用”一词。我们将其与“工具调用”互换使用。
bind_tools 将它们绑定。在随后的调用中,模型可以选择按需调用任何绑定的工具。
某些模型提供商提供 ,可以通过模型或调用参数启用(例如 ChatOpenAI、ChatAnthropic)。有关详细信息,请查看各自的 提供商参考。
Binding user tools
工具执行循环
工具执行循环
当模型返回工具调用时,您需要执行工具并将结果传递回模型。这会创建一个对话循环,模型可以使用工具结果生成最终响应。LangChain 包括 智能体 抽象,为您处理此编排。这是一个如何执行的简单示例:工具返回的每个
Tool execution loop
ToolMessage 都包含一个 tool_call_id,它与原始工具调用匹配,帮助模型将结果与请求关联起来。强制工具调用
强制工具调用
默认情况下,模型有权根据用户的输入选择使用哪个绑定的工具。但是,您可能希望强制选择工具,确保模型使用特定工具或给定列表中的任何工具:
并行工具调用
并行工具调用
许多模型支持在适当时并行调用多个工具。这允许模型同时从不同来源获取信息。模型根据请求操作的独立性智能地确定何时并行执行是合适的。
Parallel tool calls
流式传输工具调用
流式传输工具调用
流式传输响应时,工具调用通过 您可以累积块以构建完整的工具调用:
ToolCallChunk 逐步构建。这允许您在生成时查看工具调用,而无需等待完整响应。Streaming tool calls
Accumulate tool calls
结构化输出
可以要求模型以匹配给定模式的格式提供响应。这对于确保输出可以轻松解析并在后续处理中使用非常有用。LangChain 支持多种模式类型和强制执行结构化输出的方法。- Pydantic
- TypedDict
- JSON Schema
Pydantic 模型 提供最丰富的功能集,包括字段验证、描述和嵌套结构。
结构化输出的关键注意事项
- Method 参数:某些提供商支持不同的结构化输出方法:
'json_schema':使用提供商提供的专用结构化输出功能。'function_calling':通过强制遵循给定模式的 工具调用 派生出结构化输出。'json_mode':某些提供商提供的'json_schema'的前身。生成有效的 JSON,但模式必须在提示词中描述。
- Include raw:设置
include_raw=True以获取解析后的输出和原始 AI 消息。 - Validation:Pydantic 模型提供自动验证。
TypedDict和 JSON Schema 需要手动验证。
示例:消息输出与解析结构并存
示例:消息输出与解析结构并存
返回原始
AIMessage 对象 alongside 解析后的表示形式以访问响应元数据(如 令牌用量)可能很有用。为此,在调用 with_structured_output 时设置 include_raw=True:示例:嵌套结构
示例:嵌套结构
模式可以是嵌套的:
高级主题
模型档案
模型档案需要
langchain>=1.1。profile 属性暴露支持的功能和能力的字典:
- 摘要中间件 可以根据模型的上下文窗口大小触发摘要。
create_agent中的 结构化输出 策略可以自动推断(例如,通过检查对原生结构化输出功能的支持)。- 模型输入可以根据支持的 模态 和最大输入令牌进行限制。
- Deep Agents CLI 将 交互式模型切换器 过滤为报告
tool_calling支持和文本 I/O 的模型,并在选择器详细视图中显示上下文窗口大小和能力标志。
更新或覆盖档案数据
更新或覆盖档案数据
如果模型档案数据缺失、过时或不正确,可以更改它。选项 1(快速修复)您可以使用任何有效的档案实例化聊天模型:选项 2(修复上游数据)数据的主要来源是 models.dev 项目。这些数据与 LangChain 集成包 中的额外字段和覆盖合并,并随这些包一起分发。模型档案数据可以通过以下过程更新:此命令:
profile 也是一个普通的 dict,可以就地更新。如果模型实例是共享的,请考虑使用 model_copy 以避免修改共享状态。- (如果需要)通过向其 GitHub 仓库 提交拉取请求来更新 models.dev 处的源数据。
- (如果需要)通过向 LangChain 集成包 提交拉取请求来更新
langchain_<package>/data/profile_augmentations.toml中的额外字段和覆盖。 - 使用
langchain-model-profilesCLI 工具从 models.dev 拉取最新数据,合并增强内容并更新档案数据:
- 从 models.dev 下载
<provider>的最新数据 - 合并
<data_dir>中profile_augmentations.toml的增强内容 - 将合并的档案写入
<data_dir>中的profiles.py
libs/partners/anthropic:多模态
某些模型可以处理并返回非文本数据,如图像、音频和视频。您可以通过提供 内容块 将非文本数据传递给模型。 有关详细信息,请参阅消息指南的 多模态部分。 可以在其响应中返回多模态数据。如果被调用这样做,生成的AIMessage 将具有多模态类型的內容块。
Multimodal output
推理
许多模型能够执行多步推理以得出结论。这涉及将复杂问题分解为更小、更易管理的步骤。 如果底层模型支持,您可以显示此推理过程以更好地了解模型如何得出最终答案。'low' 或 'high')或整数令牌预算的形式。
有关详细信息,请查看您的相应聊天模型的 集成页面 或 参考。
本地模型
LangChain 支持在您自己的硬件上本地运行模型。这对于数据隐私至关重要的场景、您想调用自定义模型的场景,或者您想避免使用基于云的模型所产生的成本的场景非常有用。 Ollama 是本地运行聊天和嵌入模型最简单的方法之一。提示词缓存
许多提供商提供提示词缓存功能,以减少重复处理相同令牌的延迟和成本。这些功能可以是 隐式 或 显式 的:- 隐式提示词缓存:如果请求命中缓存,提供商将自动传递成本节省。示例:OpenAI 和 Gemini。
- 显式缓存:提供商允许您手动指示缓存点以获得更大的控制或保证成本节省。示例:
ChatOpenAI(通过prompt_cache_key)- Anthropic 的
AnthropicPromptCachingMiddleware - Gemini。
- AWS Bedrock
服务端工具使用
某些提供商支持服务端 工具调用 循环:模型可以与网络搜索、代码解释器和其他工具交互,并在单个对话回合中分析结果。 如果模型在服务端调用工具,响应消息的内容将包括代表工具调用和结果的內容。访问响应的 内容块 将以与提供商无关的格式返回服务端工具调用和结果:Invoke with server-side tool use
Result
速率限制
许多聊天模型提供商限制了给定时间段内可进行的调用次数。如果您达到速率限制,通常会收到提供商的速率限制错误响应,并且需要等待后才能发出更多请求。 为了帮助管理速率限制,聊天模型集成接受rate_limiter 参数,可以在初始化期间提供以控制请求发出的速率。
初始化和使用速率限制器
初始化和使用速率限制器
LangChain 附带(可选的)内置
InMemoryRateLimiter。此限制器是线程安全的,可以在同一进程中的多个线程之间共享。Define a rate limiter
基础 URL 和代理设置
您可以为实施 OpenAI Chat Completions API 的提供商配置自定义基础 URL。自定义基础 URL
自定义基础 URL
许多模型提供商提供 OpenAI 兼容 API(例如,Together AI、vLLM)。您可以通过指定适当的
base_url 参数使用 init_chat_model 与这些提供商配合:使用直接聊天模型类实例化时,参数名称可能因提供商而异。有关详细信息,请查看各自的 参考。
HTTP 代理配置
HTTP 代理配置
对数概率
某些模型可以配置为返回表示给定令牌可能性的令牌级对数概率,方法是在初始化模型时设置logprobs 参数:
Token 用量
许多模型提供商在调用响应中返回令牌用量信息。当可用时,此信息将包含在相应模型生成的AIMessage 对象中。有关更多详细信息,请参阅 消息 指南。
某些提供商 API,特别是 OpenAI 和 Azure OpenAI 聊天补全,要求用户在流式传输上下文中选择接收令牌用量数据。有关详细信息,请查看集成指南的 流式传输用量元数据 部分。
- 回调处理器
- 上下文管理器
调用配置
调用模型时,您可以使用RunnableConfig 字典通过 config 参数传递其他配置。这提供了对执行行为、回调和元数据跟踪的运行时控制。
常见的配置选项包括:
Invocation with config
- 使用 LangSmith 跟踪进行调试
- 实现自定义日志记录或监控
- 在生产中控制资源使用
- 跟踪复杂管道中的调用
关键配置属性
关键配置属性
可配置模型
您还可以通过指定configurable_fields 创建运行时可配置的模型。如果您不指定模型值,则 'model' 和 'model_provider' 将默认可配置。
带默认值的可配置模型
带默认值的可配置模型
我们可以创建带默认模型值的可配置模型,指定哪些参数是可配置的,并为可配置参数添加前缀:有关
configurable_fields 和 config_prefix 的更多详细信息,请参见 init_chat_model 参考。声明式地使用可配置模型
声明式地使用可配置模型
我们可以像对待常规实例化的聊天模型对象一样,在可配置模型上调用声明式操作,如
bind_tools、with_structured_output、with_configurable 等,并链接可配置模型。Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

