为什么长对话不会撑爆上下文窗口:Skill Compose上下文压缩与记忆刷写机制深度解析
【免费下载链接】archiveSkill Compose is an open-source agent builder and runtime platform for skill-powered agents. No workflow graphs. No CLI.项目地址https://gitcode.com/gh_mirrors/sk/archive点击查看免费下载Skill Compose 是一个开源的 Agent 构建与运行时平台它内置了上下文压缩Context Compression与记忆刷写Memory Flush两大机制当长对话的 Token 逼近模型的上下文窗口上限时自动把历史对话压缩成结构化摘要在压缩发生前的瞬间还会悄悄让 Agent 把重要信息写入长期记忆文件确保对话可以压缩记忆不会丢失。本文用尽量少的代码带你完整看懂这两套机制的设计细节。一、先搞懂问题长对话为什么会撑爆上下文窗口大语言模型LLM的上下文窗口是固定的比如 200K Token。Agent 每执行一步都要把系统提示词 全部历史消息 工具调用结果一起发给模型。一个长会话里Agent 会不断调用execute_code、read_file等工具每一次工具输入和输出都会累积到上下文里。对话越久单次请求的输入 Token 越大直到——超出模型的上下文上限报错、中断。如果粗暴地丢弃最早的消息Agent 就会忘记用户最初的需求、已经读过的文件和失败的尝试。Skill Compose 的答案是用 LLM 自己把旧历史读成一份摘要同时把值得长期记住的东西先刷写到磁盘。二、整体设计压缩与刷写如何分工 Skill Compose 的记忆系统分为两层详见官方文档 docs/docs/concepts/memory.md层级存放位置作用文件型记忆Bootstrap FilesSOUL.md/USER.md/MEMORY.md等 Markdown 文件每次会话开始时注入系统提示词提供常驻人设与事实数据库记忆条目PostgreSQL pgvector可被语义搜索的结构化记忆跨会话可查而上下文压缩与记忆刷写是保护这套记忆系统的两道闸门全部实现集中在 app/agent/agent.py输入 Token 达到模型上下文上限的 70% │ ├──▶ ① 记忆刷写静默轮把对话中的持久记忆写入 SOUL.md / USER.md / MEMORY.md / memory/日期.md │ └──▶ ② 上下文压缩旧消息 → 结构化 summary只保留最近几轮原话刷写与压缩并发执行fire-and-forget 异步任务互不阻塞用户感知不到任何停顿。三、上下文压缩机制详解70% 阈值如何触发自动摘要1. 触发时机输入 Token 超过上限的 70%压缩不是等爆了再说而是提前预警。Skill Compose 在 app/llm/models.py 中为每个模型登记了上下文上限如 Claude Sonnet 为 200K核心常量定义在 app/agent/agent.py常量值含义COMPRESSION_THRESHOLD_RATIO0.7上次 API 调用的输入 Token 超过上下文上限的 70% 时触发压缩MAX_RECENT_TURNS5最多保留最近 5 个逻辑轮次RECENT_TURNS_TOKEN_BUDGET0.25保留的最近轮次最多占用上下文的 25%CHARS_PER_TOKEN3.5估算中英文混合文本的字符/Token 比每轮对话开始前Agent 都会检查上一次调用的实际输入 Token_should_compress超过阈值就压缩因此压缩永远发生在快满而不是已爆的时点。2. 结构化摘要六段式 Summary 模板压缩不是简单截断而是再调用一次 LLM让模型把旧消息写成一份带固定结构的summary包含Primary Request and Intent—— 用户的原始目标与约束逐字保留用户消息避免转述漂移Key Technical Concepts—— 涉及的技术栈、模型名、版本号Files and Code Sections—— 读过/改过哪些文件关键代码片段Problem Solving—— 试过什么、什么有效、什么失败及原因All User Messages—— 按时间顺序列出每一条用户发言Current State / Pending Tasks—— 当前进展与待办压缩后消息列表被重构为[摘要消息] [最近几轮原话]摘要中还附带请从上次中断处继续不要追问用户的指令保证任务不中断。3. 渐进式压缩越压越省永不失忆这是设计上最巧妙的部分迭代摘要Iterative Summary第二次压缩时系统检测到旧消息开头就是一份summary于是改用更新模式SUMMARY_UPDATE_PROMPT把新对话合并进旧摘要而不是从头重写——摘要只增不减早期关键信息不会在多轮压缩中逐渐丢失。按逻辑轮次切分系统只在真正的用户消息处切分工具结果不算保证不会把一轮的工具调用从中间劈开。超长轮次拆分如果预算只够保留 1 轮、而这轮本身就超大会在 assistant 消息边界切开把前半部分单独摘要TURN_PREFIX_SUMMARY_PROMPT保留后半部分原话。文件追踪自动附加压缩器会扫描旧消息中的read/write/edit/execute_code等操作把累计读过的、修改过的文件路径以read-files、modified-files标签附加到摘要末尾——即使正文被摘要化文件线索一条不丢。失败兜底摘要 API 调用失败时回退使用上一份摘要或截断后的原始文本绝不因压缩失败而中断会话。这些行为的完整测试用例见 tests/test_core/test_context_compression.py。四、记忆刷写机制详解压缩前先把要记住的写到磁盘摘要只能救当前会话真正跨会话的记忆靠记忆刷写Memory Flush。1. 静默刷写轮3 轮内的 read/write 权限当压缩阈值触发时系统会先对消息列表做快照最近 20 条然后异步启动一个静默 Agent 轮参数值最大轮数MEMORY_FLUSH_MAX_TURNS3可用工具仅 2 个read和write限定在 Agent 记忆目录内防路径穿越输入最近 20 条消息 现有记忆文件清单结束信号回复NO_REPLY表示没有值得记的内容错误处理记录日志但不影响主对话non-fatal刷写指令要求模型按内容分类落盘提示词见 app/agent/agent.pySOUL.md→ 人设、语气、行为准则USER.md→ 用户偏好、习惯、背景MEMORY.md→ 值得长期记住的精炼事实memory/日期.md→ 本次会话的进度与决策日志不进系统提示词按需读取并明确要求文件已存在时先读后追加不得覆盖避免记忆被冲掉。2. 注入回系统提示词时的瘦身保护这些文件在下次会话启动时会被注入系统提示词但 app/services/memory_service.py 设置了硬上限防止记忆本身撑爆上下文限制值单文件上限20,000 字符三个文件总上限60,000 字符截断策略保留开头 70% 结尾 20%中间插入截断标记另外Agent 日常还可通过memory_searchpgvector 语义搜索、memory_save、memory_get三个工具随时读写 app/services/memory_service.py 背后的数据库记忆条目——刷写是自动兜底工具是主动存取两者互补。五、完整时间线一次压缩到底发生了什么 ⏱️对话进行 → 第 N 次 LLM 调用返回 input_tokens → 超过上下文上限 70% 否 → 正常继续 是 → ① 快照最近 20 条消息异步启动静默刷写轮 ② 同步执行压缩切分轮次 → LLM 生成/更新摘要 → 附加文件追踪 → 消息列表替换为 [摘要 近 5 轮] ③ 向前端推送 context_compressed 事件 刷写轮在后台把记忆写入 SOUL.md / USER.md / MEMORY.md / memory/日期.md最多 3 轮后结束 → 用压缩后的消息列表继续第 N1 次 LLM 调用压缩发生时流式事件流会推送context_compressed事件携带压缩前 Token 数与上下文上限前端会话页面可直接展示刚刚发生了什么对新手排查Agent 为什么突然忘了细节非常有帮助。六、总结为什么长对话不会撑爆痛点Skill Compose 的解法Token 逼近上限才处理70% 阈值提前触发永远留有余量粗暴截断导致失忆六段式结构化摘要 迭代合并关键信息只增不减压缩后忘记文件线索自动追踪并附加 read/modified 文件清单跨会话记忆丢失压缩前静默刷写重要事实持久化到 Markdown 记忆文件记忆文件自身膨胀单文件 20K / 总量 60K 字符截断保护压缩过程影响体验刷写异步 fire-and-forget压缩失败有兜底会话不中断简单说上下文窗口是工作内存记忆文件是外存。Skill Compose 用一次摘要调用腾出工作内存再用一次静默刷写把宝贵信息写往外存——于是长对话可以无限进行而 Agent 依然记得你。如果你想亲手验证可以运行 tests/scripts/run_all_tests.sh 中的压缩相关测试tests/test_core/test_context_compression.py或在 Web 界面开启一个长任务型 Agent 会话观察context_compressed事件与 Agent 详情页的 Memory 标签页中逐渐丰满的记忆文件。赞分享【免费下载链接】archiveSkill Compose is an open-source agent builder and runtime platform for skill-powered agents. No workflow graphs. No CLI.项目地址https://gitcode.com/gh_mirrors/sk/archive点击查看免费下载相关推荐OpenClaw 上下文压缩Compaction机制深度解析让长会话始终控制在模型上下文窗口之内OpenClaw 上下文压缩Compaction机制深度解析让长会话始终控制在模型上下文窗口之内 每个模型都有上下文窗口能看到的最大 token 数人工智能大模型LLM 网关AI Agent即时通讯长对话上下文爆炸怎么办capsule-react上下文压缩机制与上下文引擎协同指南长对话上下文爆炸怎么办capsule react上下文压缩机制与上下文引擎协同指南 capsule react 是 Astrid OSUnicity AOS长对话不再失控OpenHands Software Agent SDK上下文压缩与持久记忆实战长对话不再失控OpenHands Software Agent SDK上下文压缩与持久记忆实战 长对话一多AI Agent 就失忆、跑偏甚至报错Ope创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

