我的小龙虾-知薇 养成计划
从“可用脚本”到“可治理系统”:我的 AI Agent 子系统升级方法论
这是一篇实践笔记。
它不是抽象架构设计,也不是照搬某个框架的官方文档,而是我在连续完成 Skill 子系统与 Memory 子系统升级后,总结出来的一套可复用方法论。
1. 背景:为什么要沉淀这套方法论
在搭建一个长期运行的 AI Agent 系统时,最开始我们很容易关注“能不能跑”。
比如:
- 能不能查到一个 Skill?
- 能不能写入一条记忆?
- 能不能根据用户问题检索专家?
- 能不能在飞书里完成一次调用?
这些当然重要,但当系统不断变复杂以后,仅仅“能跑”是不够的。
因为一个长期运行的 Agent 系统真正需要解决的是:
- 能不能稳定被发现?
- 能不能被正确调用?
- 能不能知道是否可用?
- 能不能审计它有没有异常?
- 能不能在变更后安全收口?
- 能不能通过黑盒测试证明链路真实跑通?
- 能不能避免规则散落在多个文件里,最后没人知道哪个才是准的?
这也是我在连续升级 Skill 子系统和 Memory 子系统后最大的体会:
一个子系统真正成熟的标志,不是“脚本能跑”,而是“它具备注册、路由、审计、追溯、验收和持续治理能力”。
2. 核心结论
经过 Skill 子系统和 Memory 子系统两轮实践验证,我总结出一套升级路径:
从:
- 单个脚本
- 手工判断
- 临时规则
- 靠模型理解
- 靠前端回复判断是否成功
升级为:
- 有注册表
- 有策略配置
- 有 Router
- 有 Auditor
- 有日志
- 有报告
- 有后端链路验收
- 有 Change Guard 收口
- 有总控调度接入
这套方法可以概括为:
子系统 V2 升级方法论:把一个“能用的能力”,升级成一个“可治理的系统”。
3. 标准架构:一个成熟子系统应该具备什么
一个较成熟的 Agent 子系统,至少应该包含以下层次。
3.1 Registry:注册表层
注册表负责回答:
- 这个子系统有哪些组件?
- 每个组件负责什么?
- 有哪些能力类型?
- 哪些文件是核心文件?
- 哪些内容属于这个子系统,哪些不属于?
例如:
- Skill 子系统有 SKILL_REGISTRY.md
- Memory 子系统有 MEMORY_REGISTRY.md
- 专家子系统未来可以有 EXPERT_REGISTRY.md
注册表不应该记录任务进展,也不应该承担执行逻辑。
它的作用是:
让系统结构可解释,让人和 Agent 都知道这个子系统由什么组成。
3.2 Policy:策略配置层
策略配置负责把可调整规则从代码中抽离出来。
它通常是 JSON 或类似格式,例如:
- memory_policy.json
- skill rules json
- expert_policy.json
它适合放:
- 默认召回数量
- 是否读取归档
- 允许的类型
- 过期判断天数
- 审计检查项
- Router 支持的动作
- Auditor 必须检查的文件和目录
策略层的核心价值是:
以后改规则,不一定要改代码。
3.3 Router:路由层
Router 是自然语言请求到具体动作之间的桥。
它负责:
- 判断用户意图
- 识别是 query、write、task、status、validate 还是其他动作
- 生成标准命令
- 必要时执行底层 Engine
- 记录 route 和 execute 日志
Router 的价值在于:
不再让模型临场猜“应该调用哪个脚本”,而是把自然语言入口标准化。
在 Memory 子系统里,Router 解决了这个问题:
- 用户说“查一下之前……”
- 用户说“记一下……”
- 用户说“下一步是什么?”
- 用户说“检查记忆系统”
这些请求都先进入 Memory Router,再由 Router 分发给 Engine。
3.4 Engine / Core:执行层
Engine 是真正干活的底层执行器。
它负责:
- 读
- 写
- 查询
- 索引
- 摘要
- 基础校验
但是 Engine 不应该直接承担自然语言判断。
一个关键原则是:
Router 负责判断意图,Engine 负责执行动作。
这样可以避免底层脚本越来越重,也避免模型绕过路由直接调用底层能力。
3.5 Auditor:审计层
Auditor 不负责写入,也不负责业务执行。
它只回答一个问题:
这个子系统现在是否健康?
它应该检查:
- 必要文件是否存在
- 必要目录是否存在
- index 是否合法
- policy 是否合法
- registry 是否完整
- 是否存在旧称呼残留
- 是否存在规则漂移
- 是否存在过期任务
- 是否能生成审计报告
Auditor 的价值在于:
让“是否可用”不再靠感觉判断,而是靠结构化验收结果判断。
3.6 Logs:运行日志层
日志不是为了好看,而是为了定位真实链路。
尤其在飞书、企业微信、钉钉这类前端交互场景里,只看前端回复远远不够。
因为前端只能证明:
- Agent 回复了
但不能证明:
- 它有没有走 Router
- 有没有调用 Engine
- 有没有写入文件
- 有没有生成报告
- 有没有绕过规则
所以必须有日志。
例如:
- router.log 记录 route / execute
- engine.log 记录 query / write / task
- auditor.log 记录 verify / report
3.7 Reports:报告层
报告用于保存审计结果和验收结果。
它的作用是:
- 可追溯
- 可复查
- 可对比
- 可证明某次验收确实发生过
例如:
- memory/reports/memory-audit-YYYYMMDD-HHMMSS.json
- skill_registry/reports/audit-skill-verify-*.json
报告层让一次验收从“口头说通过”变成“有文件可查”。
3.8 Index:索引层
当一个子系统的数据开始增多时,不能每次都全文读取。
索引用来解决:
- 快速查询
- Top-K 检索
- 降低上下文成本
- 避免大文件全文注入
Skill 子系统有 SKILL_INDEX.json。
Memory 子系统有 memory/index.json。
专家子系统未来也应该有 EXPERT_INDEX.json 或更严格的专家索引结构。
索引层的核心原则是:
给机器查,不给人硬读;由脚本维护,不靠手工乱改。
3.9 AGENTS.md:总控接入层
子系统自己跑通还不够,必须接入总控调度。
AGENTS.md 负责告诉 Agent:
- 什么情况下触发该子系统
- 默认入口是什么
- 哪些行为禁止
- 结果如何解释
- 失败时如何处理
这里最重要的原则是:
AGENTS.md 只放触发协议和调度边界,不放子系统的完整实现细节。
如果 AGENTS.md 写得太重,系统会膨胀。
如果 AGENTS.md 写得太轻,Agent 不知道什么时候调用子系统。
所以总控层应该保持“短、硬、准”。
3.10 Change Guard:变更守卫层
任何核心子系统升级,都必须有变更守卫闭环。
标准流程是:
- 修改前明确意图
- 修改后 scan
- 根据 scan 生成同步计划
- validate
- 必要时更新记忆、索引、任务
- checkpoint 记录新基线
它解决的问题是:
- 改了哪些文件?
- 风险等级是什么?
- 是否需要同步其他文件?
- 是否需要重建索引?
- 是否需要重启?
- 当前 workspace 是否干净?
Change Guard 的价值是:
让配置变更从“手工感觉”变成“有扫描、有校验、有基线”的工程流程。
4. 标准升级流程
基于两轮实践,我把子系统升级流程总结为 10 步。
第一步:确认子系统边界
先回答:
- 这个子系统解决什么问题?
- 它不解决什么问题?
- 哪些文件属于它?
- 哪些文件不应该被它承担?
- 它和 AGENTS.md、TOOLS.md、MEMORY.md 的关系是什么?
这一步非常重要。
很多系统混乱,不是因为代码写错,而是因为文件职责不清。
第二步:保留稳定执行层
如果原来已经有能跑的脚本,不要急着推倒重来。
正确做法是:
- 先保留执行层
- 明确它的职责
- 不让它继续膨胀
- 后续在外面补 Router、Auditor、Policy
例如 Memory 子系统中,zhiwei_memory_engine.py 原本已经能读写查询,所以没有推倒重写,而是保留为 Engine 层。
第三步:补注册表
新增或完善 Registry 文件。
它应该写:
- 组件清单
- 存储分层
- 类型定义
- 职责边界
- 默认读取边界
- 默认写入边界
它不应该写:
- 当前项目进展
- 临时任务
- 流水账
- 大段执行命令
注册表要清晰、克制、稳定。
第四步:补策略配置
把可调整规则外置。
例如:
- 默认 top_k
- 是否读 archive
- 支持哪些 action
- 审计检查哪些文件
- stale task 天数
- legacy terms 清单
这样后续调规则时,不必每次都改 Python 逻辑。
第五步:补 Router
Router 是自然语言入口。
它应该做到:
- 能识别意图
- 能生成 action
- 能生成 engine_args
- 能可选 execute
- 能记录 route 日志
- 能本地 verify
关键是:
Router 不应该自己承担复杂执行逻辑,而是分发给 Engine。
第六步:补 Auditor
Auditor 是健康检查入口。
它应该做到:
- 能检查结构
- 能检查 policy
- 能检查 index
- 能检查 registry
- 能检查旧规则残留
- 能生成报告
- 能返回 ok / warnings / errors
关键是:
Auditor 只检查,不修改核心内容。
第七步:本地 CLI 验收
先不要上飞书。
本地先跑通:
- Router verify
- Auditor verify
- Engine validate
- Engine rebuild-index
- Router route --execute
- Query 测试
- Write 测试
本地过不了,前端一定不稳定。
第八步:黑盒链路验收
飞书这类前端测试不能只看回复内容。
必须看后端日志:
- Router 是否有 route
- Router 是否有 execute
- Engine 是否有 query / write
- MEMORY.md 是否真实写入
- index 是否更新
- Auditor 是否生成 report
黑盒测试要用唯一标识,避免历史日志干扰。
例如:
- MR-COMPARE-NL-20260507
- MR-COMPARE-WRITE-20260507
- SKILL-AUDIT-TEST-xxxx
这样 grep 日志时能判断是不是本轮触发。
第九步:接入 AGENTS.md
接入总控时要注意:
- 只写默认入口
- 不重复暴露底层命令
- 不把完整实现细节写进去
- 明确 MUST / NEVER 规则
- 明确失败处理方式
- 避免总控文件越来越长
一个重要经验是:
如果 AGENTS.md 同时暴露 Router 和 Engine,模型可能绕过 Router 直接调用 Engine。
所以总控层要避免给模型多条冲突路径。
第十步:Change Guard 收口
所有修改完成后必须收口:
- scan
- validate
- rebuild-index
- checkpoint
- 再 scan 确认 changed_count = 0
只有 workspace 干净,才算升级完成。
5. 实践中验证出来的关键经验
5.1 不要相信前端回复,要看后端日志
前端回复“已记录”,不等于真的写入。
前端回复“链路正常”,不等于真的走了 Router。
必须看:
- router.log
- engine.log
- auditor.log
- MEMORY.md
- index.json
- Change Guard scan
5.2 测试用例必须带唯一标识
重复使用同一个测试句,会污染判断。
因为它可能已经存在于:
- MEMORY.md
- index.json
- router.log
- engine.log
- 飞书上下文
- 当前对话上下文
所以每轮测试都应该使用唯一标识。
5.3 不要一开始就改核心脚本
如果核心脚本已经验收通过,不要因为前端表现异常就马上改代码。
先判断问题发生在哪一层:
- AGENTS.md 是否注入?
- Router CLI 是否正常?
- 飞书是否能执行指定命令?
- 自然语言是否触发正确入口?
- 后端日志有没有证据?
只有定位到脚本层问题,再改代码。
5.4 规则写进 AGENTS.md 不等于模型一定执行
这点非常重要。
模型可能“知道规则”,但执行时仍然走旧路径。
所以要通过测试拆分判断:
- 它是否知道规则?
- 它是否能说出正确命令?
- 它显式执行命令时是否能走通?
- 普通自然语言时是否也能走通?
- 后端日志是否证明链路真实发生?
5.5 Router 和 Engine 不要同时作为常规入口暴露
如果总控文件里既写:
- Router 是默认入口
又列出:
- Engine current
- Engine query
- Engine write
模型就可能直接拿 Engine 命令执行。
所以更好的方式是:
- AGENTS.md 只暴露 Router
- Engine 命令放在 TOOLS.md 或 Registry 里
- Engine 只作为故障排查和底层执行层
5.6 Auditor 不能替代 Router
Auditor 负责判断系统是否健康。
Router 负责处理自然语言请求。
两者不能混用。
常见区分:
- 用户问“记忆系统是否正常?” → Auditor
- 用户问“查一下之前……” → Router
- 用户说“记一下……” → Router
- 用户问“这个 Skill 是否可用?” → Skill Auditor
- 用户问“我该用哪个 Skill?” → Skill Router
6. 常见失败模式
6.1 文件结构搭好了,但内容逻辑没升级
只建目录和空文件不代表系统升级完成。
必须补齐:
- Registry 内容
- Policy 内容
- Router 逻辑
- Auditor 逻辑
- 日志
- 验收报告
6.2 Router 本地可用,但总控没接入
Router CLI 能跑,不代表飞书会用它。
必须接入 AGENTS.md,并做飞书黑盒测试。
6.3 总控接入了,但模型仍绕过 Router
这种情况通常是因为:
- AGENTS.md 仍暴露 Engine 命令
- MEMORY.md / MEMORY_RULES.md 有旧入口
- 上下文里有旧操作惯性
- 测试用例重复导致误判
- 没有后端日志验证
6.4 只看前端,不看后端
这是最容易误判的地方。
前端回答“已完成”,但后端可能是:
- 直接 Engine
- 没有 Router
- 没有写入
- 没有重建索引
- 没有审计报告
6.5 改动后没有 checkpoint
只要没有 checkpoint,系统就处于未收口状态。
Change Guard 的最终目标不是 scan 出问题,而是让每次核心变更都有新基线。
7. 方法论在 Skill 子系统中的验证
Skill 子系统升级验证了:
- Skill Registry 可以统一管理 Skill 元信息
- Skill Router 可以完成能力选择和查询
- Skill Auditor 可以判断 Skill 是否安装成功、是否 ready、是否可用
- 测试不能只依赖目录或 openclaw skills list
- 必须用 Auditor 作为验收入口
- AGENTS.md 必须强制 Skill 验收问题先走 Auditor
Skill 子系统验证出的关键经验是:
能看到 Skill 文件,不代表 Skill 可用;必须有 Auditor 做结构化验收。
8. 方法论在 Memory 子系统中的验证
Memory 子系统升级验证了:
- Memory Engine 适合作为执行层
- Memory Router 适合作为自然语言入口
- Memory Auditor 适合作为健康检查入口
- MEMORY.md 需要清晰的长期事件追加区
- index.json 必须由脚本维护
- 飞书前端回复不能作为唯一判断依据
- 必须通过 router.log / engine.log / MEMORY.md 验证真实链路
Memory 子系统验证出的关键经验是:
记忆系统不是“写入文件”,而是“判断、沉淀、召回、审计、收口”的完整链路。
9. 这套方法如何迁移到专家子系统
专家子系统升级时,可以直接套用这套方法。
建议结构如下:
- EXPERT_REGISTRY.md:专家注册表
- EXPERT_RULES.md:专家治理规则
- expert_policy.json:专家策略配置
- EXPERT_INDEX.json:专家索引
- search_experts.py:专家检索执行层
- zhiwei_expert_router.py:专家自然语言路由层
- zhiwei_expert_auditor.py:专家审计层
- experts/logs/:专家路由与审计日志
- experts/reports/:专家审计报告
专家子系统的关键问题不是“能不能检索专家”,而是:
- 什么时候应该调专家?
- 调哪类专家?
- Top-K 是否合理?
- 专家结果是否需要融合?
- 是否存在专家漂移?
- 是否存在过度调用专家?
- 是否能证明专家路由链路真实发生?
所以专家子系统不应该只升级 search_experts.py,而应该升级成完整的 Expert System V2。
10. 我的最终方法论总结
这套方法论可以总结为一句话:
任何 AI Agent 子系统,只要从“单脚本能力”走向“长期运行能力”,就必须补齐 Registry、Policy、Router、Engine、Auditor、Logs、Reports、Index、AGENTS 接入和 Change Guard 收口。
更短一点:
先让能力可用,再让能力可治理。
Skill 子系统和 Memory 子系统已经证明了这条路径是可行的。
接下来升级专家子系统时,不应该重新摸索,而应该沿用这套经过实践验证的方法论。
11. 给未来自己的提醒
- 不要急着写代码,先确认职责边界。
- 不要把所有规则塞进 AGENTS.md。
- 不要让模型在多个入口之间自由选择。
- 不要只看前端回复,要看后端日志。
- 不要重复使用同一测试标识。
- 不要在没有定位清楚前修改核心脚本。
- 不要忘记 Change Guard checkpoint。
- 一个系统真正完成,不是它能跑,而是它能被验收、被追溯、被安全迭代。
12. 标准升级清单
每次升级一个子系统前,可以按下面清单自查:
- 是否明确了子系统边界?
- 是否保留了稳定执行层?
- 是否有 Registry?
- 是否有 Policy?
- 是否有 Router?
- 是否有 Auditor?
- 是否有 Logs?
- 是否有 Reports?
- 是否有 Index?
- 是否完成本地 CLI 验收?
- 是否完成前端黑盒测试?
- 是否完成后端日志验证?
- 是否接入 AGENTS.md?
- 是否避免 AGENTS.md 暴露多个冲突入口?
- 是否完成 Change Guard scan?
- 是否完成 validate?
- 是否完成 checkpoint?
- checkpoint 后 scan 是否为 changed_count = 0?
如果这些都完成,才可以认为一个子系统真正进入 V2 可治理状态。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)