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