IAR现已全面支持凌鸥创芯 LKS32 系列 MCU,携手赋能中国电机控制创新

IAR现已全面支持凌鸥创芯 LKS32 系列 MCU,携手赋能中国电机控制创新

全球领先的嵌入式系统开发软件解决方案供应商IAR,与国内专注于运动控制领域的芯片企业南京凌鸥创芯电子有限公司(晶丰明源旗下子公司)联合宣布:IAR 最新发布的完整开发工具链 IAR Embedded Workbench for Arm v10.10版本已全面支持…

2026/10/15 15:03:46 阅读更多 →
第四篇:《LangGraph 实战:用状态机构建可控的 Agent 工作流》

第四篇:《LangGraph 实战:用状态机构建可控的 Agent 工作流》

在上一篇文章中,我们通过 create_agent 几行代码就构建了一个可运行的 Agent。但 create_agent 是一个“黑盒”——它内部构建了一个 StateGraph,但你无法控制流程的细节。当你需要条件分支、循环控制、中断恢复、人工审批时,就必须直接使用 …

2026/10/15 15:03:46 阅读更多 →
MATLAB频谱分析与功率谱绘制实战指南

MATLAB频谱分析与功率谱绘制实战指南

1. 频谱分析与功率谱绘制的工程价值在信号处理领域,频谱分析就像给信号做X光检查,能揭示时域波形背后隐藏的频率成分。我十年前第一次用MATLAB做电机振动分析时,发现时域信号看起来只是杂乱无章的波动,但转换到频域后,…

