03 - 模型(Models):LLM 与 Chat Models
约 1365 字大约 5 分钟
LangChainModelsLLM
2026-03-08
第 03 课:模型(Models)- LLM 与 Chat Models
课程目标
通过本节课,你将学到:
- ✅ LLM vs Chat Models 的区别
- ✅ 如何选择合适的模型
- ✅ 模型参数详解(temperature、top_p 等)
- ✅ 多模型切换与负载均衡
一、LLM vs Chat Models
1.1 基本概念
LangChain 支持两种类型的模型:
| 类型 | 特点 | 适用场景 | 示例 |
|---|---|---|---|
| LLM | 输入字符串,输出字符串 | 简单文本生成、补全 | GPT-3, Davinci |
| Chat Models | 输入消息列表,输出消息 | 对话、多轮交互 | GPT-3.5, GPT-4, Claude |
1.2 LLM 示例
from langchain_openai import OpenAI
llm = OpenAI(model="gpt-3.5-turbo-instruct")
# 输入:字符串
response = llm.invoke("给我讲一个笑话")
# 输出:字符串
print(response) # "有一天..."1.3 Chat Models 示例
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage, AIMessage
chat = ChatOpenAI(model="gpt-3.5-turbo")
# 输入:消息列表
messages = [
SystemMessage(content="你是一个助手"),
HumanMessage(content="你好!"),
AIMessage(content="你好!有什么可以帮你的?"),
HumanMessage(content="今天天气怎么样?")
]
# 输出:AIMessage 对象
response = chat.invoke(messages)
print(response.content)1.4 推荐使用 Chat Models
为什么推荐 Chat Models?
- ✅ 支持多轮对话
- ✅ 可以设置 system prompt
- ✅ 区分用户和 AI 的消息
- ✅ 更符合实际应用场景
最佳实践:除非有特殊需求,否则优先使用 Chat Models。
二、模型选择
2.1 OpenAI 模型对比
| 模型 | 上下文长度 | 价格(输入/输出) | 适用场景 |
|---|---|---|---|
| gpt-3.5-turbo | 16K | $0.50 / $1.50 | 日常对话、快速响应 |
| gpt-4 | 8K | $30 / $60 | 复杂推理、高质量输出 |
| gpt-4-turbo | 128K | $10 / $30 | 长文本、多文档处理 |
| gpt-4o | 128K | $5 / $15 | 最新旗舰、多模态 |
2.2 国产模型推荐
| 模型 | 提供商 | 价格 | 特点 |
|---|---|---|---|
| GLM-4 | 智谱 AI | ¥0.1/千tokens | 中文能力强 |
| Qwen-Max | 阿里云 | ¥0.12/千tokens | 长上下文 |
| Baichuan2-Turbo | 百川智能 | ¥0.008/千tokens | 超高性价比 |
2.3 如何选择模型
决策树:
需要高质量推理?
├─ 是 → GPT-4 / Claude-3
└─ 否
├─ 需要长上下文(>16K)?
│ ├─ 是 → GPT-4-Turbo / Qwen-Max
│ └─ 否
│ ├─ 预算充足?
│ │ ├─ 是 → GPT-3.5-Turbo
│ │ └─ 否 → GLM-4 / Baichuan2三、模型参数详解
3.1 核心参数
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7, # 温度(0-2)
top_p=0.9, # 核采样(0-1)
max_tokens=500, # 最大输出长度
frequency_penalty=0, # 频率惩罚(-2到2)
presence_penalty=0, # 存在惩罚(-2到2)
)3.2 Temperature(温度)
作用:控制输出的随机性
| Temperature | 效果 | 适用场景 |
|---|---|---|
| 0 | 完全确定性,每次相同 | 代码生成、事实性问答 |
| 0.7 | 适度随机,平衡质量与创意 | 日常对话、写作 |
| 1.0+ | 高度随机,富有创意 | 创意写作、头脑风暴 |
示例:
# 低温度:稳定输出
llm_low_temp = ChatOpenAI(temperature=0)
response = llm_low_temp.invoke("1+1=?") # 永远是 "2"
# 高温度:创意输出
llm_high_temp = ChatOpenAI(temperature=1.5)
response = llm_high_temp.invoke("给我讲一个笑话") # 每次不同3.3 Top_p(核采样)
作用:控制词汇选择的范围
- top_p=0.9:从累计概率前 90% 的词汇中选择
- top_p=0.1:只从最可能的 10% 词汇中选择
建议:
- 通常只需调整 temperature
- 如果需要更精细控制,同时调整 temperature 和 top_p
3.4 Max_tokens(最大输出长度)
作用:限制生成的最大 token 数量
llm = ChatOpenAI(max_tokens=100)
response = llm.invoke("写一首诗") # 不会超过 100 个 token注意:
- 1 个汉字 ≈ 2-3 个 tokens
- 1 个英文单词 ≈ 1 个 token
四、多模型切换
4.1 基础切换
from langchain_openai import ChatOpenAI
# OpenAI
openai_llm = ChatOpenAI(model="gpt-3.5-turbo")
# 切换到 GPT-4
gpt4_llm = ChatOpenAI(model="gpt-4")
# 使用不同模型
response1 = openai_llm.invoke("你好")
response2 = gpt4_llm.invoke("你好")4.2 使用国产模型
GLM(智谱):
from langchain_community.chat_models import ChatZhipuAI
llm = ChatZhipuAI(
model="glm-4",
zhipuai_api_key="your_api_key"
)
response = llm.invoke("你好")Qwen(通义千问):
from langchain_community.chat_models import ChatTongyi
llm = ChatTongyi(
model="qwen-max",
dashscope_api_key="your_api_key"
)
response = llm.invoke("你好")4.3 模型路由(高级)
根据任务类型自动选择模型:
from langchain_openai import ChatOpenAI
class ModelRouter:
def __init__(self):
self.models = {
"fast": ChatOpenAI(model="gpt-3.5-turbo"),
"smart": ChatOpenAI(model="gpt-4"),
"cheap": ChatOpenAI(model="gpt-3.5-turbo-0125")
}
def route(self, task_type: str, prompt: str):
model = self.models.get(task_type, self.models["fast"])
return model.invoke(prompt)
router = ModelRouter()
# 快速响应任务
response = router.route("fast", "翻译:Hello")
# 复杂推理任务
response = router.route("smart", "分析这段代码的逻辑...")五、模型监控与调试
5.1 启用详细日志
import logging
from langchain.globals import set_verbose, set_debug
# 开启详细日志
set_verbose(True)
# 开启调试模式(更详细)
set_debug(True)
llm = ChatOpenAI(model="gpt-3.5-turbo")
response = llm.invoke("你好")5.2 Token 使用统计
from langchain.callbacks import get_openai_callback
llm = ChatOpenAI(model="gpt-3.5-turbo")
with get_openai_callback() as cb:
response = llm.invoke("你好")
print(f"Total Tokens: {cb.total_tokens}")
print(f"Prompt Tokens: {cb.prompt_tokens}")
print(f"Completion Tokens: {cb.completion_tokens}")
print(f"Total Cost (USD): ${cb.total_cost}")六、本课小结
核心要点
LLM vs Chat Models:
- Chat Models 更适合对话场景
- 推荐优先使用 Chat Models
模型选择:
- 日常任务:GPT-3.5-Turbo / GLM-4
- 复杂推理:GPT-4 / Claude-3
- 长文本:GPT-4-Turbo / Qwen-Max
参数调优:
- temperature:控制随机性
- max_tokens:控制输出长度
- top_p:控制词汇选择范围
多模型管理:
- 根据任务类型选择模型
- 使用 Model Router 自动路由
下节预告
下一课,我们将学习 提示词(Prompts),包括:
- Prompt Templates 的使用
- Few-shot Learning
- 提示词工程最佳实践
🎯 课后练习
- 模型对比:分别用 GPT-3.5 和 GPT-4 生成同一篇文章,对比质量差异。
- 参数调优:尝试不同的 temperature 值(0, 0.7, 1.5),观察输出变化。
- 模型切换:编写一个程序,根据用户输入长度自动选择合适的模型。