
Atomic Agent核心实现原理稳定前缀KV-cache复用如何让本地小模型扛住长任务【免费下载链接】atomic-agentAtomic Agent is a local-first AI agent. Runs open-weight models on your own machine via llama.cpp.项目地址: https://gitcode.com/gh_mirrors/at/atomic-agentAtomic Agent 是一个运行在你自己电脑上的 local-first本地优先AI Agent通过 llama.cpp 驱动本地开放权重模型完成读文件、跑命令、操作浏览器等多步任务。它的核心难题只有一个如何让小模型在长任务里不卡顿、不烧内存。答案是两个工程技巧的组合——稳定前缀Stable Prefix与 KV-cache 复用。本地小模型为什么扛不住长任务Agent 的本质是一个循环模型决定动作 → 执行 → 结果回填 → 再决定。问题在于每一轮都要把不断变长的上下文重新喂给模型。对云端大模型来说这只是账单问题对本地 7B35B 的小模型则是硬伤每一步都全量重编码 prompt速度逐轮下降上下文越滚越长KV-cache 内存占用膨胀长任务直接 OOM小模型容易输出格式错误的工具调用进一步放大浪费Atomic Agent 的做法不是堆算力而是让每一轮推理只处理新增的少量内容。技巧一稳定前缀让 prompt 的上半身一个字节都不变打开 build-prompt.ts 可以看到 prompt 被拆成两段区段内容是否逐轮变化稳定前缀人设、规则、工具清单、技能目录、能力说明会话内字节级不变可变尾部对话历史、记忆、世界状态、召回笔记、加载的技能正文每步都变组装逻辑在 build-prompt.ts前缀本体由 stable-prefix.ts 生成。几个刻意的设计细节日期放在尾部而不是前缀——它靠近生成点模型才真正看见它世界快照和对话历史严格放在尾部膨胀它们也不会使前缀的缓存失效尾部有硬预算对话、记忆、工具状态都被裁剪进可预测的 token 上限老对话会被压缩成一行摘要一句话该变的都挤到后面前面的字节纹丝不动。这是 KV-cache 复用的前提。技巧二槽位钉住 cache_prompt真正吃到缓存光有稳定前缀还不够——llama.cpp 的llama-server是多槽位slot服务每次请求要落到某个槽里前一个槽的缓存才可能命中。这套映射由 slot-manager.ts 负责首请求探槽会话第一次推理发id_slot: -1 cache_prompt: true让服务器按最长公共前缀相似度挑槽——重启后还能找回仍持有自己 prompt 的旧槽钉住槽位step-executor.ts 从返回里读出服务器实际选择的槽号id_slot调用pin()钉死之后该会话所有请求、重试都指向同一槽前缀变了也不搬家如果稳定前缀真的发生了变化会话不迁槽——服务器只需从分叉点重新评估比冷启动便宜得多并发契约每个会话同一时刻只有一个活跃轮次由 TurnController 保证槽位不会被两个请求互相踢掉缓存请求侧llama-server-client.ts 默认带上cache_prompt: true并写入id_slot响应侧的resolvePromptUsage()则精确拆分prompt_n本次真实编码的 token和cache_n从缓存复用的 token供 TUI 和指标展示。暖缓存时真正参与计算的只是那一小段新增内容。如果你在外部自己起llama-server记得加--cache-reuse 256开启前缀复用参见 README.md 的 External llama-server 一节。配套招式GBNF 语法约束 并行读批格式永不翻车本地后端用 GBNF 语法见 tool-call.gbnf把输出约束成 JSON 工具调用数组小模型不可能写出解析失败的调用省掉大量重试轮次一次推理并行执行独立的只读调用读文件、grep 等在一次推理后并发执行危险操作才走审批见 batch-executor.ts推理端再压一档自带的 TurboQuant llama.cpp 对 KV-cache 做低比特量化相比 F16 压缩约 6.4×长上下文占用内存锐减自定义投机解码再带来 30%50% 的吞吐提升效果9B 小模型也能过一半 GAIA L1在公开的 GAIA Level 153 题上同一个本地模型、同一套步数预算只换 Agent 循环Atomic Agent 拿到69.8% 准确率、平均每题约 217 秒换成 9B 的qwen-3.5-9b仍有 52.8%。完整可复现报告见 GAIA-L1-EXPERIMENT.md。可观测性trace replay 检测前缀漂移稳定前缀必须字节不变是一条硬不变式但工具、技能、能力变更都可能悄悄改变它。Atomic Agent 把每步的stablePrefixHash写进本地 NDJSON trace用一条命令即可回放比对atomic-agent trace replay sessionId哪个 turn 出现DRIFT一目了然实现见 trace-command.ts。这意味着缓存收益不是玄学而是可审计的工程指标。小结长任务不卡顿的三件套稳定前缀prompt 上半身会话内字节级不变为缓存命中铺路槽位钉住 cache_prompt让 llama-server 的 KV-cache 真正被复用每轮只算增量量化与语法约束兜底KV 量化省内存、GBNF 省重试小模型才敢跑长任务想亲手验证这套机制跑 PROMPT.md 里的 prompt 结构文档 trace replay就能在自己机器上看见缓存命中率的变化。【免费下载链接】atomic-agentAtomic Agent is a local-first AI agent. Runs open-weight models on your own machine via llama.cpp.项目地址: https://gitcode.com/gh_mirrors/at/atomic-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考