基于 LLM 的智能体与传统对话系统混合架构 #
面向职位:传音集团 · 资深后端开发 — 大模型算法部 核心职责 #2:研发基于 LLM 的智能体和传统对话系统的混合架构 覆盖:任务规划、Memory、工具、RAG、对话管理、NLU 等任务的后台系统
一、为什么要混合架构? #
1.1 纯 LLM Agent 的不足 #
| 问题 | 场景 | 影响 |
|---|---|---|
| 幻觉 | 用户问"我的套餐还剩多少流量" | LLM 无法给出精确答案 |
| 不可控 | 多轮对话中的状态管理 | 对话跑偏、任务丢失 |
| 成本高 | 每个请求都调大模型 | 5 亿+ AI 请求的成本不可承受 |
| 延迟大 | 简单意图(天气、闹钟)也走 LLM | 用户体验劣化 |
| 合规难 | 敏感场景(支付、身份验证) | LLM 无法保证确定性输出 |
1.2 纯传统对话系统的不足 #
| 问题 | 场景 | 影响 |
|---|---|---|
| 泛化差 | 用户表达与训练集不一致 | 意图识别失败 |
| 维护成本高 | 每新增一个意图需标注 + 训练 | 迭代慢 |
| 多轮能力弱 | 复杂任务需硬编码对话树 | 开发成本高 |
| 无法处理开放域 | 闲聊、创意生成 | 体验僵硬 |
1.3 混合架构的设计原则 #
确定性任务 → 传统对话系统(快、准、省)
↑
│ 意图路由(轻量分类器)
│
模糊/复杂任务 → LLM Agent(泛化、推理、创造)
↑
│ LLM 自主判断
│
需要专业知识 → LLM + RAG(检索增强生成)
↑
│ 工具触发判断
│
需要外部操作 → LLM + 工具调用(Function Calling)
核心思想:不是"LLM vs 传统",而是"LLM + 传统",让系统在最合适的层级处理每个请求。
二、整体架构 #
2.1 系统全景图 #
┌──────────────────────────────────────────────────────────────────┐
│ 用户输入 │
│ 语音/文本/图片/视频 → 多模态输入解析 │
├──────────────────────────────────────────────────────────────────┤
│ 【输入理解层 — Input Understanding】 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ ASR 语音识别 │ │ 视觉理解 │ │ 语种检测 │ │
│ │ (多语种) │ │ (OCR/场景) │ │ (140种) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ └────────────────┼────────────────┘ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ NLU Engine(自然语言理解) │ │
│ │ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ │ 意图分类器 │ │ 实体抽取器 │ │ 情感/安全分析 │ │ │
│ │ │ (BERT小模型) │ │ (NER/正则) │ │ │ │ │ │
│ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │
│ │ └──────────────────┼─────────────────┘ │ │
│ │ ▼ │ │
│ │ 统一理解结果 │ │
│ │ { intent, entities, confidence, language, ... } │ │
│ └────────────────────┬────────────────────────────────────┘ │
├─────────────────────────┼──────────────────────────────────────┤
│ 【路由与调度层 — Routing】 │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 智能路由器(Router) │ │
│ │ │ │
│ │ if confidence > 0.95 && 确定性意图: │ │
│ │ → 传统对话系统(Dialogue Manager) │ │
│ │ elif 需要外部知识: │ │
│ │ → LLM + RAG │ │
│ │ elif 需要外部操作: │ │
│ │ → LLM + 工具调用 │ │
│ │ elif 复杂推理/多步任务: │ │
│ │ → LLM Agent(Planner + Executor) │ │
│ │ else: │ │
│ │ → 自由对话 LLM │ │
│ └─────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────────┤
│ 【执行层 — Execution(多路径并行)】 │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 传统对话系统 │ │ LLM Agent │ │ LLM + RAG │ │
│ │ (Dialogue Mgr)│ │ (Planner + │ │ (检索+生成) │ │
│ │ │ │ Tools + │ │ │ │
│ │ · 确定性意图 │ │ Memory) │ │ · 知识问答 │ │
│ │ · 快捷指令 │ │ │ │ · 文档问答 │ │
│ │ · 设备控制 │ │ · 任务规划 │ │ · 精准检索 │ │
│ │ · 安全拦截 │ │ · 工具调用 │ │ · 事实核查 │ │
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │ │
│ └─────────────────┼─────────────────┘ │
│ ▼ │
├──────────────────────────────────────────────────────────────────┤
│ 【输出层 — Output Generation】 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 文本生成 │ │ 语音合成 │ │ 视觉输出 │ │
│ │ (模板/LLM) │ │ (TTS多语种) │ │ (卡片/图表) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└──────────────────────────────────────────────────────────────────┘
三、核心模块详细设计 #
3.1 NLU Engine(自然语言理解) #
┌────────────────────────────────────────────┐
│ NLU Pipeline │
│ │
│ 原始输入 │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 语种检测 │ ← 140 种语言 │
│ │ (FastText) │ │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 意图分类 │ ← 轻量 BERT(< 50M 参数) │
│ │ │ 端侧可部署 │
│ │ 层级意图体系: │ │
│ │ L1: 领域 │ 语音/翻译/视觉/设备控制 │
│ │ L2: 意图 │ 查天气/设闹钟/翻译文本 │
│ │ L3: 子意图 │ 中译英/英译法/法译中 │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 实体抽取 │ ← NER + 正则规则 │
│ │ │ 时间/地点/语言/设备名 │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 置信度评估 │ ← 分类置信度 + 规则匹配 │
│ │ │ 决定路由方向 │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ NLU Result: │
│ { intent, entities, confidence, language } │
└────────────────────────────────────────────┘
技术选型:
| 组件 | 方案 | 理由 |
|---|---|---|
| 语种检测 | FastText Language ID | 轻量、176 种语言、< 1MB 模型 |
| 意图分类 | DistilBERT / TinyBERT | 端侧可部署、推理 < 20ms |
| 实体抽取 | spaCy + 自定义规则 | 结构化实体(时间/设备名)用规则更准 |
| 置信度 | Temperature-scaled Softmax | 避免过度自信,支持阈值判断 |
3.2 智能路由器(Router) #
// 路由决策(Go 伪代码)
type Router struct {
traditionalHandler *DialogueManager
llmAgentHandler *LLMAgent
ragHandler *RAGEngine
freeChatHandler *LLMChat
}
func (r *Router) Route(nluResult NLUResult, session Session) Handler {
// 1. 安全/合规检查(最高优先级)
if r.isSensitiveIntent(nluResult.Intent) {
return r.traditionalHandler // 确定性传统系统
}
// 2. 高置信度 + 确定性意图 → 传统系统
if nluResult.Confidence > 0.95 && isDeterministic(nluResult.Intent) {
return r.traditionalHandler
}
// 3. 知识密集型 → RAG
if needsExternalKnowledge(nluResult.Intent) {
return r.ragHandler
}
// 4. 需要外部操作 → LLM + 工具
if needsToolExecution(nluResult.Intent) {
return r.llmAgentHandler
}
// 5. 复杂多步推理 → LLM Agent Planner
if isComplexTask(nluResult) {
return r.llmAgentHandler
}
// 6. 自由对话 → 直连 LLM
return r.freeChatHandler
}
// 意图类型判断
func isDeterministic(intent string) bool {
deterministicIntents := map[string]bool{
"device.control.set_alarm": true, // 设闹钟
"device.control.set_timer": true, // 设计时器
"device.control.wifi_toggle": true, // 开关 WiFi
"device.control.bluetooth": true, // 蓝牙控制
"query.weather": true, // 查天气(走 API,不走 LLM)
"query.battery": true, // 查电量
"query.signal": true, // 查信号
"translate.text": true, // 翻译(走翻译引擎)
}
return deterministicIntents[intent]
}
3.3 传统对话系统(Dialogue Manager) #
┌─────────────────────────────────────────────────┐
│ 传统对话系统(Dialogue Manager) │
│ │
│ ┌───────────┐ ┌───────────┐ ┌──────────┐ │
│ │ 意图匹配 │───→│ 对话状态 │───→│ 响应生成 │ │
│ │ (规则引擎) │ │ 管理 (DST)│ │ (模板) │ │
│ └───────────┘ └───────────┘ └──────────┘ │
│ │
│ 适用场景: │
│ · 设备控制(闹钟/WiFi/蓝牙/音量) │
│ · 快捷查询(天气/电量/信号/时间) │
│ · 翻译请求(路由到翻译引擎) │
│ · 安全拦截(支付/身份验证/隐私操作) │
│ │
│ 技术: │
│ · 规则引擎:Drools / 自研规则 DSL │
│ · 对话状态:有限状态机(FSM) │
│ · 响应生成:模板引擎(支持多语言 i18n) │
└─────────────────────────────────────────────────┘
对话状态管理(DST):
// 对话状态机(Go 伪代码)
type DialogueState struct {
SessionID string
CurrentIntent string
Slots map[string]string // 槽位填充
Context map[string]any // 上下文信息
Step int // 对话步骤
}
type DialogueManager struct {
stateStore *RedisStore // 会话状态存储(Redis)
ruleEngine *RuleEngine // 规则引擎
template *I18nTemplate // 多语言模板
}
func (dm *DialogueManager) Process(nluResult NLUResult, sessionID string) Response {
// 1. 加载或创建对话状态
state := dm.stateStore.GetOrCreate(sessionID)
// 2. 槽位填充
state.FillSlots(nluResult.Entities)
// 3. 规则匹配
rule := dm.ruleEngine.Match(state)
// 4. 状态转移
state = rule.Apply(state)
// 5. 生成响应
response := dm.template.Render(rule.ResponseTemplate, state.Slots, nluResult.Language)
// 6. 保存状态
dm.stateStore.Save(state)
return response
}
3.4 任务规划器(Planner) #
┌─────────────────────────────────────────────────┐
│ LLM Agent — 任务规划器 │
│ │
│ 用户输入:"帮我查下明天从深圳到内罗毕的机票, │
│ 顺便看看那边的天气怎么样" │
│ │
│ LLM Planner 输出: │
│ ┌─────────────────────────────────────────┐ │
│ │ Plan: │ │
│ │ Step 1: 搜索机票(工具:flight_search) │ │
│ │ 输入: {origin: "深圳", dest: "内罗毕", │ │
│ │ date: "2026-08-25"} │ │
│ │ Step 2: 查询天气(工具:weather_query) │ │
│ │ 输入: {location: "内罗毕", │ │
│ │ date: "2026-08-25"} │ │
│ │ Step 3: 汇总结果(工具:无,LLM 生成) │ │
│ │ 输入: {flight_results, weather_results}│ │
│ └─────────────────────────────────────────┘ │
│ │
│ 规划策略: │
│ · ReAct(Reason + Act) │
│ · Plan-and-Execute │
│ · 支持并行执行(Step 1 和 Step 2 可并行) │
└─────────────────────────────────────────────────┘
Planner 实现:
type TaskPlanner struct {
llm *LLMClient // LLM 客户端
toolRegistry *ToolRegistry // 工具注册表
}
func (p *TaskPlanner) Plan(userInput string, context string) *Plan {
// 构建 Planner Prompt
prompt := fmt.Sprintf(`
You are a task planner. Given the user request and available tools,
create a step-by-step plan.
Available tools:
%s
User request: %s
Context: %s
Return the plan as JSON with steps. Mark steps that can run in parallel.
`, p.toolRegistry.DescribeAll(), userInput, context)
// LLM 生成计划
planJSON := p.llm.Generate(prompt)
// 解析为执行计划
return ParsePlan(planJSON)
}
3.5 Memory 系统 #
┌──────────────────────────────────────────────────────────┐
│ Memory 分层体系 │
│ │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────┐ │
│ │ 短期记忆 │ │ 长期记忆 │ │ 工作记忆 │ │
│ │ (Session) │ │ (User Profile) │ │ (Context) │ │
│ │ │ │ │ │ │ │
│ │ · 当前对话历史 │ │ · 用户偏好 │ │ · 当前任务 │ │
│ │ · 槽位填充状态 │ │ · 个人信息 │ │ · 工具结果 │ │
│ │ · 近期交互 │ │ · 行为习惯 │ │ · 中间变量 │ │
│ │ │ │ · 历史意图 │ │ │ │
│ │ 存储:Redis │ │ 存储:ES + 向量 │ │ 存储:内存 │ │
│ │ TTL:30 min │ │ TTL:永久 │ │ TTL:单次 │ │
│ └────────────────┘ └────────────────┘ └────────────┘ │
│ │
│ Memory 检索流程: │
│ 用户输入 → 意图识别 → Memory 查询 → 注入 Prompt │
│ │
│ 例: │
│ 用户:"像上次那样翻译这段话" │
│ → 检索长期记忆:用户上次翻译是中→英 │
│ → 注入:Translate Chinese to English │
│ → 执行翻译 │
└──────────────────────────────────────────────────────────┘
Memory 实现:
type MemoryManager struct {
shortTerm *ShortTermMemory // Redis 存储
longTerm *LongTermMemory // ES + 向量数据库
working *WorkingMemory // 内存
}
// 记忆检索与注入
func (m *MemoryManager) EnrichContext(sessionID string, userInput string) Context {
ctx := Context{}
// 1. 短期记忆(对话历史)
ctx.RecentTurns = m.shortTerm.GetHistory(sessionID)
// 2. 长期记忆(用户偏好,向量检索 Top-K)
userProfile := m.longTerm.Retrieve(sessionID, userInput)
ctx.Preferences = userProfile.Preferences
ctx.Habits = userProfile.Habits
// 3. 工作记忆(当前任务状态)
ctx.CurrentTask = m.working.Get(sessionID)
return ctx
}
// 记忆更新
func (m *MemoryManager) Update(sessionID string, turn Turn) {
// 短期记忆更新
m.shortTerm.Append(sessionID, turn)
// 重要信息沉淀到长期记忆
if m.shouldPersist(turn) {
m.longTerm.Persist(sessionID, turn)
}
}
3.6 工具系统(Tool System) #
┌──────────────────────────────────────────────────────┐
│ 工具注册与调用体系 │
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ Tool Registry │ │
│ │ │ │
│ │ 内置工具: │ │
│ │ ├─ weather_query(天气查询) │ │
│ │ ├─ translate_text(翻译) │ │
│ │ ├─ device_control(设备控制) │ │
│ │ ├─ search_web(搜索) │ │
│ │ └─ calculate(计算器) │ │
│ │ │ │
│ │ MCP 工具(第三方): │ │
│ │ ├─ flight_search(机票搜索) │ │
│ │ ├─ image_gen(图像生成) │ │
│ │ └─ ... │ │
│ │ │ │
│ │ 每个工具注册: │ │
│ │ { name, description, parameters, schema } │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ 工具调用流程: │
│ LLM 输出 Function Call → Tool Router → 执行工具 │
│ → 返回结果 → LLM 生成最终回复 │
└──────────────────────────────────────────────────────┘
工具调用实现:
type ToolExecutor struct {
registry *ToolRegistry
limiter *RateLimiter
}
func (e *ToolExecutor) Execute(toolName string, params map[string]any) (*ToolResult, error) {
// 1. 查找工具
tool, ok := e.registry.Get(toolName)
if !ok {
return nil, fmt.Errorf("tool %s not found", toolName)
}
// 2. 参数校验
if err := tool.ValidateParams(params); err != nil {
return nil, err
}
// 3. 限流检查
if !e.limiter.Allow(toolName) {
return nil, ErrRateLimited
}
// 4. 执行工具
result, err := tool.Execute(params)
if err != nil {
return nil, err
}
// 5. 计量
e.registry.RecordUsage(toolName)
return result, nil
}
3.7 RAG 引擎(检索增强生成) #
┌──────────────────────────────────────────────────────────┐
│ RAG Pipeline │
│ │
│ 用户问题 │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ 查询改写 │ ← LLM 改写/扩展查询 │
│ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ 检索层 │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 向量检索 │ │ 关键词 │ │ │
│ │ │ (Milvus/ │ │ 检索 │ │ │
│ │ │ FAISS) │ │ (ES) │ │ │
│ │ └────┬─────┘ └────┬─────┘ │ │
│ │ └──────┬──────┘ │ │
│ │ ▼ │ │
│ │ ┌──────────────┐ │ │
│ │ │ 混合排序 │ ← RRF/BM25+ │ │
│ │ │ (RRF 融合) │ 向量相似度 │ │
│ │ └──────┬───────┘ │ │
│ └──────────────┼─────────────────────┘ │
│ │ Top-K Chunks │
│ ▼ │
│ ┌──────────────────────────────────────┐ │
│ │ 生成层 │ │
│ │ │ │
│ │ Prompt: │ │
│ │ "根据以下参考信息回答问题: │ │
│ │ {retrieved_chunks} │ │
│ │ 问题: {user_question} │ │
│ │ 如果参考信息不足以回答问题, │ │
│ │ 请明确告知用户" │ │
│ └──────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────┘
传音 RAG 知识库来源:
| 知识库 | 内容 | 用途 |
|---|---|---|
| 设备手册 | TECNO/itel/Infinix 全系列说明书 | 设备相关问题解答 |
| FAQ | 常见问题与解决方案 | 客服场景 |
| 产品文档 | AI 功能说明、更新日志 | 产品功能查询 |
| 本地知识 | 各国交通、医疗、教育信息 | 本地生活问答 |
技术选型:
| 组件 | 方案 | 理由 |
|---|---|---|
| 向量数据库 | Milvus / FAISS | 大规模向量检索、支持分布式 |
| 关键词检索 | Elasticsearch | 成熟、支持多语言分词 |
| Embedding 模型 | bge-m3 / 自研多语种模型 | 支持 100+ 语言 |
| 排序融合 | RRF(Reciprocal Rank Fusion) | 简单有效、无需训练 |
四、端到端请求处理流程 #
4.1 完整请求流程 #
用户语音输入:"帮我把刚才拍的那张照片翻译成英文,然后发给我妈"
│
▼
[1] ASR: 语音 → 文本 "帮我把刚才拍的那张照片翻译成英文,然后发给我妈"
│
▼
[2] NLU:
intent: "composite_task"
entities: [{type: "photo", ref: "last_taken"},
{type: "language", value: "en"},
{type: "contact", ref: "mother"}]
confidence: 0.72
│
▼
[3] Router: confidence 0.72 < 0.95, 复合任务 → LLM Agent
│
▼
[4] Planner:
Step 1: 获取最近拍摄的照片(工具:photo_get_last)
Step 2: 图片 OCR 提取文字(工具:ocr_image)
Step 3: 翻译文字为中→英(工具:translate_text)
Step 4: 生成翻译后的图片(工具:image_overlay_text)
Step 5: 发送给联系人(工具:contact_send_photo)
│
▼
[5] 执行(部分并行):
Step 1 → photo_get_last → 返回照片路径
Step 2 → ocr_image(照片) → 返回文字 "你好世界"
Step 3 → translate_text("你好世界", zh→en) → "Hello World"
Step 4 → image_overlay_text(照片, "Hello World") → 新图片
Step 5 → contact_send_photo(母亲, 新图片) → 成功
│
▼
[6] 最终回复: "已将翻译后的照片发送给您母亲"
│
▼
[7] TTS: 文本 → 语音播报
│
▼
[8] Memory 更新:
短期: 记录本次对话
长期: 用户偏好"翻译后发送"模式
4.2 技术栈总览 #
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 语言 | Go (主力) + Python (ML 服务) | Go 高并发后端,Python 模型推理 |
| API 框架 | Go gin / fiber | 高性能 HTTP 框架 |
| RPC | gRPC + Protobuf | 内部服务间通信 |
| 缓存 | Redis Cluster | 会话状态、热数据、限流 |
| 搜索引擎 | Elasticsearch | 关键词检索、日志分析 |
| 向量数据库 | Milvus / FAISS | 语义检索、RAG |
| 消息队列 | Kafka / Pulsar | 异步任务、事件流 |
| 模型服务 | vLLM / TGI | LLM 推理服务 |
| 容器编排 | Kubernetes | 服务部署与弹性伸缩 |
| 监控 | Prometheus + Grafana | 指标监控 |
| 日志 | ELK Stack | 日志收集与分析 |
| 链路追踪 | Jaeger | 分布式链路追踪 |
五、性能优化策略 #
5.1 分层延迟控制 #
| 路径 | 目标延迟 | 优化手段 |
|---|---|---|
| 传统系统路径 | < 100ms | Redis 状态、规则引擎、模板渲染 |
| LLM 直连路径 | < 500ms (首 Token) | vLLM PagedAttention、KV Cache |
| RAG 路径 | < 2s | 向量检索 < 50ms + LLM 推理 |
| Agent 多步路径 | < 5s | 工具并行执行、结果缓存 |
5.2 成本优化 #
| 策略 | 说明 | 预期节省 |
|---|---|---|
| 意图路由 | 简单意图走传统系统,不调 LLM | ~40% 请求不调 LLM |
| 端侧推理 | 轻量任务端侧完成 | ~20% 请求不上云 |
| 结果缓存 | 相同查询缓存结果(天气/翻译) | ~15% 请求走缓存 |
| 模型分级 | 简单任务用小模型,复杂任务用大模型 | ~30% Token 成本 |
| 批量处理 | 非实时请求批量推理 | ~10% 推理成本 |
5.3 可扩展性设计 #
水平扩展:
· NLU Service:无状态,K8s HPA 自动扩缩
· Dialogue Manager:Redis 分片存储会话状态
· Agent Orchestrator:无状态,按需扩展
· Tool Service:每个工具独立部署,独立扩缩
· RAG Service:Milvus 集群扩展
垂直扩展:
· LLM 推理:GPU 实例扩容 + 模型并行
· 向量检索:Milvus 分布式部署
六、与现有架构的对比 #
| 维度 | 纯传统对话系统 | 纯 LLM Agent | 混合架构(本文方案) |
|---|---|---|---|
| 意图识别准确率 | ~85%(受限于训练集) | ~95%(但可能幻觉) | ~97%(高置信走传统,低置信走 LLM) |
| 响应延迟(简单任务) | < 50ms | ~2s | < 50ms(路由到传统系统) |
| 响应延迟(复杂任务) | 不支持 | ~5s | ~5s(LLM Agent 路径) |
| LLM 调用比例 | 0% | 100% | ~40%(60% 被传统系统拦截) |
| 成本 | 低 | 高 | 中等(路由节省 60% 成本) |
| 多语言支持 | 需逐语言训练 | 原生支持 | 混合(传统系统多语言模板 + LLM 原生) |
| 可扩展性 | 差(每新增意图需训练) | 好(Prompt 驱动) | 好(传统系统覆盖确定性意图,LLM 处理长尾) |
七、落地路线 #
| 阶段 | 时间 | 关键交付 |
|---|---|---|
| Phase 1 | M1 | NLU Engine v1(意图分类 + 实体抽取)+ Router v1 |
| Phase 2 | M2 | 传统对话系统迁移(确定性意图从 LLM 路由到规则引擎) |
| Phase 3 | M3 | Memory 系统(短期 + 长期)+ RAG Engine v1 |
| Phase 4 | M4-M5 | LLM Agent Planner + 工具系统 + MCP 接入 |
| Phase 5 | M6 | 性能优化(缓存、端侧推理、模型分级) |
| Phase 6 | M7-M9 | 全球化部署 + 多语言全面覆盖 |
| Phase 7 | M10-M12 | 自适应路由(基于反馈的自动路由优化) |
八、总结 #
混合架构的核心价值在于让每个请求走最合适的路径:
| 路径 | 占比(预估) | 特点 |
|---|---|---|
| 传统系统 | ~40% | 快(< 50ms)、准(规则驱动)、省(无 LLM 成本) |
| LLM + 工具 | ~20% | 需要外部操作的场景(查天气、发消息、控制设备) |
| LLM + RAG | ~15% | 需要外部知识的场景(设备手册、FAQ、本地知识) |
| LLM Agent | ~10% | 复杂多步推理(旅行规划、课业辅导) |
| 自由对话 | ~15% | 闲聊、创意生成、开放问答 |
这套架构既保留了传统对话系统的确定性、低延迟、低成本,又获得了 LLM 的泛化能力、推理能力、创造力。对于传音 Ella 这样日处理亿级请求的硬件助手,混合架构不是选择,而是必然。