1. 知识库机器人的 System Prompt 怎么写?

System Prompt = 机器人的"人设 + 规则",决定回答风格与边界。核心要素:

  1. 角色设定:你是 XX 学校的 AI 助理,只回答学校相关问题
  2. 事实来源规则:只能依据提供的资料回答,资料没有就说不知道
  3. 回答格式:分点、引用来源编号(【1】【2】)、简洁
  4. 拒答规则:无关问题(天气/政治/代码)礼貌引导回学校话题
  5. 敏感内容:不做评价、涉及个人隐私引导线下咨询
学校机器人 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. 如何系统性地防幻觉?

  1. 源头:资料质量——文档干净、版本正确、覆盖全面(知识库页已讲)
  2. 检索:找得准——混合检索 + Rerank,宁可少给不可给错(垃圾片段 = 幻觉素材)
  3. 生成:边界约束——prompt 强制"只依据资料、不知道就说不知道";低温度参数(temperature 0~0.3)
  4. 兜底:检索置信度门控——相似度低于阈值时,不回答直接转人工/给 FAQ 链接(别硬答)
  5. 事后:引用一致性校验——模型判断回答要点是否都能在引用中找到(忠实度检查)

🎯 面试要点

  • 防幻觉是"管道工程":数据 → 检索 → 生成 → 门控,每层一道防线
  • 门控(拒绝回答)比硬答好:宁可不答,不可编造

4. 多轮对话怎么处理?(上下文与追问)

追问重写(简化)
# 历史:[问] 学校有哪些王牌专业? [答] 计算机、临床医学...
# 当前问题:"录取分数线高吗?"

# 重写模型:结合历史 → 完整问题
"计算机专业2026年的录取分数线高吗?"  # 用这个去检索

🎯 面试要点

  • 多轮的关键:先重写问题再检索,直接用"那学费呢"去检索必然失败
  • 历史管理:滑动窗口 + 长度预算(如最近 5 轮 / 2000 字符)

5. 怎么评估机器人效果?怎么持续优化?

评估三指标(RAGAS 框架):

优化循环:

  1. 收集失败案例(用户反馈"答得不对" + 人工抽查)
  2. 归类定位:检索没找到?(调分块/检索/元数据过滤)还是生成了没依据的内容?(调 prompt/门控)
  3. 补数据:把失败问题对应的正确资料补进知识库(新 FAQ 对最有效)
  4. 回归测试:固定评测集(50~100 个典型问题),每次改动跑一遍对比分数

🎯 面试要点

  • 评测集 + 三指标 + 失败归因 = 完整的质量闭环,面试答出这套就专业
  • 80% 的失败是检索问题而非模型问题——先查检索再怪 LLM
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。