实战:解析本站 AI 助手的编排架构
用本站的 AI 学习助手做活教材:拆解"意图识别 → 工具/知识检索 → 生成回答"流水线的设计与取舍。
先体验,再拆解
打开「AI 助手」,分别输入:"我的学习进度怎么样"、"学习 RAG"、"什么是 LCEL",观察回答上方的步骤轨迹 —— 这就是一条真实的编排流水线在执行。
架构图
用户消息
│
├─ ① 意图识别(规则引擎,毫秒级)
│ ├─ 查进度 ──→ ② 工具:progressService.stats() 查 SQLite
│ ├─ 推荐课程 → ② 工具:lessonService.searchByTitle() 标题检索
│ ├─ 学课程 → ② 工具:匹配课程返回入口(未命中→降级到问答链)
│ └─ 概念问答 → ② 知识检索:关键词 RAG 命中相关教程
│ │
│ ▼
└─ ③ 生成回答:本地直答 或 LLM 流式生成
(每步的名称、详情、耗时以 SSE 事件实时推送到前端)
三个值得学习的设计取舍
- 规则优先于模型:查进度、推课程是结构化意图,查数据库比让 LLM 生成更准、更快、零成本。LLM 只在真正的开放性问答上场;
- 标题检索优先于全文检索:推荐课程时先匹配标题/摘要,避免"RAG"这个词碰巧出现在无关课文正文里造成误推荐 —— 检索层级决定结果质量;
- 每一步都可观察:意图、工具调用、命中了哪些教程、耗时多少,全部作为 SSE 事件展示。可观察性不是可选项,是多智能体系统的生命线。
动手改造建议
- 加一个"生成练习题"意图:识别"出几道题",用 LLM 基于当前课程生成练习;
- 把规则意图替换为 LLM 结构化分类(with_structured_output),对比两者的误判率与延迟;
- 给编排链加一个"审核节点":回答生成后自检是否引用了真实课程链接。
📝 课后练习
quiz-1 推荐课程时优先用标题/摘要检索而非全文检索的原因是?