给 SRE agent 加"长记忆":我自己写一套,对比 Headroom 的 SharedContext 和 Learn

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文介绍为SRE Agent构建“长记忆”能力的实践:自研轻量级故障经验库`incident-kb`(SQLite+向量检索),专注存储结构化故障案例(症状指纹/根因/处置等),强调人工审核入库、告警入口实时注入。对比Headroom的SharedContext(存工作杂事)与Learn(提炼规则),三者定位不同、互不可替代,需分层建设。

给 SRE agent 加"长记忆":我自己写一套,对比 Headroom 的 SharedContext 和 Learn

上一期:[不抄代码只抄脑子:照着 SmartCrusher 给我那个 SRE agent 写了个压缩中间件]
这一期:把 agent 的"长记忆"那一块给补上,顺便对比 Headroom 自带的 SharedContext / Headroom Learn 是不是同一回事。
一句话剧透:不是同一回事。我做的事 SharedContext 干不了,Headroom Learn 也干不了——但反过来它们能干的事我也不全做。

ScreenShot_2026-07-03_164746_254.png


一、痛点:我那个 SRE agent 是个"健忘症患者"

上一期写完 crusher-lite,token 账单是省下来了,但我盯着它跑两周后又发现一个老问题:

它每次都从零开始想问题。

同一个微服务的 OOM 告警,上周三排过一次,定位到是某个定时任务把缓存撑爆。这周二一模一样的告警来了,agent 又老老实实捞日志、查指标、查 trace,又花了一整套 token 才得出同样的结论。

我不是要它"猜"——SRE 排查不能靠猜。但起码它该知道:"这个症状我们三天前见过,根因可能是 X,先去验证一下。"

这就是"长记忆"该解决的事。


二、我的方案:incident-kb,一个本地"故障经验库"

砍到最朴素的形态:

  • 存什么:每次故障排查结束,把"症状指纹 + 根因 + 处置动作 + 链接到当时的工单"五件套写进本地 SQLite。
  • 怎么找:新告警进来,先用症状指纹做语义检索,命中就把命中的 1-3 条历史 case 注入到 agent 上下文。
  • 谁来写:故障收尾时,agent 自己提交一份"事后小卡片"——人工 review 通过才入库。不让 agent 自动写,免得垃圾进垃圾出

image.png

技术栈三件套就够:

  • SQLite:存 case 元数据
  • sqlite-vec 扩展:嵌入向量直接存同一份 db
  • 本地 sentence-transformers 模型(或者公司内部的 embedding 服务)算嵌入

代码量我估了一下,比 crusher-lite 还少,200 行就够。一个表、一个写入函数、一个检索函数、一个 hook 把它挂到 agent 的告警入口。


三、症状指纹:长记忆能不能用,全看这一步

光说"语义检索"是骗外行的。SRE 场景下,两个告警长得多像才算"同一类"

我决定用一个组合指纹:

def fingerprint(alert: dict) -> str:
    parts = [
        alert["service"],          # 服务名
        alert["alert_type"],        # OOM / latency / 5xx / ...
        normalize_topology(alert),  # 调用上下游归一化
        bucketize_metric(alert),   # 指标值分桶(不是精确值)
    ]
    return " | ".join(parts)

注意几个我反复改过的地方:

  • 指标分桶而不是用精确值——上次 OOM 时内存 7.2G,这次 7.4G,不能因为数字不同就说不是同一类。
  • 拓扑归一化——把"实例 ID"这种每次都不一样的字段抹掉,只留"服务 A → 服务 B"这种结构。
  • 不直接喂自然语言给嵌入模型。指纹先组装成一个半结构化字符串,召回率比直接 embed 整段告警高一截——这个我用历史 trace 拉了一份对照样本估算过,提升大约从 60% 召回到 80% 上下。

四、和 Headroom 的 SharedContext / Learn 真不是一回事

这部分是这一期重点。SharedContext 和 Headroom Learn 看名字都跟"记忆"沾边,但解决的是完全不同的问题

SharedContext:跨 agent 共享的"小抄"

我去翻了 Headroom 源码(headroom/memory/),SharedContext 的真身是:

  • SQLite + sqlite-vec/HNSW 存底,本地 sentence-transformers 算嵌入(跟我打算用的几乎一样)
  • 通过 proxy 的 x-headroom-user-id / x-headroom-project-id header 做用户和项目隔离
  • 注入策略叫 AUTO_TAIL——只往最后一条 user message 尾巴上贴,不动 system prompt,目的是保住 prompt cache
  • 默认预算极保守:最多注入 1024 token、最多 10 条、相似度阈值 0.3

它的典型用法是这样的:你在 Claude Code 里告诉 agent "这个项目的数据库 URL 是 xxx",切换到 Cursor 干活时,那个 URL 自动浮出来。它存的是"工作中产生的杂事"——账号、路径、约定、偏好

