第四章 习题参考答案 By 安妮的心动录 #511
Unanswered
anneheartrecord
asked this question in
💬 Exercises & Q&A
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
第四章 习题参考答案
1. 本章介绍了三种经典的智能体范式:
ReAct、Plan-and-Solve和Reflection。请分析:核心差异
智能家居控制助手应选哪种
我会以
ReAct作为基础架构。原因:
能否组合使用
可以,而且在生产系统里通常应该组合。
推荐的混合架构是:
Plan-and-Solve生成高层计划。ReAct执行并根据工具返回动态调整。Reflection做质量检查或风险审查。适用场景:电商退款、商务出行、企业报表生成、复杂客服流程等,既需要全局规划,也需要执行中观察,还需要输出质量控制。
2. 在4.2节的
ReAct实现中,我们使用了正则表达式来解析大语言模型的输出(如Thought和Action)。请思考:正则方案的脆弱点
正则解析在格式完全稳定时有效,但一旦 LLM 的输出格式稍微变化就容易失效,常见问题包括:
这类失败本质上不是推理失败,而是读取的协议格式设计太脆弱。
更鲁棒的替代方案
推荐顺序如下:
Function Calling / Tool Calling:最佳方案,直接让模型返回 JSON 格式的结构化 Tool 调用。JSON Mode:强制输出 JSON,再由程序解析。JSON + 容错重试:解析失败时提取代码块 JSON、对象片段,必要时要求模型重试。Function Calling 方案代码实现
以下代码展示如何将原本基于正则解析的 ReAct 改造为使用 Function Calling 的版本:
两种方案对比
结论:教学代码里可以用正则帮助理解机制,但生产环境的系统应优先使用结构化协议,而不是依赖脆弱文本约定。
3. 工具调用是现代智能体的核心能力之一。基于4.2.2节的
ToolExecutor设计,请完成以下扩展实践:ReAct智能体添加一个"计算器"工具,使其能够处理复杂的数学计算问题(如"计算(123 + 456) × 789/ 12 = ?的结果")计算器工具实现
核心原则是:不要使用
eval(),而应使用 AST 白名单解析。实现思路:
×转*,÷转/。ast.parse(..., mode="eval")解析表达式树。这样做的本质是对 LLM 的权限做约束,从执行任意代码收缩成只执行数学语法子集。
工具选择失败的处理机制
建议设计三层机制:
关键不是"无限重试",而是把失败显式反馈回下一轮上下文,让模型有机会自我修正。
当工具扩展到 50-100 个时如何优化
当前把所有工具描述都塞进 Prompt 的方法不可持续,主要问题是:
工程上的优化路径:
结论:工具规模一大,问题就从 提示词设计 升级为 工具的检索和路由系统设计。
4.
Plan-and-Solve范式将任务分解为"规划"和"执行"两个阶段。请深入分析:Plan-and-Solve与ReAct:在处理"预订一次从北京到上海的商务旅行(包括机票、酒店、租车)"这样的任务时,哪种范式更合适?为什么?动态重规划机制怎么设计
静态计划在真实环境里一定会遇到失败,因此需要分级重规划:
关键设计原则:
商务旅行任务:Plan-and-Solve 还是 ReAct
对于"北京到上海商务旅行(机票、酒店、租车)",更适合
Plan-and-Solve + 动态重规划。原因:
纯 ReAct 的问题是容易局部最优,例如先订到最便宜的航班,结果破坏了后续酒店和会议安排。
分层规划系统的优势
推荐使用高层计划 + 子计划的分层规划结构。
优势包括:
本质上,分层规划把一个超长任务拆成战略层和战术层,更符合人类和系统的共同认知方式。
5.
Reflection机制通过"执行-反思-优化"循环来提升输出质量。请思考:Reflection机制的终止条件是"反馈中包含无需改进"或"达到最大迭代次数"。这种设计是否合理?能否设计一个更智能的终止条件?不同阶段使用两个模型会带来什么影响
推荐模式是:
优点:
风险:
工程上要约束反思模型输出具体、可执行的修改建议,而不是只给抽象批评。
更智能的终止条件
仅靠"无需改进"字符串或固定最大轮数不够健壮和友好。更好的方案有三类:
结论:Reflection 的终止条件应从硬编码文本判断升级为 显式质量控制。
学术论文写作助手的多维 Reflection 机制
可从四个维度反思:
可以让不同反思器分别给分,然后只针对最低分维度做下一轮优化。
6. 提示词工程是影响智能体最终效果的关键技术。本章展示了多个精心设计的提示词模板。请分析:
ReAct提示词和4.3.2节的Plan-and-Solve提示词,它们显然存在结构设计上的明显不同,这些差异是如何服务于各自范式的核心逻辑的?Reflection提示词中,我们使用了"你是一位极其严格的代码评审专家"这样的角色设定。尝试修改这个角色设定(如改为"你是一位注重代码可读性的开源项目维护者"),观察输出结果的变化,并总结角色设定对智能体行为的影响。few-shot示例往往能显著提升模型对特定格式的遵循能力。请为本章的某个智能体尝试添加few-shot示例,并对比其效果。ReAct Prompt 与 Plan-and-Solve Prompt 的结构差异
ReActPrompt 更强调循环协议,告诉模型如何在Thought -> Action -> Observation中逐步推进。Plan-and-SolvePrompt 更强调先给出完整计划,再严格执行,不鼓励执行中随意跳步。这些差异并不是写法风格不同,而是在服务各自的范式逻辑。
角色设定为什么会影响 Reflection 行为
如果把角色设定从"极其严格的代码评审专家"改成"重视可读性的开源维护者",模型的反馈重点通常会从:
转向:
说明角色设定实际上是在调整"评价函数"的隐式权重。
Few-shot 示例的作用
在固定输出格式和高一致性要求场景下,few-shot 往往很有价值。
例如给 ReAct 加入一个样例:
这样可以显著降低模型格式漂移,提高工具调用解析成功率。
7. 某电商初创公司现在希望使用"客服智能体"来代替真人客服实现降本增效,它需要具备以下功能:
a. 理解用户的退款申请理由
b. 查询用户的订单信息和物流状态
c. 根据公司政策智能地判断是否应该批准退款
d. 生成一封得体的回复邮件并发送至用户邮箱
e. 如果判断决策存在一定争议(自我置信度低于阈值),能够进行自我反思并给出更审慎的建议
此时作为该产品的负责人:
选择哪种范式
我会选择
Plan-and-Solve + ReAct + Reflection的组合:Plan-and-Solve负责高层流程,例如理解退款诉求、查询订单、核验物流、根据政策判断、生成回复。ReAct负责执行阶段调用订单、物流、邮件等工具。Reflection负责在低置信度或高争议案件上做二次审查。至少三个工具设计
可用工具包括:
order_lookup:查询订单状态、商品信息、支付金额。logistics_query:查询物流轨迹和签收状态。policy_checker:根据退款政策给出规则判断。send_email:生成并发送回复邮件。提示词如何兼顾公司利益和用户体验
提示词中需要同时写明:
上线后的主要风险与技术缓解手段
主要风险包括:
缓解方式:
Beta Was this translation helpful? Give feedback.
All reactions