2026/10/15 15:02:45 阅读更多 →

最新新闻

12 月 PMP 报名三批次完整城市清单 + 考位紧张度预测 + 抢考位实操指南

12 月 PMP 报名三批次完整城市清单 + 考位紧张度预测 + 抢考位实操指南

12月PMP报名三批次完整城市清单12月PMP报名分三批放考位,时间、城市范围都不一样。这篇文章把批次安排、考点分布、考位紧张程度和抢位实操都过一遍,帮你提前心里有数。需要说明的是,本文内容仅基于官方公开信息整理,观点保持中立…

2026/10/15 15:41:41 阅读更多 →
PCL点云处理提速:用OpenMP并行加速直通滤波与法向量估计

PCL点云处理提速:用OpenMP并行加速直通滤波与法向量估计

你们有没有遇到过这种情况:一帧点云明明不复杂,直通滤波加上法向量估计,跑出来却要两三秒。我之前在调一个激光点云处理Demo时就是这个状态,后来把这两段代码换成OPENMP并行加速,时间直接压到原来的三分之一&#xff0…

2026/10/15 15:41:41 阅读更多 →
职臣Ai课程论文:从作业要求到写作大纲,怎么填?

职臣Ai课程论文:从作业要求到写作大纲,怎么填?

老师说“写一篇课程论文”,你打开写作页面,却发现第一栏就要填标题。题目还没想清楚,后面的字数、文献和图表又该怎么选?可以先把作业要求放在手边,按页面顺序处理,别急着生成正文。第一步,先写…

2026/10/15 15:41:41 阅读更多 →
Windows搭建FTP服务器与Nginx按IP分发网页访问方案

Windows搭建FTP服务器与Nginx按IP分发网页访问方案

上周帮一位朋友搭了一套文件分发系统,需求很直白:公司内部有人用 FTP 上传文件,外部不同网段的人通过浏览器访问一个网址,各自只能看到和自己相关的那部分文件。标题里的关键词是“Windows 上搭建 FTP 服务器”和“Nginx 反向代理…

2026/10/15 15:41:41 阅读更多 →
MatCap贴图标准化:分辨率、色彩空间与引擎适配指南

MatCap贴图标准化:分辨率、色彩空间与引擎适配指南

简介:本资源为面向3D建模师、渲染艺术家及初学者的MatCap材质贴图素材库,专用于Blender、Maya、3ds Max等软件的快速材质预览与风格化设计,解决传统光照调试耗时、实时反馈弱等痛点,显著提升概念验证与迭代效率。压缩包共2000个文…

2026/10/15 15:41:41 阅读更多 →
书霸AI论文诊室:拆解期刊稿的隐形问题|书霸AI官网www.shubaai.com|微信公众号搜一搜 书霸AI写作

书霸AI论文诊室:拆解期刊稿的隐形问题|书霸AI官网www.shubaai.com|微信公众号搜一搜 书霸AI写作

把一篇期刊论文打印出来,遮住作者姓名,只看题目、摘要和各级标题,你能说清它研究了什么、凭什么得出结论吗?这个小测试,往往比检查字数更能暴露问题。很多初稿读起来顺畅,却经不起追问:研究对象…

2026/10/15 15:40:40 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →