跳到主要内容

设计对话系统

问题

设计一个支持多轮对话、工具调用的 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: 如何处理超长对话的上下文?

答案

  1. 滑动窗口:保留最近的消息
  2. 历史摘要:将早期对话压缩为摘要
  3. 关键信息提取:重要信息存入长期记忆
  4. 组合策略:摘要 + 最近 N 条 + 当前消息

Q2: 对话系统如何做 A/B 测试?

答案

  • 用户分组,不同组使用不同模型/Prompt
  • 核心指标:用户满意度、对话轮数、完成率
  • 自动评估:LLM-as-Judge 打分
  • 逐步灰度放量

相关链接