Lesson 05 练习
改
code.py里的代码,运行python lessons/05_prompt/code.py观察变化。 本课会真实调用 GLM,每次跑会消耗少量 token。
练习 1:测试"模糊问题"的防幻觉效果
把 section_anti_hallucination 里的问题换成模棱两可的:
out_of_scope = "公司加班多不多?工作氛围怎么样?"
(材料里只有加班工资倍数,没有"加班多不多""氛围"这种主观评价)
分别看无约束 prompt 和防幻觉 prompt 的回答差异。
思考:模型在面对"材料里部分相关、但无法直接回答"的问题时,防幻觉指令能让它怎么应对?
练习 2:自己写一个 prompt 模板
参考 build_safe_prompt,自己写一个 build_custom_prompt 函数,加入这些约束:
- 要求答案不超过 100 字
- 要求用"第一、第二、第三"分点陈述
- 要求如果材料不足,建议用户补充什么信息
用它回答 "年假怎么休?",看模型是否遵守了你的所有约束。
思考:约束太多会不会让模型"无所适从"?试着找一个平衡点——约束要具体但不矛盾。
练习 3:观察"材料冲突"的处理
在 KNOWLEDGE 里故意加两条互相冲突的信息:
"年假最多 5 天,无论工龄多久。",
"年假制度:入职满 1 年有 5 天,满 3 年有 10 天,满 5 年有 15 天。",
然后用防幻觉 prompt(含"如果冲突请指出"的约束)问 "年假有几天?"。
观察:模型有没有指出两条材料冲突?还是只采信了其中一条?
思考:RAG 系统在现实中会遇到文档版本不一致、新旧制度并存的情况,prompt 怎么设计能让模型帮你发现这些矛盾?
练习 4:体验流式的体感差异
把 section_streaming 里的 chat_stream 换成普通 chat(非流式),对比一下:
# 流式(原版)
for piece in chat_stream(client, prompt):
print(piece, end="", flush=True)
# 非流式(改这样)
answer = chat(client, prompt)
print(answer)
思考:虽然总耗时差不多,但流式让"第一个字出现的时间"大幅提前。这就是为什么 ChatGPT、Kimi 等产品都用流式——用户感知的速度 ≠ 实际速度。
✅ 完成本课后,你应该能回答
- RAG prompt 的标准三部分结构是什么?
- 防幻觉最核心的一条指令是什么?为什么"我不知道"比错误答案有价值?
- 引用溯源有什么好处?怎么用 prompt 实现?
- 流式输出解决的是什么问题?(提示:和实际速度无关,和感知有关)
- 当材料不足或冲突时,好的 prompt 怎么引导模型应对?