Agent Engineering 课程阅读

在 GitHub 查看原文

本页目录

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 等产品都用流式——用户感知的速度 ≠ 实际速度


✅ 完成本课后,你应该能回答

  1. RAG prompt 的标准三部分结构是什么?
  2. 防幻觉最核心的一条指令是什么?为什么"我不知道"比错误答案有价值?
  3. 引用溯源有什么好处?怎么用 prompt 实现?
  4. 流式输出解决的是什么问题?(提示:和实际速度无关,和感知有关)
  5. 当材料不足或冲突时,好的 prompt 怎么引导模型应对?