Headroom Learn:从失败会话里自动总结规则

这块定位完全不同——它是个离线分析器

headroom learn --agent claude --source ./sessions/

吃一堆历史会话日志,挑出"agent 反复犯的错",把教训写进 CLAUDE.md / AGENTS.md它产出的是 prompt 级别的规则,下次会话被自动加载。

三个东西分别在干啥

维度 SharedContext Headroom Learn 我的 incident-kb
存什么 工作杂事 / 偏好 失败教训 → 规则文本 故障 case 五件套
颗粒度 句子级 规则条款级 事件级
触发时机 实时(每次会话) 离线批处理 实时(告警入口)
注入位置 user message 尾部 system prompt tool 返回结果之前
谁来写 agent 自动 离线脚本自动 人工 review 后入库
上限 1024 token / 10 条 看 CLAUDE.md 体积 单 case 不限,按相似度 top-k

我蹲完源码、画完这张表后才彻底想清楚——这三种"记忆"在 agent 系统里是三个不同的位置。SharedContext 是给 agent 留的便签条,Learn 是给 agent 立的规矩,incident-kb 是给 agent 准备的案例库。要有都得有,互不替代。


五、那为啥不直接用 SharedContext?

我认真考虑过这个问题。结论是 SharedContext 太轻,扛不住故障 case 的形态

  • 1024 token 预算对账号路径够用,对一份故障 case 不够。我那个 SRE agent 的一份 case 卡片,光是处置 SOP 就能写到 800 token,再加上原始告警截取、根因说明、相关链接,2-3k 起步。
  • AUTO_TAIL 不动 system prompt 是为了保 prompt cache,但故障 case 注入的最佳位置其实不是 user message 尾部,而是工具返回告警内容之前——让 agent 在看到告警的瞬间就被提醒"似曾相识"。
  • agent 自动写 在 SRE 场景里风险大。垃圾 case 入库会害死下次排查。我必须卡 review 这一步。

所以我的选择是:incident-kb 自己做,但把 SharedContext 那套"SQLite + 向量 + 本地嵌入"的组合直接抄过来——这套技术栈被它在生产里验证过,没必要换。

Headroom Learn 那一套我倒是真打算用——把我们 SRE agent 历史会话扔给它,让它生成一份初版 AGENTS.md,再人工梳一遍当成规则基线。Learn 产出规则,incident-kb 产出案例,两者刚好互补。


六、上线节奏(计划,不是已发生)

我打算分三步真上线:

  1. 第 1 周影子模式:只写不读。每次故障收尾让 agent 起草 case 卡片,我和组里另一个同事手动 review 入库。攒够 30 条再开下一步。
  2. 第 2-3 周灰度读取:5% 告警走"先查 kb"分支,对比命中率和误导率。设定一个回滚开关,命中后 agent 给出的判断如果跟最终结论南辕北辙,直接关闭 kb 注入。
  3. 第 4 周全量 + 接 Headroom Learn:把这四周的会话喂给 headroom learn,让它生成 AGENTS.md 规则。kb(案例)+ AGENTS.md(规则)+ crusher-lite(压缩)三套件齐活。

七、值不值得做:粗算一下

把这三层叠在一起的预期收益(按上一期同样的工作量基线估算):

改造项 主要节省
crusher-lite tool 输出压缩 ~80%,月省约 ¥6,200
incident-kb(命中场景) 单次排查 token 估降 30-50%,加快定位时间
Headroom Learn 规则 减少 agent "犯过的错再犯一次",质量提升 > 成本降

钱的账接着上一期 ROI 表算就行,但真正的价值不在 token——是把 SRE 排查从"每次重新想"变成"先看历史"。这件事的杠杆比省钱大得多,只是说不出确切数字。


八、总结:记忆这事,要分层

写到这里我意识到一个比技术更重要的判断:

agent 的记忆从来不是一个东西。 它至少有三层——

  • 杂事便签(SharedContext 干的活):高频、轻量、agent 自助。
  • 规则约束(Headroom Learn 干的活):低频、稳定、离线生成。
  • 案例库(我这个 incident-kb 干的活):中频、有结构、必须人工把关。

把这三层分开,每层用最匹配的载体,比想造一个"全能记忆系统"务实得多。Headroom 把前两层做好了,留给我的是第三层——这种"开源做底盘、自己盖业务层"的协作姿势,是我读完这个项目这几周最大的收获。

