这一章讲清楚 LangChain 模型层的核心:Chat Model。它就像一个“统一插座”,让业务系统用同一套接口去调用 OpenAI、Claude、Gemini、Qwen、DeepSeek、Ollama 等不同模型。
一、Chat Model 是什么?
如果把大模型应用比作一台电脑,那么不同模型厂商就像不同规格的插头:OpenAI 一种接法,Anthropic 一种接法,Google Gemini 一种接法,国内模型和本地模型又是一种接法。
Chat Model 做的事情,就是在这些“插头”前面放一个统一插座。业务系统不用每次都关心底层模型 API 的细节,只需要按照 LangChain 的标准方式传入消息、调用模型、拿到返回结果。
LangChain 官方文档也把标准模型接口作为核心能力之一:不同模型提供商有不同 API 和响应格式,LangChain 通过标准接口让开发者更容易切换模型,减少供应商绑定。
二、为什么直接调模型 API 还不够?
很多人第一次做大模型应用,代码可能是这样的:拿到 API Key,拼一个 prompt,调用一次模型,然后把结果返回给用户。Demo 这样没问题,但真实项目很快会遇到麻烦。
第一个麻烦是模型 API 不统一。今天用 OpenAI,明天想换 Claude,后天想试 Gemini,参数名、返回字段、错误码、流式输出格式都可能不同。
第二个麻烦是能力不统一。有的模型支持工具调用,有的模型支持结构化输出,有的模型多模态强,有的模型推理强,有的模型便宜但不稳定。如果业务代码和某一个模型写死,后面很难扩展。
第三个麻烦是工程治理不好做。线上系统要做日志、重试、限流、超时、Token 统计、模型降级、Prompt 版本管理。如果每个模型都自己封装一套,维护成本会越来越高。
三、Chat Model 和传统 LLM 有什么区别?
传统 LLM 更像“输入一段文本,输出一段文本”。你给它一个 prompt,它返回一段字符串。
Chat Model 更像“输入一组消息,输出一条消息”。每条消息都有角色,比如 system、user、assistant、tool。这个差别非常关键,因为真正的 AI 应用往往不是一次性问答,而是多轮对话、带系统指令、带工具调用、带历史上下文的交互。
LangChain 的 Chat Model 集成文档明确说明:Chat Model 使用一组 messages 作为输入,并返回 messages 作为输出,而不是传统 LLM 那种纯文本输入输出。
四、Messages:模型看到的是“对话记录”,不是一句话
在 LangChain 里,常见消息有四类。System Message 用来告诉模型怎么表现,比如“你是一个专业客服助手,必须基于资料回答”。Human Message 是用户输入。AI Message 是模型的输出。Tool Message 是工具调用后的结果。
把它放到智能客服里就很好理解:用户问“我的订单到哪了”,模型先判断需要查订单工具,然后工具返回物流状态,最后模型再把工具结果组织成用户能看懂的话。
from langchain.messages import SystemMessage, HumanMessage
messages = [
SystemMessage("你是一个专业客服助手,回答要简洁准确。"),
HumanMessage("我怎么查询订单物流?")
]
response = model.invoke(messages)
这套消息结构的好处是:系统指令、用户问题、历史对话、工具结果可以放在同一条链路里,后面做 Agent、Memory、Tool Calling 时不会乱。
五、Chat Model 的三种基本调用方式
Chat Model 最常用的调用方式有三种:invoke、stream、batch。
方法 | 通俗理解 | 适合场景 | 输出特点 |
invoke | 问一次,等完整答案 | 普通问答、分类、摘要 | 返回完整 AIMessage |
stream | 边生成边返回 | 长文章、客服、Agent 进度 | 返回多个 chunk |
batch | 一次处理多个请求 | 批量分类、批量摘要 | 提升批处理效率 |
# 1. 普通调用
response = model.invoke("解释一下什么是 RAG")
# 2. 流式输出
for chunk in model.stream("写一段 LangChain 入门介绍"):
print(chunk.text, end="")
# 3. 批量调用
results = model.batch([
"总结文档 A",
"总结文档 B",
"总结文档 C"
])
六、统一接入不同模型:不是换 SDK,而是换配置
LangChain 官方推荐可以用 init_chat_model 初始化模型。它的核心价值不是少写几行代码,而是让“模型选择”变成配置层的问题,而不是业务代码的问题。
比如你今天想用 OpenAI,明天想用 Gemini,后天想试 Claude 或 OpenRouter。业务流程不应该大改,最好只是切换模型名、Provider、API Key 和少量参数。
from langchain.chat_models import init_chat_model
# OpenAI
model = init_chat_model("gpt-5.5")
# Google Gemini
model = init_chat_model("google_genai:gemini-2.5-flash-lite")
# Anthropic Claude
model = init_chat_model("claude-sonnet-4-6")
# 带参数初始化
model = init_chat_model(
"claude-sonnet-4-6",
temperature=0.3,
timeout=30,
max_tokens=1000,
max_retries=6,
)
实际项目里,不建议把模型名写死在代码里。更好的做法是放到配置中心:客服走低成本快模型,复杂分析走强模型,代码任务走擅长代码的模型,内部敏感数据走私有化模型。
七、模型能力不能只看“名字”,要看能力矩阵
很多人选模型只看排行榜,或者只看谁更火。真实落地不是这样。做 LangChain 应用时,模型能力要和业务场景匹配。
LangChain 官方 Models 文档把现代模型能力拆成几个维度:工具调用、结构化输出、多模态、推理能力等。Chat Model 集成页面也列出了不同模型集成对 Tool Calling、Structured Output、Multimodal 等能力的支持情况。
举几个例子:
如果你做智能客服,优先看工具调用、低延迟、稳定性和成本。
如果你做知识库问答,优先看长上下文、引用资料能力、中文理解能力和幻觉控制。
如果你做股票分析助手,优先看结构化输出、工具调用、推理能力和风险表达稳定性。
如果你做多模态应用,才重点看图像、音频、视频输入输出能力。
八、Chat Model 的返回值 AIMessage 里有什么?
Chat Model 返回的不是普通字符串,而是 AIMessage。你可以把它理解成“模型回信”,里面不仅有正文,还可能有工具调用、Token 用量、模型元数据等信息。
response = model.invoke("用一句话解释 LangChain")
print(response.content) # 模型正文
print(response.response_metadata) # 模型返回的元数据
print(response.usage_metadata) # Token 用量等信息,具体看模型支持情况
这点对企业项目很关键。因为线上系统不仅要展示答案,还要统计成本、分析耗时、排查错误、追踪模型行为。
九、Chat Model 和 Agent 是什么关系?
后面我们会讲 Agent。这里先埋一个伏笔:Agent 的“大脑”就是 Chat Model。
用户提出一个问题,Agent 会把问题、系统规则、工具列表、历史上下文一起交给 Chat Model。Chat Model 判断下一步是直接回答,还是调用工具,还是继续检索知识库。
所以,Chat Model 不是整个 LangChain 应用,但它是整个应用的推理核心。Prompt、Tools、RAG、Memory、LangGraph 都会围绕它展开。
十、企业项目里怎么落地?推荐 Java 主服务 + Python AI 服务
如果你是 Java 后端开发者,不一定要把所有 LangChain 逻辑写进 Java 项目里。更推荐的结构是:Java 主服务负责用户、权限、业务、审计;Python FastAPI 服务负责 LangChain、模型调用、Prompt、RAG、工具编排。
这样做的好处是两边职责清楚。Java 保持业务系统稳定,Python 利用 AI 生态快速试模型、接 RAG、接 Agent。
十一、实战建议:Chat Model 层一定要封装好
真正做项目时,不建议在每个业务代码里到处 new model。建议单独做一个 Model Gateway 或 Model Service,把模型初始化、参数、重试、超时、日志、限流、降级统一收口。
一个比较稳的封装思路是:
• 模型配置放到配置中心,不写死在业务代码里。
• 每次调用都带 requestId,方便排查完整链路。
• 不同任务使用不同模型,别所有任务都上最贵的大模型。
• 必须记录模型名称、Prompt 版本、输入输出、Token 消耗、耗时和异常。
• 模型失败时要有重试、降级和兜底答案。
• 涉及金融、医疗、法律等高风险场景时,要做输出校验和风险提示。
十二、总结
这一章可以用一句话收尾:Chat Model 是 LangChain 模型层的统一入口,它把不同模型提供商的差异,尽量收敛成一套标准的调用方式。
对开发者来说,Chat Model 解决的不是“让模型变聪明”的问题,而是“让模型调用变工程化”的问题。
它让你可以用统一的 Messages、统一的 invoke / stream / batch、统一的返回消息,去连接不同模型。后面无论你做 RAG、Tool Calling、Agent、Memory,都会站在 Chat Model 这一层之上。
下一章建议继续讲 Messages:为什么大模型对话不是简单字符串,而是一组有角色、有状态、有工具结果的消息。
内容来源:Chat Model:LangChain 如何统一调用不同大模型?:功能变化与行业影响解析_热闻岛