DeerFlow 2.0 · 从入门到精通 目录

§16 上下文工程

代理跑久了,上下文会爆。DeerFlow 在「上下文工程」上做了三件事:自动压缩、手动压缩、事件历史兜底。

自动压缩:SummarizationMiddleware

LangGraph 的 SummarizationMiddleware 会在消息超长时,把旧消息原地替换成一段摘要(前缀 Here is a summary of the conversation to date:)。这是 token 预算的刚需。

代价前面说过:checkpointer 里的原话没了。所以 DeerFlow 用 event store 兜底(§08)——原始消息在 event store 里一动没动,/history 改读 event store,前端还能插压缩标记卡片(§14)。

手动压缩:Manual Context Compaction

除了自动,你也能主动触发压缩,在长任务中段把上下文「瘦身」一次,控制成本和时延。

Session Goals

给会话设目标,本质是给代理一个「这次要收敛到哪」的锚。目标明确,代理少跑弯路,上下文少走偏。

一个真实踩坑的启示

DeerFlow 自己修过一个有意思的 bug:summarize 之后,前端 feedback(点赞)的 run_id 映射会错位——因为 /history(checkpoint)和 /messages(event store)两条数据链的 AI 消息数量不一致。修法是让 /history 也读 event store,两边对齐,顺手把点赞打错 run 的隐藏 bug 也修了。

标叔的结论:上下文工程的本质是「在「记得住」和「装得下」之间找平衡。DeerFlow 的答案是——自动压缩管当下,event store 管真相,手动压缩管成本。三层一起用,长任务才稳。

东西写完了,得上线、要能看。下一章讲可观测与部署。