datawhale_aagentbook_T0_打卡
Task 0 打卡(Chapter 1 · 环境准备与实验 1-1)
完成时间 2026-09-13。
环境准备
照仓库 README 的流程走的。机器是 Windows,Python 3.13.14,用 uv 0.9.18 装依赖,仓库自带 uv.lock,版本可复现。
仓库用 sparse-checkout 检出,只留实验要用的部分(chapter1~10、agentbook 共享包、docs 和根配置),书稿看中文版 book/ 和官方 PDF。中间踩了个坑,浅克隆中断过一次,工作树缺了一万多个文件,后来用 git fetch --refetch 全量补齐 blob 再 checkout 修好的。
依赖安装 uv sync --locked --extra ch1,一次通过。之后配了根目录 .env 和 chapter1/context/.env,填了 DeepSeek 的 Key(主力)和 OpenRouter 的 Key(兜底),先用 --help 验证入口能跑。
实验过程
实验 1-1(chapter1/context),模型 deepseek-v4-flash。任务是把 1000 美元换算成欧元、英镑、日元再求平均。这个任务必须调汇率和计算工具,正好能看出上下文缺一块之后 Agent 会变成什么样。
# 第一轮,single 模式验证链路
uv run python chapter1/context/main.py --mode single --provider deepseek --context-mode full --task "Convert $1000 USD to EUR, GBP, and JPY. Calculate the average." --output runs/task0_first_run.json
# 第二轮,main.py 五组消融先看个大概
uv run python chapter1/context/main.py --mode ablation --provider deepseek --cases 1 --output runs/task0_ablation.json
# 第三轮,官方验收脚本,按书中实验 1-1 的原始设定重跑
uv run python chapter1/context/run_experiment_1_1.py --provider deepseek
验收脚本和演示版的区别在于每次 API 请求和响应都会原文落盘(脱敏),任务固定用 guarded 版(提示词里有一句「不要自行估算汇率」),隐藏工具结果的方式是直接置空,不告诉模型结果被动过。
结果
完整上下文那组答案是对的,€920.00、£790.00、¥149,500.00,还主动说明混合货币求平均没有实际意义。
验收级运行的五组对照。
| 上下文模式 | 结果 | 我观察到的现象 |
|---|---|---|
| full | correct | 正常完成 |
| no_history | no_terminal_response | 跑满迭代上限,一直重复换算 |
| no_reasoning | correct | 和基线差不多,没看出退化 |
| no_tool_calls | no_unsupported_numbers | 没工具定义,发不出工具调用 |
| no_tool_results | no_terminal_response | 触顶,但没有编数字 |
四个验收项全过(five_arms 齐全、context_contracts 全过、真实 API 留证、运行被接受),证据已写入 chapter1/context/validation/latest.json(created_at 2026-09-13,SHA-256 85f476ff 开头),完整请求响应在 real_20260913T130017Z 目录。
几个值得记的点。
- no_history 那组最直观。Agent 忘了之前换算过什么,就反复调工具,10 轮迭代 43 次工具调用(基线是 3 轮 6 次),最后也没给出答案。
- 最危险的是 no_tool_results。演示模式跑的时候这组给出了没有观测依据的数字(汇总表标了 UNSUPPORTED),验收脚本这次跑触顶了。两种跑法放一起看,隐藏观测之后模型真的可能自己补数字,而且补的时候语气跟正常作答没区别。
- no_reasoning 没退化,这点和仓库台账对得上。台账里记录这个行为断言本来就因为多次复现失败从正文里删掉了。细想也合理,这组去掉的只是历史里的推理内容,模型每轮还是重新推理,每一步该做什么已经被上一步的观测定死了。
- 缓存收益很明显。验收级这轮一共 22,847 tokens,14,592 个命中前缀缓存,大约 64%。多轮工具调用的场景里这个比例不小。
其他实验为什么没做
第一章还有 1-2(联网搜索)、1-3(搜索加代码执行)、1-4(文生图对照)和 learning-from-experience。1-2 必须用 Moonshot Kimi 的托管搜索,1-3 要 Responses API 的托管 web_search 和沙箱,1-4 要文生图 API。我手头只有 DeepSeek 和 OpenRouter 的 Key,这几个暂时做不了,不是环境问题,后面拿到对应 Key 再补。
心得
跑之前我以为消融就是走个流程,跑完发现差异比想象的大,尤其是隐藏工具结果那组,模型补数字的时候完全不犹豫。上下文里每个组件都有它存在的理由,这算是给 ch2 的上下文工程提前建立了一个直观的抓手。

浙公网安备 33010602011771号