资讯动态

DeerFlow 如何在会话中使用 /compact 手动压缩上下文

发布时间:2026/9/9 22:42:22 来源:尧图企业网站定制
DeerFlow 如何在会话中使用 /compact 手动压缩上下文【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow当 DeerFlow 会话进行到较长轮次时消息历史的 token 占用会不断逼近模型的上下文上限。DeerFlow 的 Web UI 输入框内置了/compact命令可以在不结束会话的情况下手动压缩当前线程thread的早期上下文压缩后完整聊天记录在界面上仍然可见但后续的模型调用改用「压缩摘要 最近消息」继续推理。命令执行的前提是服务端已启用 summarizationsummarization.enabled: true关闭时手动压缩会被拒绝。前置条件在 config.yaml 中启用 summarizationDeerFlow 的自动摘要与手动/compact共用同一个开关。手动压缩底层复用 SummarizationMiddleware 的配置context_compaction.py 中当 summarization 未启用时会抛出ContextCompactionDisabled网关对应当前的 HTTP 409 错误Context compaction is disabled.。在config.yaml的summarization键下至少把enabled置为true该键默认值为falsesummarization: enabled: true model_name: null # null 用 run 自己的模型做摘要也可指定一个轻量模型 # 触发条件OR 逻辑任一满足即触发自动摘要 trigger: - type: tokens value: 4000 # 上下文保留策略 keep: type: messages value: 20各选项的含义与可选类型tokens/messages/fraction详见 backend/docs/summarization.md。/compact本身由手动触发不受trigger阈值限制keep决定压缩后保留多少近期消息。另一个可选的观察手段当所选模型配置了正的context_window时聊天头部会显示一个上下文窗口刻度条用来估算最新 checkpoint 的消息 token 占用便于判断是否到了该执行压缩的时机见 README.md 的 Manual Context Compaction 一节。在 Web UI 中执行 /compact在 Web UI 的 composer输入框中直接输入/compact并发送即可输入/context compact同样会被识别为压缩命令。它是一条内置 composer 命令不是 skill 激活也不会作为普通聊天内容提交给 agent见 frontend/src/AGENTS.md。执行时的行为要点前端调用POST /api/threads/{thread_id}/compact并自动携带当前 composer 选择的model_name与agent_name见 frontend/src/core/threads/api.ts 与 frontend/src/components/workspace/input-box.tsx。摘要所用模型按以下优先级解析请求体中的model_name即输入框当前选中的模型→ 该线程 custom agent 配置的模型 → 默认模型。若线程还没有历史消息例如欢迎页状态命令直接被跳过并提示。当该线程有 run 正在执行时包括被另一个 Gateway worker 持有的 run压缩会被阻塞等待 run 结束后再试。如果想绕开 Web UI 直接调用网关接口请求体字段与默认值如下thread_id为当前线程 ID{ force: true, keep: null, agent_name: null, model_name: null }force默认true即使未达到自动摘要阈值也执行压缩keep仅对本次压缩生效的保留策略结构同配置中的ContextSize例如{type: messages, value: 20}model_name/agent_name按上文优先级解析摘要模型。路由实现与权限threads:write且要求 owner 校验、线程必须已存在见 backend/app/gateway/routers/threads.py。结果验证执行后通过界面 toast 与接口响应两个层面确认结果1. 界面提示Web UI 中文文案见 frontend/src/core/i18n/locales/zh-CN.ts压缩成功「已压缩早期上下文。完整聊天记录仍保留后续模型将基于摘要和最近消息继续。」无需压缩「当前上下文还不需要压缩。」上下文不足以压缩时返回失败「上下文压缩失败。」2. 接口响应字段ThreadCompactResponse字段含义compacted是否真正执行了压缩false时表示无可压缩内容reason未压缩时的原因如not_enough_messagesremoved_message_count/preserved_message_count被摘要移除的消息数与保留的消息数summary_updated摘要文本是否已更新checkpoint_id压缩写入后生成的新 checkpoint IDtotal_tokens压缩后的 token 总量判断路径很直接compacted: true且拿到新的checkpoint_id即代表压缩写入成功界面聊天记录不会消失消失的只是被摘要覆盖的早期消息在模型请求中的原始形态——摘要存放在ThreadState.summary_text中由 DurableContextMiddleware 以隐藏的 durable context 数据重新注入后续模型调用见 backend/docs/summarization.md 的 State Management 一节。错误与边界409Thread has a run in flight. Compact after the run finishes.线程有 run 正在执行。多 worker 部署下若压缩的写 checkpoint 预占丢失租约DeerFlow 会在替换的 run 继续前取消 checkpoint writer并在清理后返回可重试的冲突稍后重试即可。409Context compaction is disabled.summarization.enabled未开启回到上一节的配置检查。500Failed to compact thread context.可压缩但摘要生成失败模型调用异常或摘要响应为纯空白内容——后者会被当作生成失败处理永远不会被提交为“合法的空摘要”。404线程不存在。压缩只写基础 schema 通道messagessummary_text其余通道通过 checkpoint fork 继承不会丢失线程上的其他状态。参考backend/docs/summarization.mdsummarization 完整配置项与工作机制backend/packages/harness/deerflow/runtime/context_compaction.py手动压缩的核心逻辑backend/app/gateway/routers/threads.py/compact网关路由与错误映射frontend/src/components/workspace/input-box.tsxWeb UI 端/compact命令处理【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价