目录
相关文章
|
4天前
|
人工智能 Kubernetes 调度
AgentTeams 和 Claude Tag 都进入群聊模式,是新范式还是新叙事?
AgentTeams 和 AgentLoop 均处于邀测期,欢迎感兴趣的朋友申请测试。
|
4天前
|
Rust NoSQL 中间件
不抄代码只抄脑子:照着 SmartCrusher 给我那个 SRE agent 写了个压缩中间件
本文介绍为SRE场景定制的轻量级LLM输入压缩中间件`crusher-lite`:基于SmartCrusher思想,摒弃Rust/Python混合架构与复杂模型,仅用300行纯Python实现五大核心策略——无损改写优先、数据分布识字段、变点保留、错误硬保留、本地LRU版CCR兜底。专插于tool层,压缩比达78%~83%,零外部依赖,合规易审,月省成本超6000元。(239字)
60 0
不抄代码只抄脑子:照着 SmartCrusher 给我那个 SRE agent 写了个压缩中间件
|
4天前
|
人工智能 数据挖掘 测试技术
阿里云 Qoder 全系接入千问 Qwen3.7:夜间 Night Plan 折扣全解析
2026年阿里云完成Qoder全系产品对Qwen3.7系列模型的适配接入,并同步推出Night Plan夜间错峰计费机制,依托低谷空闲算力给出高额折扣,其中旗舰Qwen3.7 Max夜间仅2折,Qwen3.7 Plus夜间4折,使用最高可节省80%算力消耗成本。同时百炼平台面向新用户开放100万免费Tokens额度,个人开发者、企业团队可结合免费额度与夜间双重优惠,大幅降低代码重构、数据分析、长文档处理等高消耗任务开销。
143 0
|
4天前
|
Web App开发 SQL 人工智能
Addy Osmani 的 agent-skills 爆火:AI 编码终于开始从“会写代码”走向“按工程流程做事”
Addy Osmani(Chrome 工程负责人)推出的 agent-skills 仓库,将24个生产级工程实践(代码审查、性能优化、安全检查等)封装为可复用AI技能,赋能Copilot/Claude/Cursor等工具按规范流程协作,推动AI编码从“写代码”迈向“可信工程交付”。
58 0
Addy Osmani 的 agent-skills 爆火:AI 编码终于开始从“会写代码”走向“按工程流程做事”
|
4天前
|
算法 数据可视化 安全
为什么数据仓库要分层?ODS、DWD、DWS、ADS到底怎么理解?
企业数据分析常直连业务系统,短期快但长期乱:口径不一、性能受损、指标失控。数据仓库分层(ODS→DWD→DWS→ADS)正是为解决此困局——逐层实现数据接入、清洗、汇总、应用,让原始数据蜕变为可信、可复用、可追溯的数据资产。(239字)
|
4天前
|
Linux 开发工具 iOS开发
【2026实测】Homebrew安装+配置国内源+使用一篇搞定(多种安装方式)
Homebrew 是 macOS 最流行的开源包管理器,被誉为“macOS 缺失的包管理器”。一行命令即可安装、更新、卸载命令行工具(如 Git、Python)和图形应用(如 Chrome、VS Code),自动处理依赖与环境配置,大幅提升开发效率。(239 字)
|
4天前
|
人工智能 API 开发工具
‌AI Agent时代的云?解读阿里云新品“千问云”:一个聚合150+大模型的AI平台
千问云是阿里云推出的AI原生MaaS平台,专为AI Agent时代打造。汇聚Qwen、GLM、Kimi、DeepSeek等150+系列、480+款主流大模型,支持文本、视觉、语音、多模态生成,兼容OpenAI SDK,提供Skills/CLI工具与开箱即用AI应用,助力高效构建智能体。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
|
4天前
|
人工智能 安全 API
不仅听懂,更能干活:看张之阳如何让 Agent 安全接管智能家居
本文介绍七牛云工程师张之阳基于OpenClaw+Home Assistant打造的智能家居Agent实践:让AI理解“朋友来家调灯光”等模糊指令,通过统一API层、状态回查与安全边界设计,实现从对话到真实系统执行的完整闭环,探索AI落地生产力的关键工程路径。
|
4天前
|
人工智能 开发工具 git
02|拆 loopat 架构:Loop、Sandbox、Vault 到底解决了什么
本文是《loopat三篇实践笔记》的第二篇,深入剖析其核心架构设计:Loop(可复现工作现场)、Sandbox(沙箱隔离)、Vault(凭据分层)、Git worktree(任务边界)等,揭示其为何拒绝简单聊天式Agent,转而构建可审计、可沉淀、可协作的AI操作系统雏形。(239字)
47 1
|
4天前
|
缓存 小程序 API
通过商品 ID 获取全量商品数据并批量上货完整实操方案
本方案通过商品ID一键拉取全量结构化数据,经清洗、规格匹配、价格换算与素材处理后,自动同步至自有商城、小程序及分销店铺,实现批量上新。支持密钥管控、风控审计与多平台适配,全程无人工干预,显著降本增效。
77 1