设计对话系统
问题
设计一个支持多轮对话、工具调用的 AI 对话系统。
答案
一、系统架构
二、核心设计
对话历史管理
| 策略 | 说明 |
|---|---|
| 滑动窗口 | 保留最近 N 条消息 |
| Token 预算 | 按 Token 数截断 |
| 摘要压缩 | 用 LLM 将历史压缩为摘要 |
| 长期记忆 | 关键信息存入数据库 |
上下文构建
System Prompt
+ 用户画像/记忆
+ RAG 检索结果(如有)
+ 对话历史(压缩后)
+ 当前用户消息
数据模型
users: { id, name, preferences }
conversations: { id, user_id, title, created_at }
messages: { id, conversation_id, role, content, tool_calls, created_at }
memories: { id, user_id, key, value, updated_at }
三、多模型路由
通过路由降低成本,简单问题用小模型。
常见面试问题
Q1: 如何处理超长对话的上下文?
答案:
- 滑动窗口:保留最近的消息
- 历史摘要:将早期对话压缩为摘要
- 关键信息提取:重要信息存入长期记忆
- 组合策略:
摘要 + 最近 N 条 + 当前消息
Q2: 对话系统如何做 A/B 测试?
答案:
- 用户分组,不同组使用不同模型/Prompt
- 核心指标:用户满意度、对话轮数、完成率
- 自动评估:LLM-as-Judge 打分
- 逐步灰度放量