【免费下载链接】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),仅供参考