🌟 Message 参数详解:LLM的"对话笔记本"(附存储轮数计算)
✅ 一句话说清:messages = LLM的"对话笔记本"
你和AI的每句对话都记在本子上,
本子有大小限制(上下文长度),写满就自动删旧的! 📓
🧠 一、messages 参数怎么用?(生活化解释)
🌰 举个栗子:你和AI聊天的全过程
| 你 | AI | 代码怎么写(messages) |
|---|---|---|
| 问:“明天北京天气?” | 答:“晴,15°C” | {"role": "user", "content": "明天北京天气?"} |
| 问:“适合穿什么?” | 答:“穿薄外套” | {"role": "assistant", "content": "晴,15°C"} |
| 问:“那明天上海呢?” | 答:“上海多云,20°C” | {"role": "user", "content": "明天上海呢?"} |
💡 关键点:
messages就是这个笔记本的所有记录(按顺序排列),
你每次发消息,就往本子上加一行。
📏 二、能存多少轮对话?(重点!)
🔢 实际存储上限(以Qwen-Max为例)
| 项目 | 数值 | 生活类比 |
|---|---|---|
| 最大上下文长度 | 32,768 tokens | 本子总页数 |
| 每轮对话平均占用 | 50-100 tokens | 每页写100字 |
| 理论最大轮数 | 32,768 ÷ 50 ≈ 655轮 | 本子能写655页 |
| 实际推荐轮数 | 50-100轮 | 避免本子太满(留点空间) |
✅ 真实案例:
- 你和AI聊了 100轮(每轮平均60 tokens)→ 总占用 6,000 tokens
- 本子还剩 32,768 - 6,000 = 26,768 tokens → 还能聊400多轮!
⚠️ 三、为什么不能无限存?(阿里云的硬限制)
| 你想象的 | 现实 | 原因 |
|---|---|---|
| “本子无限大,想写多少写多少” | ❌ 本子有固定大小 | LLM的计算资源有限 |
| “AI能记住所有对话” | ❌ 只记住最近的对话 | 超过上下文长度会自动截断旧内容 |
| “每轮对话不占空间” | ❌ 每句都占token | 100字 ≈ 100 tokens |
💡 阿里云官方说明:
“Qwen-Max 最大上下文 32,768 tokens,超过后会丢弃最早的消息。”
—— DashScope文档
🛠️ 四、实战解决方案(代码+技巧)
✅ 方案1:自动清理旧对话(推荐!)
from dashscope import Generation
import tiktoken # 用这个算token数(pip install tiktoken)
def get_token_count(text):
"""估算token数(简化版)"""
return len(text) // 3 # 实际用tiktoken更准
# 模拟对话历史(实际用时要维护这个列表)
messages = [
{"role": "system", "content": "你是个天气助手"},
{"role": "user", "content": "北京天气?"},
{"role": "assistant", "content": "晴,15°C"}
]
# 检查是否超限(超过20,000 tokens就清理)
MAX_TOKENS = 20000
total_tokens = sum(get_token_count(msg["content"]) for msg in messages)
if total_tokens > MAX_TOKENS:
# 删除最早的用户消息(保留最近的)
messages.pop(1) # 跳过system消息
# 现在安全调用API
response = Generation.call(
model="qwen-max",
messages=messages
)
✅ 方案2:用阿里云的“对话管理”功能(最简单!)
DashScope 自动帮你清理!
只要调用API时传messages,
超过长度会自动截断最旧的消息(不用你操心)。
💡 验证:
你传1000轮对话 → API返回时,
系统会自动删掉最早的900轮 → 保留最近100轮。
🌰 五、真实生活案例(你每天都在用!)
📱 案例:微信聊天 vs LLM的messages
| 微信聊天 | LLM的messages | 限制 |
|---|---|---|
| 你和朋友聊1000条消息 → 微信能存(有云存储) | LLM的messages → 只能存655轮 | 本子大小固定 |
| 你翻聊天记录 → 能看1000条 | LLM调用API → 只能看到最近50-100轮 | 超出自动删 |
| 你问“上次说的奶茶” → 朋友能回“昨天说的” | LLM问“上次说的奶茶” → AI只能回忆最近50轮 | 超出就忘了 |
✅ 结论:
LLM就像一个记性不好的朋友,
只记得最近的对话,超过就忘!
(所以别指望它记住你10年前的聊天)
💡 六、避坑指南(新手必看)
| 问题 | 原因 | 解决方案 |
|---|---|---|
Error: context length exceeded | 传了太多轮对话 | 用方案1自动清理,或用MAX_TOKENS限制 |
| AI突然说“我记不清了” | 对话轮数超限 | 保持在50-100轮内,别堆太长 |
| 代码跑得慢 | 每次传全量对话 | 只传最近10-20轮(用messages[-20:]) |
✅ 七、终极总结(记住这个口诀)
“
messages是对话笔记本,
本子大小=32768 tokens,
每轮占50-100 tokens,
实际用50-100轮最稳,
超了自动删最早的消息!
(像微信聊天记录,超长自动删旧的)”
🌟 现在立刻测试(30秒搞定)
import dashscope
from dashscope import Generation
# 设置API Key(你的Key)
dashscope.api_key = "sk-xxx"
# 模拟100轮对话(实际用时会自动清理)
messages = []
for i in range(100):
messages.append({"role": "user", "content": f"第{i+1}轮对话"})
messages.append({"role": "assistant", "content": "已收到"})
# 直接调用API(DashScope会自动清理超限部分)
response = Generation.call(
model="qwen-max",
messages=messages
)
print("AI回复:", response.output.choices[0].message.content)
✅ 结果:
不会报错!
DashScope自动删掉最早的900轮 → 只保留最近100轮。
10万+

被折叠的 条评论
为什么被折叠?



