Agent 实现方法论
From Scratch
学习地图
练习
术语表
← 返回首页
本章教程
本章练习
第 09 章测验
第 09 章测验
对应章节:上下文工程
共 8 题,答对率 ≥ 80% 即通过。请完成全部题目后点击「提交」。
Q1
关于本章的 token 启发式估算,下列说法正确的是?
中文每字约计 1.5 token,英文约每 4 个字符 1 token,结果向上取整
中文按 1 个字符 4 token 计算,英文按 1 个字符 1 token 计算
估算必须调用 tiktoken 之类的精确 tokenizer,否则毫无意义
估算值应该与 API 的 usage 完全一致,不一致就是实现错误
Q2
把上下文窗口 8192 拆成预算模型(WINDOW - MAX_OUTPUT - BUFFER),保险丝 BUFFER 的作用是?
预留给模型回复输出与 JSON 包装、工具 schema 等固定开销,避免历史输入恰好顶满窗口导致请求失败
让模型有更多空间发挥创造性,回复更长
用来存放用户的敏感信息,防止泄露给模型
没有任何作用,只是代码风格的约定
Q3
滑动窗口 trimHistory 为什么必须保护 tool_calls 与 tool 结果的配对?
因为工具结果如果不配对,token 估算会不准确
因为 API 要求二者成对出现:模型看到工具调用指令却找不到结果,请求会被拒绝
因为配对的消息不能参与 token 计数,配对后更省钱
因为 tool 结果必须永远保留,其他消息都可以裁
Q4
关于滑动窗口与摘要压缩的对比,正确的是?
滑动窗口 0 次 API 调用但旧信息直接消失;摘要压缩 1 次 API 调用但有损、且信息随轮次累积衰减
摘要压缩比滑动窗口更便宜,因为它不需要调用模型
滑动窗口适合保存旧历史的要点,摘要压缩适合彻底扔掉旧消息
两者二选一,生产系统只允许使用其中一种
Q5
摘要压缩的工程决策中,为什么「用辅助模型而不用主模型」?
因为主模型不支持摘要任务,只有辅助模型能做
压缩是系统操作,不该花贵模型的预算做「整理桌面」的脏活,便宜的辅助模型就够了
因为辅助模型的上下文窗口更大,能装下更多历史
因为辅助模型输出的摘要格式固定,主模型输出不稳定
Q6
为什么工具结果截断时要带截断标记(如 …)而不是静默丢弃多余部分?
因为不带标记的字符串无法被 JSON 序列化
让模型知道这段结果被截断了,需要时可以重新读完整内容
因为省略号可以让 token 估算更准确
截断标记是浏览器渲染需要,与模型无关
Q7
关于 system prompt 分层与 prompt cache,正确的理解是?
分层后每轮重新拼装,反正内容相同,缓存一定命中
组装一次、整段会话复用,保持稳定前缀才能命中服务端 prompt cache,一个字节变化缓存即失效
system prompt 应该放进 messages 数组,这样能参与上下文压缩
时间戳信息放进 system prompt 没问题,因为它每轮都变才有意义
Q8
上下文管理流水线的原则是「便宜的先跑贵的后跑」,下列顺序正确的是?
摘要压缩 → 滑动窗口 → 工具结果截断
滑动窗口 → 摘要压缩 → 工具结果截断
工具结果截断 → 滑动窗口 → 阈值摘要 → reactive 应急
先摘要再截断,摘要能省更多 token
提交