习题

配套代码:code/chapter9

提示:部分习题没有标准答案,重点在于培养学习者对上下文工程和长时程任务管理的综合理解和实践能力。

  1. 本章介绍了上下文工程与提示工程的区别。请分析:

    • 在9.1节中提到"上下文必须被视作一种有限资源,且具有边际收益递减"。请解释什么是"上下文腐蚀"(context rot)现象?为什么即使模型支持100K甚至200K的上下文窗口,我们仍然需要谨慎管理上下文?
    • 假设你要构建一个"代码审查助手",需要分析一个包含50个文件的代码库。请对比两种策略:(1)一次性将所有文件内容加载到上下文中;(2)使用JIT(Just-in-time)上下文,通过工具按需检索文件。分析各自的优缺点和适用场景。
    • 在9.2.1节中提到系统提示的两个极端误区:"过度硬编码"和"过于空泛"。请各举一个实际例子,并说明如何找到合适的平衡点。
  2. GSSC(Gather-Select-Structure-Compress)流水线是本章的核心技术。请深入思考:

    提示:这是一道动手实践题,建议实际操作

    • 在9.3节的ContextBuilder实现中,四个阶段各有不同的职责。请分析:如果某个阶段失效(如Select阶段选择了不相关的信息,或Compress阶段过度压缩导致信息丢失),会对最终的智能体表现产生什么影响?
    • 请基于9.3.4节的代码,为ContextBuilder添加一个"上下文质量评估"功能:在每次构建上下文后,自动评估上下文的信息密度、相关性和完整性,并给出优化建议。
    • GSSC流水线中的"压缩"阶段使用了LLM进行智能摘要。请思考:在什么情况下,简单的截断(truncation)或滑动窗口(sliding window)策略可能比LLM摘要更合适?设计一个混合压缩策略,结合多种压缩方法的优势。
  3. NoteTool和TerminalTool是支持长时程任务的关键工具。基于9.4节和9.5节的内容,请完成以下扩展实践:

    提示:这是一道动手实践题,建议实际操作

    • NoteTool使用了分层笔记系统(项目笔记、任务笔记、临时笔记)。请设计一个"笔记自动整理"机制:当临时笔记积累到一定数量时,智能体能够自动分析这些笔记,将重要信息提升为任务笔记或项目笔记,并清理冗余内容。
    • TerminalTool提供了文件系统操作能力,但在9.5.2节中强调了安全性设计。请分析:当前的安全机制(路径验证、命令白名单、权限检查)是否足够?如果智能体需要访问敏感文件或执行危险操作,应该如何设计一个"人机协作审批"流程?
    • 结合NoteTool和TerminalTool,设计一个"智能代码重构助手":能够分析代码库结构、记录重构计划、逐步执行重构操作,并在笔记中追踪进度和遇到的问题。请画出完整的工作流程图。
  4. 在9.6节的"长时程任务管理"案例中,我们看到了上下文工程在实际应用中的价值。请深入分析:

    • 案例中使用了"分层上下文管理"策略:即时访问(TerminalTool)+ 会话记忆(MemoryTool)+ 持久笔记(NoteTool)。请分析:这三层之间应该如何协调?什么信息应该放在哪一层?如何避免信息冗余和不一致?
    • 假设任务执行过程中发生了中断(如系统崩溃、网络断开),智能体需要从笔记中恢复状态并继续执行。请设计一个"断点续传"机制:如何在笔记中记录足够的状态信息?如何验证恢复后的状态是否正确?
    • 长时程任务往往涉及多个子任务的并行或串行执行。请设计一个"任务依赖管理"系统:能够表达任务之间的依赖关系(如"任务B必须在任务A完成后执行"),并自动调度任务执行顺序。这个系统应该如何与NoteTool集成?
  5. 本章多次提到"渐进式披露"(progressive disclosure)的概念。请思考:

    • 在9.2.2节中,渐进式披露被描述为"每一步交互都会产生新的上下文,反过来指导下一步决策"。请设计一个具体的应用场景(如学术论文写作、复杂问题调试),展示渐进式披露如何帮助智能体更高效地完成任务。
    • 渐进式披露的一个潜在风险是"探索效率低下":智能体可能会在不重要的细节上浪费时间,或者错过关键信息。请设计一个"探索引导"机制:通过启发式规则或元认知策略,帮助智能体更聪明地决定"下一步应该探索什么"。
    • 对比"渐进式披露"与传统的"一次性加载所有上下文":在什么类型的任务中,前者有明显优势?在什么类型的任务中,后者可能更合适?请给出至少3个不同类型的任务示例。