💬 对话机器人
提示词设计 · 引用溯源 · 防幻觉 · 多轮对话 · 评估优化
1. 知识库机器人的 System Prompt 怎么写?
System Prompt = 机器人的"人设 + 规则",决定回答风格与边界。核心要素:
- 角色设定:你是 XX 学校的 AI 助理,只回答学校相关问题
- 事实来源规则:只能依据提供的资料回答,资料没有就说不知道
- 回答格式:分点、引用来源编号(【1】【2】)、简洁
- 拒答规则:无关问题(天气/政治/代码)礼貌引导回学校话题
- 敏感内容:不做评价、涉及个人隐私引导线下咨询
学校机器人 System Prompt 模板
你是「XX大学 AI 助手」,服务对象是考生、家长和在校师生。
【回答规则】
1. 只依据下方【参考资料】回答,严禁使用资料外的知识;
2. 资料中没有答案时,回答:"这个问题我暂时无法回答,
建议咨询招生办电话 010-xxxx 或访问官网 www.xx.edu.cn";
3. 回答需标注引用来源编号,如(来源 1);
4. 用简体中文,语气亲切专业,分点回答;
5. 与学校无关的问题(天气、娱乐等),礼貌说明只回答学校相关问题。
【参考资料】
1. 校史:……(检索到的片段)
2. 师资:……
3. 招生政策:……
【用户问题】
……
🎯 面试要点
- 提示词三件套:角色 + 边界规则(只依据资料)+ 输出格式
- "资料没有就说不知道"是防幻觉的第一道闸
2. 怎么实现回答带引用(来源)?
做法:检索时把每个片段的元数据(来源/章节)作为编号带给 LLM:
引用实现思路
# 检索返回 Top3 片段,编号
context = []
for i, hit in enumerate(hits):
context.append(f"【{i+1}】来源《{hit.metadata['title']}》第{hit.metadata['section']}章:{hit.content}")
# prompt 里要求:回答末尾列出引用编号
"回答末尾用「来源」标注:如(来源 2)"
# 前端渲染:把 (来源 2) 渲染成可点击卡片,展示原文片段
# 落库:记录 问题/回答/引用片段 id,用于审计和评估
🎯 面试要点
- 引用三价值:用户可信度、管理员可审计、方便评估(答案对不对看引用)
- 进阶:引用一致性校验——判断"回答内容是否真的来自引用片段"(忠实度指标,见下)
3. 如何系统性地防幻觉?
- 源头:资料质量——文档干净、版本正确、覆盖全面(知识库页已讲)
- 检索:找得准——混合检索 + Rerank,宁可少给不可给错(垃圾片段 = 幻觉素材)
- 生成:边界约束——prompt 强制"只依据资料、不知道就说不知道";低温度参数(temperature 0~0.3)
- 兜底:检索置信度门控——相似度低于阈值时,不回答直接转人工/给 FAQ 链接(别硬答)
- 事后:引用一致性校验——模型判断回答要点是否都能在引用中找到(忠实度检查)
🎯 面试要点
- 防幻觉是"管道工程":数据 → 检索 → 生成 → 门控,每层一道防线
- 门控(拒绝回答)比硬答好:宁可不答,不可编造
4. 多轮对话怎么处理?(上下文与追问)
- 问题重写(Query Rewriting):用户追问"那学费呢?"——需要结合上一轮意图改写成完整问题"2026 年研究生学费是多少?"再检索
- 历史上下文拼接:把最近几轮对话摘要/原文放进 prompt(注意长度控制,超长截断)
- 会话隔离:每个用户一个 session,知识库机器人别串上下文
- 追问引导:回答完给"可能感兴趣的追问"(基于知识库的推荐问题)
追问重写(简化)
# 历史:[问] 学校有哪些王牌专业? [答] 计算机、临床医学...
# 当前问题:"录取分数线高吗?"
# 重写模型:结合历史 → 完整问题
"计算机专业2026年的录取分数线高吗?" # 用这个去检索
🎯 面试要点
- 多轮的关键:先重写问题再检索,直接用"那学费呢"去检索必然失败
- 历史管理:滑动窗口 + 长度预算(如最近 5 轮 / 2000 字符)
5. 怎么评估机器人效果?怎么持续优化?
评估三指标(RAGAS 框架):
- 忠实度(Faithfulness):回答是否忠于检索材料(防幻觉的度量)
- 答案相关性(Answer Relevance):回答是否答到点上
- 检索相关度(Context Relevance):检索到的片段是否相关(检索质量)
优化循环:
- 收集失败案例(用户反馈"答得不对" + 人工抽查)
- 归类定位:检索没找到?(调分块/检索/元数据过滤)还是生成了没依据的内容?(调 prompt/门控)
- 补数据:把失败问题对应的正确资料补进知识库(新 FAQ 对最有效)
- 回归测试:固定评测集(50~100 个典型问题),每次改动跑一遍对比分数
🎯 面试要点
- 评测集 + 三指标 + 失败归因 = 完整的质量闭环,面试答出这套就专业
- 80% 的失败是检索问题而非模型问题——先查检索再怪 LLM