目录
[一、LLM 与 ChatModel 的概念](#一、LLM 与 ChatModel 的概念)
[1. LLM](#1. LLM)
[2. ChatModel](#2. ChatModel)
[1. 单轮任务(适合 LLM)](#1. 单轮任务(适合 LLM))
[2. 多轮对话(适合 ChatModel)](#2. 多轮对话(适合 ChatModel))
[四、代码对比:LLM 与 ChatModel](#四、代码对比:LLM 与 ChatModel)
[使用 LLM:](#使用 LLM:)
[使用 ChatModel:](#使用 ChatModel:)
前言
在 LangChain 的生态中,开发者常常会接触到两个核心抽象:
-
LLM(Large Language Model) -
ChatModel
很多初学者容易混淆它们的概念、作用和使用场景。
本文将通过对比与代码示例,帮助你彻底理解它们的差异,并掌握在实际开发中如何选择。
一、LLM 与 ChatModel 的概念
1. LLM
在 LangChain 中,LLM 是最基础的语言模型接口,用于处理文本生成任务。
特点:
-
通用文本生成
-
不依赖对话上下文结构
-
可直接输入 Prompt 得到输出文本
示例:
python
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003", temperature=0.7)
response = llm("写一段介绍Python的文字")
print(response)
输出结果类似:
Python 是一种广泛使用的高级编程语言,...
2. ChatModel
ChatModel 是 LangChain 1.x 引入的 对话专用模型接口,针对多轮对话场景进行了优化。
特点:
-
支持多角色消息(system, user, assistant)
-
自带上下文管理
-
更适合 ChatGPT、Claude 等对话模型
示例:
python
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
chat = ChatOpenAI(model_name="gpt-4", temperature=0.7)
messages = [
SystemMessage(content="你是一名编程助手"),
HumanMessage(content="帮我写一个Python函数,实现斐波那契数列")
]
response = chat(messages)
print(response.content)
输出结果:
python
def fibonacci(n):
fib_seq = [0, 1]
for i in range(2, n):
fib_seq.append(fib_seq[i-1] + fib_seq[i-2])
return fib_seq[:n]
二、核心差异对比
| 特性 | LLM | ChatModel |
|---|---|---|
| 输入类型 | 文本 Prompt | 多角色消息列表 |
| 适用场景 | 单次文本生成 | 多轮对话、聊天场景 |
| 上下文管理 | 需自己管理 | 内置上下文结构(system/user/assistant) |
| 模型对接 | 通用 | 对话模型优化,例如 GPT-4, Claude |
| 输出 | 字符串 | ChatMessage 对象(包含 content、role 等) |
| 灵活性 | 高 | 针对对话特化,稍受限制 |
三、使用场景举例
1. 单轮任务(适合 LLM)
-
写文章摘要
-
生成代码片段
-
数据描述生成
-
简单问题回答
python
prompt = "请写一段关于人工智能发展的历史简介"
response = llm(prompt)
此时 LLM 足够使用,无需多轮对话结构。
2. 多轮对话(适合 ChatModel)
-
客服问答机器人
-
AI 助手(例如写作助手)
-
任务协助类对话
-
多轮编程辅导
python
messages = [
SystemMessage(content="你是一个旅行规划助手"),
HumanMessage(content="帮我规划北京三日游")
]
response = chat(messages)
ChatModel 能自动理解上下文,避免用户每次都重复信息。
四、代码对比:LLM 与 ChatModel
使用 LLM:
python
from langchain.llms import OpenAI
llm = OpenAI(model_name="text-davinci-003")
prompt = "请列出5个Python学习网站"
print(llm(prompt))
输出:
1. Python官方文档 (https://docs.python.org/3/)
2. Real Python (https://realpython.com/)
3. W3Schools Python教程 (https://www.w3schools.com/python/)
4. GeeksforGeeks Python教程 (https://www.geeksforgeeks.org/python/)
5. Tutorialspoint Python教程 (https://www.tutorialspoint.com/python/)
使用 ChatModel:
python
from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
chat = ChatOpenAI(model_name="gpt-4")
messages = [HumanMessage(content="帮我列出5个Python学习网站")]
response = chat(messages)
print(response.content)
输出结果相似,但 ChatModel 可以无缝支持:
如果你是多轮问答场景:
Human: 你能推荐适合初学者的Python课程吗?
Assistant: 当然,以下是一些适合初学者的Python课程...
五、迁移与兼容策略
在实际开发中,很多项目需要从 LLM → ChatModel 迁移:
-
单轮任务 → 保留 LLM 即可。
-
多轮对话 → 迁移到 ChatModel。
-
Agent / Workflow → 推荐使用 ChatModel,因为多节点交互和上下文管理非常关键。
-
Prompt 兼容性 → LLM 的字符串 Prompt 可以转换为 ChatModel 的
HumanMessage。
示例:
python
# LLM 字符串 Prompt
prompt = "写一首五言绝句"
# 转换为 ChatModel
from langchain.schema import HumanMessage
messages = [HumanMessage(content=prompt)]
六、总结
-
LLM:通用文本生成,适合单轮任务,输入输出简单,灵活性高。
-
ChatModel:对话专用,支持多角色消息和上下文,适合多轮场景,尤其在 Agent 或 Workflow 中不可或缺。
-
迁移策略:单轮保留 LLM,多轮迁移 ChatModel;Prompt 可以通过 HumanMessage 封装轻松迁移。
正确理解两者差异,有助于:
-
提高开发效率
-
优化资源使用(减少 Token 消耗)
-
提升多轮对话体验
-
构建稳定的 AI 系统
掌握 LLM 与 ChatModel 的差异,是每一个 LangChain 开发者的必修课。它不仅决定了你选型的合理性,也直接影响到 AI 系统的可扩展性与生产效率。