笃行
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
首页
个人 & 心法
互联网/硬件后台
游戏基础架构
UE 引擎
游戏业务
AI / 大模型
数据结构与算法
机器学习数学
通用基础
GitHub
  • AI / 大模型

    • AI / 大模型
    • 大模型核心原理
    • 推理与微调优化
    • RAG 检索增强生成
    • RAG 上下文剪枝实战(Listwise Pruning 复现)
    • RAG 数据清理
    • RAG 存量数据清理
    • Agent 开发
    • Agent 运行时深水区
    • Multi-Agent 协作
    • Agent 评测与线上运营
    • AI 与游戏研发周期
    • 互动影游与长视频创作 Agent
    • LLM 应用安全
    • LLM 评测方法论
    • LLM 成本与延迟
    • 微调策略
    • AI 研发工程化

AI 研发工程化:规范、知识库与企业级选型

企业级代码仓库维护(含存量)· Spec 驱动 · Skill 库 · 代码知识图谱 · 经验演化 · evomap 解剖 · 企业落地选型

📌 本篇主线(怎么读)

全篇围绕一个企业最痛的问题组织——AI 时代怎么维护一个有百万行存量、多人协作、要长期演进的企业级代码仓库。四层工程化栈(意图/方法/理解/经验)都是为这个目标服务的手段;其中「理解层」(让 agent 读懂存量代码)是重中之重,「经验层」的代表 evomap/evolver 会被单独解剖并给出生产价值判断。

🗺️ 阅读地图 + 选型决策树

本篇是"企业级 AI 研发工程化落地"专篇,不重复讲 LLM/Agent/RAG 基础原理——那些见姊妹篇:LLM 原理 · Agent 开发 · RAG · 成本与延迟 · 应用安全 · 评测方法论。Agent 的实现层与运营层另有深潜:Agent 运行时深水区 · Agent 评测与线上运营;本篇讲的代码侧工程化在游戏研发周期里的位置见 AI 与游戏研发周期。

全篇脉络:四层栈(意图/方法/理解/经验)→ 存量代码怎么建库(三索引)→ 可复用组件选型 → 企业工程规范全景 → evomap 生产价值判断 → 参考架构 + 三面基建 + 可观测方向。

先用决策树定位你在哪一步:

  • 是 demo 还是生产?生产才需要私有化 + 审计回滚 + 人工闸门 + 权限隔离 + 度量闭环。
  • 要解决意图漂移→ OpenSpec;流程不可复现→ Skill;读不懂存量代码→ CodeGraph;经验无法沉淀→ evomap(但先看它的生产价值判断,别盲上)。
  • 补知识用 RAG 还是微调?高频事实/私域→ RAG;固定风格/能力内化→ 微调(详见 微调策略)。
  • 用现成 Agent 框架还是自研?先现成、被卡了再自研。

🧠 一句话记忆锚点

「AI 会写代码」≠「AI 能做工程」,中间隔着四层规范化:意图层(OpenSpec 把需求固化成可评审 spec)→ 方法层(Superpowers/Skill 把流程固化成可组合能力)→ 理解层(CodeGraph 把存量代码预建成结构图谱)→ 经验层(evomap/Evolver 把经验演化成可继承资产)。Skill 是「人写的静态说明书」,evomap 是「agent 自动演化的经验基因」,后者把前者当输入蒸馏(skill2gep)。企业级落地的红线不是「接哪个网络」,而是私有化 + 审计回滚 + 人工闸门 + 权限隔离 + 度量闭环。存量代码建库靠「结构图谱 + 语义向量 + 精确引用」三索引混合,可复用组件按「确定性→脚本/工具、判断类→skill、跨系统→MCP、经验→memory/gene」分层选型。基建全景分三面:控制面(spec/skill/MCP 注册 + 护栏 + 租户隔离)、数据面(模型网关 + 知识库 + 经验库 + 语义缓存)、可观测面。可观测正从「请求级 APM」转向「轨迹级 + eval 驱动」,最该追的标准是 OpenTelemetry GenAI 语义约定(gen_ai.*,含 agent/tool/mcp span,仍 Development)。

名词速查

首次阅读可跳过本表,直接看「场景问题」,遇到生词再回查。

本篇是工程化与可观测这一组名词的归属页。这一组词回答的是"怎么把 AI 写代码这件事变成可管的工程"——对应到你熟悉的东西就是:需求评审、SOP、代码索引、经验沉淀、APM、平台化。

篇幅较长,按 spec 拆两张表。

本篇自有名词

名词后台类比在系统里干什么类比失效边界
OpenSpec需求评审 + ADR(架构决策记录)——先把要做什么写成可评审的文档,再动手把意图固化成 spec 与 change 制品(proposal/design/tasks),让 AI 的产出有可验收的基准常规需求文档只约束人,落地全靠人执行;这里 spec 是给模型的输入,写得含糊模型就自由发挥。而且 spec 与实现的漂移没有编译器能检测——只能靠 Scenario 人工验收(本次改动就是一个实例)
Skill固化的 SOP / runbook——人写的操作手册,遇到这类事就按它做把可复用的工作流程写成静态说明书,触发时载入,替代"每次重新交代一遍"runbook 由人读、人判断是否适用;Skill 是模型自己决定要不要用——它可能不触发(描述写得不够贴合)或误触发。而且它是静态的:不会从执行结果里自动学到东西,这正是 evomap 那类经验层要补的缺口
CodeGraph代码索引 / 调用图数据库——像 IDE 的"查找所有引用"但预建成图把存量代码预先解析成符号与调用关系图谱,让模型能一次拿到"相关代码 + 调用路径",而不是靠 grep 试探IDE 索引精确且随编辑实时更新;预建图谱会随代码变更过期,且跨语言/动态调用/反射这些边它建不出来。所以它是"大幅提高命中率"的工具,不是完备的事实源
evomap / Evolver从故障复盘里自动提炼出规则并入库——经验的持续集成把执行过程中的经验演化成可继承的资产("基因"),让下次遇到相似问题时直接复用复盘产出的规则由人审核过、语义明确;自动演化出的经验没有人审这一关,可能沉淀下错误的教训并持续复用(错误固化)。所以经验库必须可审计、可回滚、可失效——不能只增不减
Skill 与经验演化的分工人写的规范 vs 自动挖掘的经验——一个自上而下,一个自下而上Skill 是「人写的静态说明书」,evomap 是「agent 自动演化的经验基因」,后者可把前者当输入蒸馏(skill2gep)规范与挖掘出的最佳实践通常互相印证;这两者可能冲突(人写的规范说 A,演化出的经验说 B),且没有裁决机制。实践上必须明确"人写的规范优先",否则经验层会悄悄覆盖掉有意为之的约束
三索引混合(存量代码知识库)三种索引各管一段:结构索引(图谱)+ 语义索引(向量)+ 精确索引(符号引用)存量代码建库的标准配方:结构图谱管"谁调谁"、语义向量管"哪段代码干这事"、精确引用管"这个符号在哪定义"数据库多索引由优化器自动选择、结果一致;这里得由你(或 Agent)决定用哪个索引,选错就查不到——问"哪里处理超时"该走语义索引,问"这个函数被谁调用"该走结构索引。混合不等于自动最优
可复用组件的分层选型按确定性分层:确定的写成脚本、要判断的写成规则、跨系统的走接口、经验的入库落地判据:确定性 → 脚本/工具;判断类 → skill;跨系统 → MCP;经验 → memory/gene常规分层由技术属性决定,边界清晰;这里"这件事确定不确定"是个模糊判断,且会随业务演进变化(今天需要判断的,明天规则清楚了就该降级成脚本)。分层需要定期重估,不是一次性归类
控制面 / 数据面 / 可观测面就是你熟悉的三面划分:管控与注册 / 实际流量 / 监控告警AI 基建全景:控制面(spec/skill/MCP 注册 + 护栏 + 租户隔离)、数据面(模型网关 + 知识库 + 经验库 + 语义缓存)、可观测面语义高度一致,这是本表最贴近后台原物的一组。差别在数据面多了两个有状态且会污染的组件——知识库和经验库。它们不像缓存那样"清了重建就行",被污染后需要审计溯源,见 RAG 存量清理
gen_ai.* 语义约定OpenTelemetry 的语义约定——统一属性命名,让不同厂商的埋点可互通OTel 为 GenAI 定义的标准属性与指标(含 agent / tool / mcp span 类型)。站内属性清单只在本篇展开常规 OTel 约定已稳定、各 SDK 实现一致;gen_ai.* 仍处于 Development 状态——属性名还在改,各家 SDK 实现不齐。所以务实做法是自己定一层常量映射,别把属性名字面量散落在业务代码里,将来改名只动一处
轨迹级可观测从请求级 APM 升级到全链路追踪 + 业务断言观测重心从"单次请求的耗时与错误"转向"整条轨迹的合理性 + eval 驱动的质量指标"请求级 APM 的健康判据明确(错误率、延迟);轨迹级的核心问题是"跑完了但答得不对"根本不产生任何错误信号。所以可观测必须与评测耦合(eval 驱动),单靠 APM 指标看不出质量退化。轨迹判分与归因见 Agent 评测与线上运营
平台化三级台阶工具 → 流水线 → 平台的演进(跟内部效能建设的路径一致)研发平台的三级台阶及各级进入判据:先有能用的工具,再串成可复现的流水线,最后做成多团队自助的平台常规平台化的进阶判据是用量与稳定性;这里多一条前置门槛——没有可信的度量口径就不该进入平台级,否则你无法回答"这个平台到底有没有用"。度量先行,是这条路径与常规平台化最大的不同
代码索引三兄弟:LSP / SCIP / LSIF就是 IDE"跳转到定义"背后那套东西——LSP 是实时问答的协议,SCIP / LSIF 是把答案预先算好存成文件给"跨仓精确跳转"提供底座:LSP 要跑一个语言服务器实时应答;SCIP / LSIF 是离线索引格式(SCIP 较新、更紧凑),CI 里生成一次,供后续查询IDE 里跳转永远是最新的(编辑即重算);预生成的索引是快照,代码一改就过期,且只覆盖构建成功的语言与目标——生成失败的模块在图上直接是空白,而查询方看不出"这里是没有还是查不到"
供应链安全三件套:SAST / SCA / SBOM你 CI 里已经跑着的那几个卡点:扫自己写的代码、扫引入的依赖、出一份物料清单AI 产出进主干前的既有工程卡点:SAST 扫自研代码的漏洞模式、SCA 扫第三方依赖的已知漏洞、SBOM 记录"这个产物由哪些组件构成"以备事后追溯三者对人写的代码是成熟手段,规则库覆盖常见漏洞;面对 AI 产出多一层难处——模型会引入看起来合理但根本不存在的依赖包(包幻觉),这类风险 SCA 查不到(库里没这个包就无从比对),只能靠依赖白名单与安装期校验拦
PII(个人可识别信息)就是你做数据合规时脱敏的那些字段:手机号、身份证、住址AI 链路里的一类护栏对象:既要防它进 prompt(一进上下文就可能被复述到日志或输出),也要在产出侧做检出数据库脱敏有明确的字段边界,脱敏一次即生效;这里 PII 藏在自由文本里,靠正则与模型检出都会漏——且一旦进过上下文,它可能出现在任何下游(日志、缓存、评测集)。所以是"从源头不让进",而非"事后清理"
A2A(Agent-to-Agent)服务间调用协议——只是这次两端都是 Agent一类让不同 Agent / 平台互相调用与交换资产的协议约定(本篇语境下走 HTTP + JSON)常规服务间调用的两端都是你可控、可信的代码;A2A 拉来的外部资产是不可信输入——它可能携带被注入的指令。所以外部资产必须进隔离候选区、经人工审查才能提升,不能直接进经验库
GDI(Genetic Desirability Index)内部资产的综合评分排序——像给组件库里的组件按"该不该推荐用"打个分evomap 语境下给演化出的"基因"资产排序的加权指标:内在质量 + 使用指标 + 社会性指标加权求和组件评分的各项指标口径客观(下载量、issue 数);这里的加权系数是拍出来的,且"内在质量"本身要靠模型评判——分数看起来精确到小数点,实质是一个可调的偏好表达。别把它当客观度量用于考核
采纳率 / 返工率 / 事故归因效能度量三件套——但口径定义比数字本身重要得多AI 产出的可算度量:采纳率(生成的有多少被用了)、返工率(用了之后又被改回去多少)、事故归因(线上问题里有多少源自 AI 产出)常规效能指标口径相对客观(提交数、缺陷数);这三个指标的口径极易被做漂亮——"采纳"算到哪一步(合进分支?还是没被回滚?)会让数字差好几倍。所以必须先冻结口径定义再采集,且三个指标要一起看:只看采纳率会鼓励"生成大量凑数改动"

本篇引用的其他上下文名词

名词在本篇里的角色完整解释去哪读
span 树 / 步级归因 / 成功率分母 / 回放 / 影子 / 灰度可观测面的下游消费者,判分口径归评测运营篇Agent 评测与线上运营 · 名词速查
Agent Loop / MCP / Function Calling / CodeAct控制面注册与治理的对象Agent 开发 · 名词速查
语义缓存 / 模型网关 / token 经济 / 预算护栏数据面的成本组件成本与延迟 · 名词速查
文本 Embedding / 向量索引 / 三索引里的语义索引存量代码知识库的检索底座RAG · 名词速查
陈旧向量 / 版本切换知识库与经验库的污染治理RAG 存量清理 · 名词速查
权限最小化 / 租户隔离 / 人工闸门控制面护栏的安全要求LLM 应用安全 · 名词速查 | Agent 运行时深水区 · 名词速查
Golden Set / LLM-as-judgeeval 驱动可观测所依赖的评测基线评测方法论 · 名词速查

场景问题

从「AI 写代码」到「AI 做工程」之间的三个断层

Demo 里让模型写个函数很爽,但一放进真实工程就崩,断层集中在三处:

  1. 意图漂移:需求只存在于聊天记录里,易失、不可评审。改了模型/换个 agent,上下文全丢,产出不可复现。
  2. 流程不可复现:同一个人今天让 agent 先写测试、明天忘了,质量全看当次 prompt 心情,团队无法沉淀「我们就该这么做」。
  3. 代码理解靠 grep:agent 面对百万行存量代码,只能反复 grep + read,既慢又不准,回答不了「改这个函数会炸哪些地方」这种结构性问题。

对应地,业界这两年沉淀出四个不同抽象层次的工程化实践——它们不是竞品,是可以叠起来用的一条栈:

层次解决的断层代表工具一句话本质
意图层意图漂移OpenSpec写码前把「做什么」固化成可评审的 spec
方法层流程不可复现Superpowers / Agent Skills把「怎么做」固化成可组合的 skill 流水线
理解层靠 grep 读代码CodeGraph把「代码长什么样」预建成结构化知识图谱
经验层经验无法沉淀/继承evomap / Evolver把「踩过的坑」演化成可继承的经验资产
意图层 · OpenSpecproposal / specs / design / tasks —— 需求变成可评审、可版本化、可重喂的产物方法层 · Superpowers / Skillmarkdown + frontmatter + 脚本,渐进式披露三层,子 agent 组合成流水线理解层 · CodeGraphtree-sitter → 符号/边 → SQLite+FTS5 → MCP 查询(callers / impact / context)经验层 · evomap / EvolverGEP 协议:把经验编码成 Gene / Capsule,git 回滚 + 可跨 agent 继承越往下越「活」:文档→图谱→自我演化

实现方案

核心命题:企业级代码仓库怎么维护(含存量)

下面四层工具(OpenSpec / Skill / CodeGraph / evomap)单独看是散点,串起来才是答案。真实企业仓库有三个特征——存量巨大、多人协作、长期演进,对应三件必须做对的事,先建立全局观再看细节:

一句话:改代码前先用理解层看清影响面(不炸),改的时候用意图层+方法层保证可评审可复现(不乱),改完把为什么沉淀进经验层(不重复踩坑)。存量维护的胜负手在②——这是本篇后面重点展开的部分。

一、OpenSpec —— 规格驱动(Spec-Driven Development)

  • 出处:Fission-AI,github.com/Fission-AI/OpenSpec。纯文件 + CLI,不需要 API key / MCP,本项目 openspec/ 目录用的就是它。
  • 核心思想:不做「技术沙箱」约束,而是 用产物约束(constraint by artifact)——agent 必须先产出并对齐 spec,再照着 spec 执行。

变更生命周期(三段):

目录结构与 delta 机制(关键设计):

openspec/
├── specs/                 # 项目「真理源」——当前系统应该是什么样
│   └── <capability>/
├── changes/
│   └── <feature-name>/    # 一次变更,只存「相对增量 delta」
│       ├── proposal.md    # 为什么改
│       ├── design.md      # 技术方案
│       ├── tasks.md       # 实现清单(agent 逐条勾)
│       └── specs/         # 本次变更对真理源的 delta
└── changes/archive/
    └── 2026-07-13-<name>/ # 归档:delta 已 sync 进 specs
  • 每次变更只写 delta(增量),不重写全量 spec;archive 时才把 delta 折叠进 specs/ 真理源,sync 可在不归档的情况下先同步。
  • 这让 spec 始终是「活文档」:可追溯每次改了什么、为什么改,且能重新喂给任意 agent 复现。
  • 对应本项目可用的 skill:openspec-propose / apply-change / archive-change / sync-specs(及 opsx:* 变体),1:1 映射上面三段。

落地要点

OpenSpec 的杀伤力在于把评审左移:人只需在 propose 阶段 review 一次 spec,后面 agent 的所有代码都在 spec 约束内,review 成本从「读 800 行 diff」降到「读 1 页 spec」。

二、Superpowers —— 方法论即 Skill 库

  • 出处:Jesse Vincent(obra)/ Prime Radiant,github.com/obra/superpowers,通过插件市场安装(Claude Code / Cursor / Copilot CLI 等)。
  • 定位:一整套「先想清楚再动手」的软件开发方法论,落在一组可组合的 skill 上。

强制的 7 段流水线:

① 头脑风暴(校验想法) → ② git worktree(隔离分支) → ③ 计划(拆成 2~5 分钟粒度任务)
→ ④ 实现(子 agent 审查) → ⑤ TDD(强制 RED-GREEN-REFACTOR) → ⑥ 代码评审(对齐 spec) → ⑦ 收尾合并

Skill 的实现机制(理解后面 evomap 对比的关键,也是 Anthropic Agent Skills 官方规范):

  • 每个 skill = 一个带 YAML frontmatter 的 SKILL.md + 可选脚本/资源目录:
---
name: brainstorming
description: 在动手前把模糊想法收敛成可执行方案;当用户说"我想做…"但需求不清时触发
---
# Brainstorming
(正文:步骤、检查清单、示例……命中后才加载)
  • 渐进式披露三层(progressive disclosure)——这是 skill 能规模化而不撑爆上下文的核心:
    1. name + description 常驻系统提示,供模型判断「这个 skill 何时该用」;
    2. 命中后才加载 SKILL.md 正文;
    3. 需要时再加载 reference.md 等附件(因此可捆绑的上下文「近乎无限」)。
  • 脚本作为工具执行:确定性强的部分写成脚本让 Claude 执行(而非读进上下文),保证可靠性与省 token。
  • 组合 + 子 agent:高阶 skill 调用低阶 skill,用子 agent 委派离散步骤(如「让一个子 agent 专门做代码评审」)。

三、CodeGraph —— tree-sitter 代码知识图谱

  • 出处:与本项目 codegraph_* 工具签名最吻合的是 colbymchenry/codegraph(工具名、.codegraph/codegraph.db、"只暴露 explore 保持 MCP 精简" 的设计都对得上)。
  • 要解决的问题:让 agent 回答 grep 回答不了的结构性问题——「谁调用了 X」「改 Z 会炸哪些地方」。

四步流水线:

  • 解析:tree-sitter 支持 30+ 语言,用语言特定 query 抽出节点(symbol)和边(edge)。
  • 存储:本地 SQLite + FTS5 全文索引,符号查找亚毫秒级,完全离线无外部 API。
  • 引用解析:把 调用→定义、导入→源、继承链连起来(还能识别 web 路由等框架模式)——这是纯文本 grep 做不到的。
  • 自动同步:OS 原生文件监听 + 防抖(500ms2s)增量重建,索引始终跟得上代码。

使用纪律(本项目 CLAUDE.md 已内化)

结构问题(谁调谁、改了会炸哪)用 CodeGraph;字面文本(字符串内容、注释、日志)才用 grep。信任 AST 结果、不要 grep 二次校验,那更慢更不准还费上下文。

四、evomap / Evolver 深度解剖 —— 它到底是什么

打个比方:它想做的事,相当于给团队建一个自动生长的故障复盘库——每次踩坑后不用人写 wiki,系统自己把"这次为什么炸、下次怎么避"提炼成一条可检索的经验,下回遇到相似场景自动带出来。类比失效边界:人写的复盘过了审,语义明确、责任清楚;自动演化出的经验没有人审这一关——它可能沉淀下一条错误的教训,然后持续复用(错误固化),而且越用越"确信"。所以这类系统的成立条件不是"能不能自动提炼",而是能不能审计、能不能回滚、能不能让一条经验失效。

这是本篇要重点"解剖 + 揭秘"的对象。先给一句最容易被营销话术掩盖的本质判断:

一句话戳破

Evolver 不是"能自己改代码进化的 AI",它本质是一个「提示词生成器 + 经验资产的版本化账本」。 README 原文白纸黑字:"Evolver is a prompt generator, not a code modifier"——它扫日志、选一个经验模板、拼出一段受协议约束的提示词打到 stdout,改不改代码由宿主运行时(如 OpenClaw)或人决定。理解了这点,后面所有"进化/基因/继承"的比喻都能还原成朴素的工程动作。

  • 出处:EVOMAP PTE. LTD.(新加坡,© 2026);开源引擎 Evolver(@evomap/evolver,github.com/EvoMap/evolver,早期 MIT→现 GPL-3.0)。背后论文 arXiv:2604.15097。
  • 要解决的真问题:手改 prompt、堆 skill 文档,是稀疏、不稳定、无法审计、无法跨 agent 继承的经验载体。改了个 prompt 变好了,说不清好在哪、也没法安全回滚、更没法传给别的 agent。

数据模型:Gene / Capsule / EvolutionEvent(生物学包装下的朴素三件套)

剥掉生物学话术,就是"经验的三张表":

概念生物学包装朴素工程翻译实际内容
Gene(基因)可遗传的策略基因一个带前置条件和校验命令的策略模板五类:repair/optimize/innovate/regulatory/explore;含 preconditions、constraints、validation 命令数组
Capsule(胶囊)完整遗传信息包一次被验证过的具体修复方案触发信号 + 置信度 + blast radius + 环境指纹 + 真实 code diff + 策略步骤;内容须 ≥50 字符(防空壳)
EvolutionEvent基因突变记录一条不可篡改的审计日志intent + 试过的 mutations + outcome,events.jsonl 追加写

再套一个 GDI(Genetic Desirability Index) 给资产排序:内在质量 35% + 使用指标 30% + 社交信号 20% + 新鲜度 15%——说白了就是个带权重的推荐排序分。

一个进化周期到底干了什么(4 步,全是确定性动作)

逐步拆解:

  1. 扫日志:读 memory/ 里的运行历史,提取错误模式、成功率等 signals(这步就是日志分析)。
  2. 选模板:Selector 从本地 .evolver/gep/genes.json / capsules.json 里匹配最合适的经验资产,输出可审计的选择决策 JSON。
  3. 拼提示词:按 GEP 协议组装出一段严格约束的提示词,打到 stdout 就退出——独立模式下到此为止,什么都没改。
  4. 记账:把这次 intent/mutation/outcome 追加进 events.jsonl 审计日志。

三条真正扎实的工程约束(这才是它值得学的地方)

营销词很虚,但底层几个约束确实是好工程:

  • git 强依赖:必须在 git 仓运行,用 git 做回滚、算 blast radius、solidify 固化。非 git 目录直接报错退出——把"经验变更"纳入版本控制,这个直觉很对。
  • validation 命令白名单(isValidationCommandAllowed):Gene 的校验命令只允许 node/npm/npx 开头,禁止反引号/$(...)命令替换、禁止 ; & | > < shell 操作符、单命令 180s 超时、限定仓库根目录为工作目录——防任意命令执行,安全模型是认真做的。
  • 稳定性优先熔断:近期错误率高时强制进入 repair 模式、暂停 innovate;单进程锁防 fork 炸弹;外部资产(A2A 拉来的 Gene)进隔离候选区,提升前必须人工 --validated 审查。

与宿主运行时的关系("进化"发生在哪)

模式行为会改代码吗
evolver(独立)生成提示词 → stdout → 退出否,纯文本
evolver --review人工逐步审查、手动应用人决定
在 OpenClaw 内宿主解释 stdout 里的 sessions_spawn(...) 指令宿主决定
evolver --loop守护进程跑后台自维护(validator/worker/solidify)否,且 stdout 被自己消费

关键:所谓"自我进化"从来不是引擎自己动手,而是引擎产出指令、宿主/人执行、git 兜底回滚——它是"进化的编排者与账本",不是"进化的执行者"。

EvoMap Hub 与 A2A:把经验做成网络(争议最大的一层)

  • 可选连 EvoMap Hub,通过 A2A(agent-to-agent,HTTP+JSON)协议跨 agent 发布/拉取/继承 Gene——口号 "one agent learns, a million inherit"。
  • 配套 skill2gep:把任意 Skill 蒸馏成 Gene/Capsule——即它把 Skill 当输入原料(所以下文说 Skill 是 Gene 的低阶形态)。
  • 但 Hub 层堆了一大套重机制:Credits 代币经济、AI Council 自治治理(投票/否决)、Arena 竞技评分、Swarm 多 agent 协作、DID 身份 + reputation……这些离"帮企业维护代码仓库"已经很远,更像一个 to-C 的 agent 社交/激励网络。

可信度提示(务必打折)

star 数(~8.9k)、"CritPt 9.1%→18.57%""45 场景 4590 次对照实验""省 token"等均为项目方自述/营销口径,论文(arXiv:2604.15097)正文数字未经独立复核。且项目自曝抄袭纠纷(指同赛道 Hermes 系统高度相似)后从完全开源退到 source-available / 许可证收紧。以下对「思想」与「具体产品」严格区别对待。

为什么这么做

Skill 与 evomap 的本质区别

先给结论:二者不在同一抽象层,且 evomap 被明确定位成对 Skill 范式的「替代/超越」来打。

  • Skill = 静态能力说明书:人写好的 markdown + 脚本,描述「遇到这类任务按这个流程做」。文档导向、靠人维护、用了也不会变。
  • evomap = 演化式经验资产:从运行经验里自动提炼、可自我改进、可跨 agent 网络继承。
维度Skillevomap(Gene)
载体人写的 markdown 文档编译出的紧凑「基因」表示
谁维护人手工写/改agent 从运行经验中自动演化
是否自我改进否(静态)是(test-time evolution)
共享方式复制文件网络继承(Hub / A2A 协议)
与彼此关系evomap 的输入原料用 skill2gep 把 Skill 蒸馏成 Gene
论文主张「信号不稳、稀疏」「紧凑表示控制信号更强、效果更好」

一句话记法:Skill 是「写死的招式」,Gene 是「打完架自己会长本事、还能传给别的 agent 的肌肉记忆」;而 Skill 是 Gene 的低阶形态。

⭐ 核心:企业级存量代码仓库怎么维护

企业最大的资产(也是最大的负债)是百万行存量代码。「让 AI 维护存量」和「让 AI 写新代码」是两个难度量级——新代码 agent 从零生成即可,存量代码 agent 首先得"读懂"它,尤其读懂"改一处会牵连哪些地方"。这一节把它拆成"三步走 + 三索引 + 选型 + 反模式"。

存量维护的三步闭环:定位 → 影响面 → 安全改

打个比方:这一整节就是你改存量时早已在做的依赖分析与影响面评估——动一个函数签名前,先用 IDE 的"查找所有引用"把调用方捞全,再判断哪些调用点会跟着炸,最后才动手并补测试。AI 的处境和你完全一样,区别只在于它没有 IDE,默认只能 grep。类比失效边界:IDE 的引用查找是编译器级精确的,查出来就是全部;这里的图谱是预先解析出来的静态快照——代码一改就过期,反射、动态分发、配置驱动的调用它建不出边。所以影响面清单只能提示风险,不能证明没有风险:图上干净不等于改了不炸,动态行为仍要靠测试与日志佐证。

真实场景:接到一个"给下单接口加个风控校验"的需求,面对百万行陌生代码,AI(和人)都要走这三步:

  • ① 定位:模糊需求("哪段做鉴权")走语义向量;已知符号名走 SCIP 精确跳转。
  • ② 影响面分析(最关键):改一个函数/字段前,用 CodeGraph 的 callers/impact 逆向查出所有调用方、继承链、跨文件引用——这是纯 grep 永远做不到的,也是"AI 敢不敢改存量"的分水岭。
  • ③ 安全改动:在影响面清单约束下改,配合 Skill 的 TDD 流水线补测试、CI 回归。
  • ④ 沉淀:把"为什么这么改"写进 ADR / 经验库,下次同类改动直接复用。

三种互补索引(code 版 GraphRAG)

让 agent 真正「懂」存量,靠三种互补索引,实战里混合用:

索引类型回答什么技术代表方案精度/成本
结构图谱谁调谁、改了炸哪、继承链tree-sitter → 符号/边 → 图/SQLiteCodeGraph、Sourcegraph高精度、低成本、离线
精确引用跨仓精确「定义/引用」跳转LSP / SCIP / LSIF 索引Sourcegraph、scip-* 系列最精确、需编译期信息
语义向量「哪段代码做鉴权」这类模糊意图代码 embedding + 向量库LlamaIndex/Chroma、Cody召回模糊需求、有幻觉风险

三者各管一段,缺一不可:向量解决"从自然语言找到代码"(入口模糊),SCIP 解决"精确定位定义/引用"(点对点),结构图谱解决"这个改动的爆炸半径"(面)。只有结构图谱能回答影响面——所以它是存量维护的主干,另两者是辅助。

落地流程(推荐组合):

选型决策:

  • 中小仓 / 单语言 / 要快:直接上 CodeGraph(tree-sitter + SQLite,零基建、离线、亚毫秒)。本项目就是这个档位。
  • 大型多仓 / 多语言 / 要精确跨仓跳转:Sourcegraph + SCIP/LSIF,编译期精确引用是它的护城河。
  • 需求模糊、要"找一段做 X 的代码":加语义向量层(code embedding,如 CodeBERT/嵌入模型 + Chroma/pgvector),但务必用结构图谱校准幻觉。
  • 反模式:只做「全代码丢进向量库做 RAG」——代码的价值在结构关系(调用/依赖),纯向量丢掉了边,agent 会「看得懂片段、算不清影响面」。结构图谱是主干,向量是补充。

沉淀经验:知识库不只是代码

存量代码知识库 = 代码结构图谱 + 语义向量 + 沉淀文档(ADR/wiki/事故复盘)。前两者机器建,第三者是人 + agent 持续沉淀的「为什么这么设计」——这部分恰好是 OpenSpec 的 spec 和 evomap 的 Gene 想固化的东西。

代码图谱能做什么:从 CodeGraph 到 Graphify

上面讲的三种索引里,结构图谱是存量维护的主干。它到底能做什么?以开源工具 Graphify(YC S26,tree-sitter + 知识图谱,非向量)为例,结构图谱的能力边界一目了然:

能力做什么为什么 grep/向量做不到
跨文件边解析calls/imports/inherits/mixes_in 跨 ~40 语言解析grep 只匹配字面文本;向量丢结构边
最短路径查询graphify path "FastAPI" "ModelField" → 3 hop 路径需要图遍历算法(BFS/Dijkstra),非文本匹配
God node 检测找最高连接度的节点——系统瓶颈/单点需要图的 degree 统计
社区发现Leiden 算法把图切成子系统需要图聚类,纯文本/向量无社区概念
边置信度标注每条边标 EXTRACTED(源码显式)或 INFERRED(推断)让 agent 知道哪些关系是确定的、哪些可能幻觉
设计理由节点# NOTE:/# WHY: 注释、ADR/RFC 引用变成一等节点把"为什么这么设计"和代码结构关联起来

Graphify 相比 CodeGraph 的进阶:

  • 零 LLM 依赖:代码解析纯 tree-sitter(确定性、离线、零 token 成本),只有 docs/PDF/images 的语义 pass 才调模型——代码图谱不需要 LLM,这是确定性的胜利。
  • 边置信度:每条边带 EXTRACTED/INFERRED 标签,agent 可以区分"源码里写死的"和"推断出来的"——这对存量维护至关重要:改 EXTRACTED 边影响面确定,改 INFERRED 边需要人工确认。
  • 社区发现自动切子系统:不用人手画边界,Leiden 算法自动发现模块聚类——对应到影响面分析,改一个 God node 波及多个社区 = 高风险改动。
  • Benchmark:LOCOMO recall@10 = 0.497(mem0 仅 0.048),LongMemEval QA accuracy = 76%,graph build LLM credits = 0。

选型谱系更新:

心法

结构图谱的价值不在"存了什么",在"能查询什么"——路径查询、社区发现、God node 检测、边置信度,这些都是 grep 和向量原理上做不到的。选结构图谱工具时,问自己:它能不能回答"改这个函数炸哪"?能回答的就是合格的图谱,不能的就只是个带索引的 grep。

CodeGraph 实战:从"找入口"到"查子图"的范式转变

上面讲的是结构图谱能做什么,现在来看实际怎么用。核心命题来自一个工程现实:

代码 Agent 真正卡住的地方,往往不是模型不会写代码,而是它不知道该先看哪里。

传统 Agent 面对陌生仓库的链路是:列目录 → 搜关键词 → 打开几个文件 → 猜入口点 → 发现不对 → 重复一轮。这个过程的根本问题是把结构性问题降级成了文本命中问题——"登录请求怎么写入数据库"需要的是路由→handler→service→repository→ORM 的关系链,不是 20 个包含 login 的文件。

CodeGraph 的四层建图链路:

Agent 工具选择表(给模型明确规则,否则它会退回 grep):

问题类型该用什么工具典型场景
"X 在哪里定义"codegraph_search查符号、函数、类
"这个功能怎么跑起来"codegraph_context围绕自然语言组装相关代码上下文
"请求如何穿过系统"codegraph_trace追踪一条执行路径或调用链
"改这里会影响什么"codegraph_impact下游影响面分析
"谁调用我 / 我调用谁"codegraph_callers / codegraph_callees直接/间接调用关系
已锁定一个符号codegraph_node → 直接读源码看结构化详情后补细节

核心原则:先结构,后细节——先用图查询锁定入口和链路,再按需读具体文件。这个顺序能显著减少 Agent 的无效探索(实测:~16% 成本节约、58% 工具调用减少、22% 速度提升)。

Resolution 层——代码图谱的真正难点:

AST 能告诉你"这里有个函数调用",但很多工程语义不写在普通调用里。Resolution 层负责补全这些框架约定关系:

框架场景文本搜索看到的图谱应该补出的关系
Express / NestJSURL 字符串、handler 名称POST /login → loginHandler
Spring / FastAPI / Django注解、装饰器Controller/route → action 方法
React / Vue / SvelteJSX、模板标签父组件 → 子组件
React Native / ExpoNativeModule、BridgeJS API → Native 实现
普通模块系统相对路径、别名import 标识符 → 真实定义

边的置信度是工程红线

框架规则覆盖到的关系是精确的;没覆盖到的动态行为(反射、运行时注入、动态加载)只能靠启发式补边。工程上必须把边的来源和置信度一并保存——Agent 回答时能区分"精确解析"和"推断结果",改 EXTRACTED 边影响面确定,改 INFERRED 边需要人工确认。这也是 Graphify 的 EXTRACTED/INFERRED 标签设计被借鉴到 CodeGraph 的原因。

索引保鲜——不要让 Agent 信过期的图:

CodeGraph 用 FileWatcher + debounce + 增量同步解决这个问题。同步完成前,MCP 工具返回结果时带上 stale 提示,告诉 Agent 哪些文件刚改过、相关结论可能过期。这个设计比"假装图永远正确"更诚实——Agent 可以继续信任未变更文件的结构结论;对刚保存的文件,直接读取源码更稳。

MCP 接入的工程要点:

  • 共享后台进程:Cursor、Claude Desktop、脚本工具连接同一个 codegraph serve --mcp 进程,避免每个客户端重复索引。
  • Skill 固化分析流程:把"检查索引状态 → 必要时初始化 → 调用 context → 按结果补查 callers/impact → 固定结构输出"封成 Skill,让非代码专家也能问结构问题,Agent 也不容易一上来就全文搜索。

CodeGraph 的局限(不能盲信的边界):

维度grep 路线CodeGraph 路线
入口发现多轮猜测,依赖命名和经验直接查符号、路由、组件节点
调用链人工跨文件追踪trace/图遍历返回路径
影响面搜调用点后手动判断impact 给出下游关系
Token 消耗容易读入大量无关源码只取相关子图和片段
动态行为覆盖同样弱,靠人继续判断静态分析仍不能完全覆盖

一句话收口

CodeGraph 不是给 Agent 更多上下文,而是给它更少、更准、更接近工程结构的上下文。 它是"结构导航仪"而非"绝对真相源"——影响面分析只能提示风险,不等于证明没有风险;动态行为、反射、运行时配置仍需测试和日志佐证。

这一节记住三句话

  1. 三步闭环里"影响面分析"是分水岭:定位可以靠语义检索凑合,但"改了会炸哪"必须靠逆向调用链——这是纯 grep 永远做不到的,也决定了 AI 敢不敢碰存量代码。
  2. 三种索引各管一段,得由你选:结构图谱管"谁调谁"、语义向量管"哪段代码干这事"、精确符号管"这个符号在哪定义"。混合不等于自动最优,问错了索引就查不到。
  3. 图谱是导航仪不是真相源。它是静态快照:代码一改就过期,反射与动态分发的边它建不出来。所以它的产出是"风险提示",不是"安全证明"。

可复用组件的方法与选型

「可复用组件」在 AI 研发里有一条从轻到重的谱系,选型看确定性和复用边界:

组件形态复用粒度何时用载体
Prompt 模板最细固定输出格式/角色字符串 / 模板文件
Tool / Function单一确定动作确定性强、需精确执行(查库、算数、调 API)代码函数
MCP Server跨 agent/跨模型一批工具要给多个 agent/IDE 复用独立进程 + 协议
Skill一套判断+流程「遇到这类任务该怎么做」的方法沉淀markdown + 脚本
Subagent一个子任务闭环需要独立上下文/角色的离散步骤(如专职评审)agent 定义
经验资产 (Gene/Memory)跨任务经验从历史里自动沉淀、可继承的「教训」演化资产 / 记忆库

选型心法:

  • 确定性动作 → 写成 Tool/脚本,别让模型「每次重想」(既贵又不稳)。
  • 判断 + 流程 → 写成 Skill,用渐进式披露,description 写清「何时触发」。
  • 要跨系统/跨模型复用 → 包成 MCP Server,一次实现处处接(本项目的 CodeGraph、ruflo 都是 MCP)。
  • 需要独立上下文的子任务 → 拆成 Subagent,避免污染主上下文。
  • 反复踩同一个坑 → 沉淀成经验资产(记忆库/Gene),让下次自动规避。
  • 黄金法则:能用确定性代码解决的,绝不留给模型即兴发挥;能沉淀成组件的,绝不散落在 prompt 里。

企业级工程规范全景:AI 只是新增的一环

打个比方:这一节讲的就是你 CI 里那一长串卡点——lint → 单测 → 覆盖率门槛 → 依赖扫描 → 人工 review → 灰度发布。AI 产出没有专属通道,它和人写的代码排同一条队、过同一道闸。类比失效边界:这套门禁是为人的失误设计的——人会写错边界条件、会漏加锁,但不会凭空发明一个不存在的第三方库。AI 会:它引入的依赖包名看着合理却根本不存在,而 SCA 查不到(库里没这个包就无从比对)。更麻烦的是第 7 维——门禁拦得住代码,拦不住"团队对系统的共享理解在悄悄流失",而那部分摩擦正是 AI 消除掉的。

前面几节聚焦"AI 相关"的工程化,但企业级仓库的规范是一整套在 AI 之前就存在、AI 之后必须适配的护栏体系。把它们拉齐成一张清单——这也是"AI 生成的代码凭什么敢合进主干"的答案:因为它和人写的代码走同一套门禁。

1. 编码规范与静态门禁(左移的第一道闸)

维度做法工具举例AI 时代的变化
格式统一自动格式化,杜绝风格 diffPrettier / gofmt / black / rustfmtAI 产出直接过 formatter,评审只看逻辑
Lint 规则强制可维护性/反模式检查ESLint / golangci-lint / clippy / ruff把团队约定写成 lint 规则,AI 也被约束
静态分析/类型编译期抓 bugTypeScript strict / mypy / 静态扫描AI 幻觉出的类型错误当场被拦
复杂度门圈复杂度、函数长度上限SonarQube / lizard防 AI 生成"能跑但没人能维护"的巨函数

心法:把"人评审时会说的话"尽量固化成机器可执行的 lint/类型规则——AI 生成量大,纯人肉 review 顶不住,必须让机器先过一遍。

2. 分支策略与提交规范

  • 分支模型:trunk-based(主干开发 + 短命特性分支 + feature flag,CI/CD 友好,主流推荐)vs git-flow(多长期分支,适合有明确发版周期的传统交付)。AI 生成的改动尤其适合 trunk-based——小步、频繁、快速合并,避免长命分支累积巨型 diff 难评审。
  • Conventional Commits:feat: / fix: / docs: / refactor: 规范化提交信息 → 自动生成 CHANGELOG、自动推导语义化版本。让 AI 也按这个格式写 commit。
  • CODEOWNERS:按目录指定负责人,PR 自动请求对应 owner 评审——AI 改到谁的地盘,谁必须 review,责任不因 AI 生成而消失。

3. 测试与质量门(AI 代码合入的硬闸)

AI 生成代码合入的红线

"AI 写的"不能成为跳过测试的理由——恰恰相反,AI 代码更需要门禁。 因为 AI 会写出"看起来对、跑起来错"的代码。合入必须过:

门禁标准说明
单元测试新增/改动代码必须带测试配合 Superpowers 的 TDD 强制 RED-GREEN
覆盖率门diff 覆盖率 ≥ 阈值(如 80%)用 diff-cover 只卡新增代码,不为存量还债
回归测试全量/关键路径 E2E 通过防 AI 改动引发影响面外的连锁故障(呼应上文影响面分析)
契约测试接口变更不破坏消费方微服务/多仓场景 Pact 类工具
变更影响回归CodeGraph impact 圈定的受影响模块重点测把结构图谱的影响面清单接进 CI

4. 安全与供应链规范(AI 时代放大的风险面)

AI 会"自信地"引入有漏洞的依赖、写出注入风险的代码、甚至幻觉出不存在的包名(被攻击者抢注 = "slopsquatting"投毒)。必须补齐:

环节规范工具
SAST代码静态安全扫描Semgrep / CodeQL / SonarQube
SCA/依赖扫描第三方库 CVE + 许可证合规Dependabot / Snyk / OSV-Scanner
密钥扫描阻止密钥进仓gitleaks / trufflehog(pre-commit + CI 双卡)
SBOM软件物料清单,供应链可追溯Syft / CycloneDX
依赖存在性校验防 AI 幻觉包名被投毒锁定 lockfile + 私有 registry 白名单
产物签名构建产物可验真Sigstore / cosign

运行时命令守卫(agent 的最后一道安全网)

上面都是静态安全门(代码合入前),但 agent 在运行时执行的命令同样需要护栏——AI 偶尔会跑出 git reset --hard、rm -rf ./src、DROP TABLE users 这类不可逆的灾难命令。开源工具 dcg(Destructive Command Guard,Rust + SIMD,亚毫秒级)专门解决这个问题:

能力做什么为什么需要
Pre-execution hook在命令执行前拦截,阻断并给出安全替代建议事后回滚来不及,rm -rf 删了就是删了
50+ 安全 Pack按域分类:core.git/core.filesystem(默认开)→ database.*/kubernetes.*/cloud.*/containers.*/cicd.*(按需开)精确匹配团队技术栈,不误报不漏报
上下文感知不拦 grep "rm -rf"(数据),拦 rm -rf /(执行)传统正则会误杀,dcg 区分"引用"与"执行"
heredoc 扫描拦截 python -c "os.remove(...)" 等内嵌脚本agent 会把破坏性逻辑藏在 -c/heredoc 里
Agent 信任等级按 agent 配置不同策略——claude-code trust=high 放宽 allowlist,unknown agent trust=low 加严 pack + 禁 allowlist不同 agent 可靠性不同,一刀切要么太松要么太紧
Fail-Open 设计超时/解析错误时不阻断安全工具不能自己变成故障源
CI scan modepre-commit + CI 集成,在代码审查阶段拦截运行时拦 + CI 静态扫 = 双保险

静态门 + 运行时门 = 双层防线

SAST/SCA/密钥扫描管"代码合入前",dcg 管"命令执行前"——两者覆盖 agent 生命周期的不同阶段。静态门拦不住运行时即兴生成的 DROP TABLE,运行时门也不该替代静态审查。企业级安全 = 左移静态门(合入前)+ 运行时守卫(执行前)+ 审计追溯(执行后) 三层。

AI 特有的一条

AI 生成的代码要走"更严"而非"更松"的安全门——因为它的错误模式和人不同(幻觉包、复制了带漏洞的训练样本),传统 review 的直觉容易漏掉。

5. 文档与知识规范(把"为什么"沉淀下来)

  • ADR(Architecture Decision Record):每个重要技术决策记一条"背景→选项→决定→后果",让半年后(或接手的 agent)知道为什么这么设计。这正是 OpenSpec 的 spec 和存量知识库里"人+agent 沉淀文档"那一层。
  • README/贡献指南/CLAUDE.md:人看的贡献规范 + 给 agent 看的仓库约定(本项目的 CLAUDE.md 就把"结构问题用 CodeGraph、字面文本才用 grep"这类纪律写进去,让每个进来的 agent 自动遵守)。
  • API/接口文档即代码:OpenAPI/protobuf 作真理源,文档从代码生成,杜绝文档漂移。

6. 发布与运维规范

  • 语义化版本(SemVer) + 自动化 release(由 Conventional Commits 推导版本、生成 CHANGELOG)。
  • 灰度发布 + 快速回滚:金丝雀/蓝绿,异常自动回滚——AI 改动上线尤其要有"一键退回"的底气。
  • 全链路可观测 + 审计(见下文可观测三面):AI 参与的每一步都要能追溯、能定责。

一句话收口

企业级工程规范 = 一套从开发到运维的机器可执行护栏,AI 不是特例而是必须适配的新参与者。 判断一个团队 AI 工程化成不成熟,就看"AI 生成的代码"和"人写的代码"是不是走同一套、甚至更严的门禁——如果 AI 代码能绕过 lint/测试/安全扫描直接合入,那不是效率,是定时炸弹。

7. 协调与共识规范(AI 消除的摩擦,恰恰是团队理解的载体)

前面六维都是技术护栏,但企业级软件项目真正的瓶颈从来不是"个人写代码的速度",而是团队对系统的共享理解能不能保持一致。Armin Ronacher 在 The Tower Keeps Rising 里用巴别塔做了一个精妙的类比:

They use it [brick] for a civilizational project: let us build us a city and a tower, whose top may reach unto heaven. … the people is one, and they have all one language, and now nothing will be restrained from them.

巴别塔的力量不在于砖头,在于协调——共享语言让个体工作能组合成无人独建的东西。上帝没有没收砖头或制砖技术,而是夺走了他们理解彼此的能力,工程随即停滞。

AI 时代的巴别塔困境:agent 消除了开发间的摩擦——以前改别人的存储层要读他的代码、问他问题、跟依赖方协调,这个过程慢,但慢里有一部分不是浪费,而是"你的理解变成我的、双方确认系统仍按共识运作"的过程。现在每个人都能让 agent 在自己不理解的角落做局部改动,改动合理、测试通过、解释按需生成,但没有人需要和彼此交流,也没有人被迫学习那部分曾经被迫学习的共享模型。

核心洞察

塔不会倒,只是不断升高——我们注意不到丢了什么。 在巴别塔里,语言分裂导致停工;在 AI 辅助工程里,共享理解已经坍塌,工程仍能继续。没有即时失败,这恰恰是最危险的地方。

摩擦被消除后,必须人为补上"共识同步机制":

被消除的摩擦原来的作用AI 时代的替代机制
读别人的代码才能改被迫理解对方模块的边界和不变量CodeGraph 影响面分析 + ADR 强制记录"为什么"
跨团队协调才能改接口暴露隐式依赖、消费方否决权CODEOWNERS + 契约测试 + OpenSpec spec 评审
向同事解释改动检验自己是否真理解、暴露盲区PR 描述模板 + LLM-as-judge 审查 + 强制 design review
手动跑测试才知道炸没炸迫使改动者关注影响范围CI 回归 + CodeGraph impact 圈定模块重点测
代码评审争论共享理解在辩论中同步保留人审(AI 辅助 review 但不替代决策)+ 架构决策定期对齐会

落地实践:

  • 强制架构决策对齐:涉及跨模块/跨团队接口改动,即使 agent 能一键完成,也必须走 OpenSpec spec 评审——不是为了拦改动,是为了让共识在改动落地前同步。
  • 定期"系统漫步"(System Walkthrough):团队定期一起走一遍系统架构(CodeGraph 可视化图就是好材料),确认每个人脑子里的模型仍然对齐——agent 不会替你做这件事,因为 agent 不需要理解整个系统也能改局部。
  • PR 描述不只是给 reviewer 看的:写 PR 描述的过程本身是"强迫改动者用共享语言表达改动意图"——如果写不清楚,说明改动者自己也没真理解,这正是曾经会被摩擦暴露的盲区。
  • Guardrails 不是效率敌人:dcg 拦 git reset --hard、CodeGraph 圈影响面、契约测试守接口——这些护栏人为重建了被 agent 消除的摩擦,而那部分摩擦是共识的载体。

最终心法

企业级工程规范的第七维,是技术之外的维度:协调与共识。 前 6 维管"代码质量",第 7 维管"团队对系统的共享理解能不能在 AI 消除摩擦后继续存活"。一个团队 AI 工程化真正成熟的标志,不是 agent 能跑多快,而是塔升高的时候,所有人仍然说同一种语言。

这一节记住三句话

  1. AI 产出不需要新门禁,它走人写代码的同一套门禁——lint、分支策略、测试质量门、供应链扫描、发布规范。这正是"AI 生成的代码凭什么敢合进主干"的全部答案。
  2. AI 时代真正被放大的是供应链风险:模型会引入看起来合理但根本不存在的依赖包,而 SCA 查不到(库里没这个包就无从比对),只能靠依赖白名单与安装期校验拦。
  3. 第 7 维「协调与共识」是 AI 独有的新债。前 6 维管代码质量,而 agent 消除的那部分摩擦(讨论、PR 描述、架构评审)恰恰是团队共享理解的载体——必须用护栏人为把它重建回来。

为什么别的选择不行

🔍 揭秘:evomap 在生产环境到底有没有实际价值

这是最该冷静回答的问题。结论先行——把它拆成三层看,价值从高到低急剧衰减:

① 范式层:真价值,值得学。 它踩中的问题是真的——skill/prompt 靠人手写、不自我改进、经验无法跨 agent 沉淀。「把 agent 经验做成版本化、可审计、可回滚、可继承的资产」是确定性方向。"经验编译成紧凑表示而非长文档"在信息论上也站得住(文档是稀疏、不稳定的控制信号)。git 当审计/回滚底座的工程直觉扎实。这一层无论你用不用它的产品,思路都该吸收。

② 引擎层:有限价值,看清它只是个 prompt 编排器。 Evolver 本身不神奇——扫日志、选模板、拼提示词、记账,外加一套还算认真的 validation 白名单和稳定性熔断。它的实际产出是"更结构化的提示词 + 一本经验账本",不是"自动变强的代码"。 单机或小团队内,如果你本来就在手动攒 prompt 经验,用它做个规范化账本边际有用;但别指望它"自己把系统进化好"——真正的改动还是宿主/人做,它只是把经验组织得更规整。

③ 网络层:企业红线,生产不能碰。 Hub/A2A/Credits/AI Council/Swarm 这一整套,对企业是纯负债:

生产环境考量evomap 网络层的问题后果
数据主权Gene/Capsule 里编码着业务逻辑与内部实现,publish 到公共 Hub = 泄密核心资产外流
可审计/定责"一个学百万继承"意味着来源不可控的经验被自动摄入出事无法定责
质量闸门自动演化会放大错误经验,GDI 排序不是正确性保证错误被规模化传播
供应链风险A2A 拉取外部 Gene 含 validation 命令,虽有白名单仍是可执行入口潜在注入面
可持续性抄袭纠纷 + 许可证收紧 + 强绑自家协议/代币法律与锁定风险

最终判断(面试可直接背)

evomap 的价值是"范式启发",不是"生产工具"。 正确姿势:学它的范式(经验→可演化资产→可审计可继承),自建企业内的"经验资产层",坚决不接它的公共网络。 具体产品有数据自述、许可证收紧、生态锁定三面红旗,不值得 all-in;但"经验资产版本化"这个方向,是每个企业 AI 研发平台迟早都要自己做的一块。

企业级落地:为什么不能直接接公共网络

evomap 式「连公共 Hub、一个学百万继承」在 to-C 玩得转,在企业里是红线。企业级形态应该是自建「经验资产层」,而非接入外部网络:

企业红线为什么公共方案不行正确做法
数据主权经验/Gene 编码了业务逻辑与内部实现,是核心资产+泄密面私有化部署、走内网、不出域
可审计agent「自己改自己」不可追溯,出事无法定责保留 git-based 回滚 + blast radius + 全链路 Trace
质量闸门自动演化会放大错误经验资产入库前人工 review(类似 spec archive/sync 闸门)
权限隔离多团队共用一套经验,越权风险Skill 的 permissions/allow-deny + worktree 隔离
度量闭环无法证明「越用越准」用 CodeGraph impact + CI 结果反哺经验层

各方案不适用场景(避免误用)

  • OpenSpec 不适合:一次性脚本、探索性 spike——写 spec 的开销 > 收益。它是给「要维护、要多人协作、要复现」的正式变更用的。
  • 纯语义向量做代码库不适合:结构性问题(影响面分析)——丢了调用边,必炸。
  • evomap 自动演化不适合:强合规/高风险域(金融交易、医疗)——「自我改进」和「可审计冻结」天然冲突。
  • Skill 堆太多不适合:description 写不清「何时触发」时,模型会选错 skill,反而不如不加。

沉淀结论

企业级 AI 研发平台参考架构

┌─ 意图层  OpenSpec 式 spec 驱动     需求→proposal/specs/design/tasks,评审左移
├─ 方法层  私有 Skill 库             团队标准流程,渐进式披露 + 权限/worktree 隔离
├─ 理解层  CodeGraph + 向量 + SCIP   存量代码三索引混合,MCP 统一暴露
└─ 经验层  自研经验资产(非公共网络)  从 CI/PR/事故沉淀,人工闸门 + git 回滚 + 度量闭环
                    ↑ 全链路 Trace(OpenTelemetry)串起可观测与审计
  • 今天就能进企业:OpenSpec / Superpowers-Skill / CodeGraph(成熟、开源、可私有化)。
  • 蓝图先学后建:evomap 提供的「经验演化层」思想值得研究,但企业应自研而非依赖它的网络。

基建全景视野:控制面 / 数据面 / 可观测面

上面那张四层栈是「用什么」,真正做平台还要回答「底座有哪些」。借用云原生的分面思路,AI 研发基建可拆成三个面——这是评估自研平台成熟度的骨架:

控制面 Control Plane —— 「规则与编排」Spec 仓库OpenSpec 真理源Skill 注册中心版本/权限/发现MCP 网关/注册工具统一接入护栏 + 租户隔离policy/权限/worktree数据面 Data Plane —— 「知识与执行」模型网关/路由多模型/fallback/限流代码知识库图谱+向量+SCIP经验资产库memory/gene语义缓存省 token/延迟可观测面 Observability Plane —— 「度量与反馈」Trace/MetricsOTel gen_ai.*评测 Eval离线回归+在线 judge成本治理token/费用/预算审计/合规可回滚+定责横切:CI/CD 集成(spec/skill/eval 纳入流水线闸门) · 全链路 Trace ID 贯穿三面
面组件作用选型落点
控制面Spec 仓库需求真理源,评审左移OpenSpec
Skill 注册中心方法沉淀 + 版本/权限/发现Agent Skills 规范 + 私有 registry
MCP 网关/注册工具/资源统一接入、鉴权、审计MCP + 网关(限流/allow-deny)
护栏 + 隔离危险动作闸门、多租户隔离policy 引擎 + worktree/沙箱
数据面模型网关/路由多模型、fallback、限流、灰度LiteLLM / 自研网关
代码知识库让 agent 读懂存量代码CodeGraph(图谱)+ 向量 + SCIP
经验资产库沉淀可复用教训、可继承私有 memory / gene(非公共网络)
语义缓存省 token 与延迟语义相似命中缓存
可观测面Trace/Metrics/Logs轨迹级可观测OTel GenAI(见下)
评测 Eval离线回归 + 在线 LLM-as-judgeLangfuse/Phoenix 等
成本治理token/费用/预算熔断按 span 归集成本
审计/合规可回滚、可定责git 回滚 + 全链路 Trace

基建视野一句话

控制面管「规则」、数据面管「知识与执行」、可观测面管「度量与反馈」,CI/CD 把三面串成闭环。 大多数团队只建了数据面(接个模型、堆点向量库)就上线,控制面(spec/skill/护栏)和可观测面(trace/eval)缺失——这正是「Demo 能跑、生产就崩」的根因。

Agent 平台化的组织与度量

上面那张三面表是技术视角的全景。但一个真实问题是:三面不是一次建成的,而且建到什么程度算够,取决于组织规模而非技术理想。这一节补两件工程之外的事——什么时候该从工具走向平台,以及AI 产出怎么被算清楚。

三级台阶与各自的进入判据

台阶形态进入判据(满足才该往上走)典型代价
① 工具个人装 CLI / IDE 插件,各用各的 prompt 与配置默认起点。团队 <10 人、或还在验证「AI 到底有没有用」无法沉淀,每人重复踩同样的坑
② 流水线共享的 skill / spec 模板 + CI 里跑的 AI 检查,配置进仓库出现同一个坑被两个人分别踩过,或有了必须全员遵守的流程(如 spec 先行)需要有人维护模板;配置漂移
③ 平台统一模型网关 + 知识库 + 护栏 + 度量看板,多团队租户隔离出现跨团队的共享需求(同一份存量代码知识库多团队查)、合规要求(审计谁问了什么)、或成本失控需要集中治理专职团队(通常 2~5 人);平台自身成为瓶颈风险

三条注意:

  • 不要跳级。没经过②直接建③,会建出一个没人用的平台——因为你还不知道该固化哪些流程。
  • 判据是"痛点出现"而非"规模达到"。20 人团队若各自独立项目、无共享代码,停在②完全合理。
  • ③ 的成立前提是有人专职维护。兼职维护的平台会在第一次模型 API 变更时腐化,然后所有人绕过它——比没有平台更糟,因为它还在消耗信任。

AI 产出的三个可算度量

「AI 提效 30%」这类数字在多数团队是拍的。三个能真正算出来的口径:

指标定义与统计口径为什么它可信
采纳率被合入主干的 AI 产出行数 / AI 产出总行数。统计口径要点:以合并到主干为准而非"接受了建议";分母含被整段丢弃的产出;按仓库/语言/任务类型分组看它是行为数据不是问卷。人会高估自己省下的时间,但不会假装合并了一个 PR
返工率AI 产出代码在 N 天内被修改的比例 / 人工产出的同期比例。N 取 14~30 天;只统计同一功能范围内的修改,排除重构与需求变更它抓的是采纳率的反面——采纳率高但返工率也高,等于把审校成本推迟到了以后
事故归因根因涉及 AI 产出的事故数 / 总事故数,与「AI 产出占代码总量的比例」对比前者显著高于后者,说明质量闸门不够;两者相当,说明 AI 产出的风险已被现有流程消化

三个一起看才有意义:单看采纳率会激励"生成能被合并的琐碎代码";采纳率 + 返工率能识别"合了但一直在改";再加事故归因才能回答"这些改动有没有在生产上咬人"。

度量的两个陷阱

  • 不要把度量变成 KPI 下发。采纳率一旦成为考核指标,立刻会被"让 AI 生成注释和样板代码"刷高。它的正确用途是团队自查趋势。
  • 绝对值没有可比性,跨团队比采纳率毫无意义(任务类型差异太大)。有意义的是同一团队的时间序列与同一任务类型的前后对比。

与游戏研发周期的接口

本篇讲的是代码侧的工程化——它对应游戏研发周期里「内容生产阶段的程序侧」这一格。同一套四层栈(意图/方法/理解/经验)在其他阶段并不适用:QA 阶段要的是可复现的断言体系、上线运营要的是持续观察与崩溃恢复、在线反外挂根本不该用 LLM。

完整的阶段划分、每阶段引入的新问题,以及后台侧四个扎穿点(AI 巡检 / 自动化测试 / 反外挂 / 客服 Agent),见 AI 与游戏研发周期。那篇的判据可以直接借来用在这里:上任何一个 AI 研发工具前,先问「它的正确与否有没有可标注的人工基线」——代码侧的基线恰好最清晰(测试过不过、PR 合不合),这也是研发工程化比内容生产更容易见效的结构性原因。

未来可观测方向(值得关注)

AI 可观测和传统 APM 有两处根本不同,决定了它是一个正在成形的新品类:

  1. 作用域从「请求级」变「轨迹级」:传统 APM 一个 span 对应一次请求;agent 是多步轨迹(plan→tool→observe→reflect),要观测的是整条 trajectory + session,还有子 agent、工具调用、记忆读写的父子关系。
  2. 判定从「确定性」变「概率性」:接口对错是二值的;LLM 输出「对不对」要靠 eval(离线回归 + 在线 LLM-as-judge),所以 eval 与 observability 正在合并成一个东西——这已是标配而非差异点。

打个比方:AI 工程的可复现与可观测,就是你做可复现构建 + 发布单那一套——上线时记清 commit sha、依赖锁文件、镜像 digest、配置版本,半年后照同一份清单重建,产物应该对得上(对应 prompt 版本、模型 ID、数据集哈希、随机种子、评测集);OpenTelemetry GenAI 语义约定就是行业统一的那张"发布单模板",把 invoke_agent / execute_tool / chat / search_memory 各摊成一列。类比失效边界:可复现构建之所以成立,是因为你能把每一项依赖钉死——lock 文件锁版本、镜像锁 digest,锁住了就不会变;而 AI 系统里基座模型与 API 会静默升级(供应商改权重、改路由、换 tokenizer),这一项你根本拿不到 digest、也锁不住,同一份 prompt 半年后返回可能完全不同、评测分悄然漂移。所以这里的"可复现"只能做到可比对、不可锁定:除了版本化模型精确版本号、温度/种子、system prompt、评测集快照、embedding 模型,还必须定期用固定 Golden Set 回归——靠持续测量去发现环境变了,而不是靠锁去阻止它变。

① OpenTelemetry GenAI 语义约定(最该追的标准)

这是当前唯一在往「跨框架统一标准」走的努力,OTel 已把它拆到独立仓库 open-telemetry/semantic-conventions-genai:

  • span 操作类型:chat / embeddings / execute_tool / invoke_agent / plan / create_memory / search_memory…(覆盖 agent、工具、记忆)。
  • 关键属性:gen_ai.provider.name(原 gen_ai.system)、gen_ai.request.model/.temperature、gen_ai.usage.input_tokens/.output_tokens/.cache_read.input_tokens/.reasoning.output_tokens、gen_ai.tool.name/.call.arguments/.result。
  • 指标:TTFT(gen_ai.server.time_to_first_token)、逐 token 时延、invoke_agent.duration、execute_tool.duration。
  • 已有 MCP 约定(mcp.md):instrument tools/call、client/server span 与 session 指标。

可信度提示

OTel GenAI 语义约定全部仍是 "Development"(实验性)状态,尚无 stable 版本,命名已经改过一次(gen_ai.system → gen_ai.provider.name)。落地时按「会变」预期,别硬编码属性名——但方向与骨架已基本确定,值得现在就对齐埋点。

② Agent 专属可观测维度

维度观测什么与传统 APM 的差别
轨迹/会话整条 plan→act→reflect + session 回放APM 是请求级,这里是任务级
工具调用 span每次 tool/MCP 调用的参数、结果、耗时工具是 agent 的"副作用面"
Token/成本按 span 归集 token、缓存命中、费用APM 不关心 token 经济学
时延分解TTFT、逐 token 时延流式生成特有
在线 eval生产流量上跑 LLM-as-judge 打分APM 无"输出对不对"概念
护栏/幻觉/PII/漂移越权、幻觉、敏感信息、分布漂移概率系统特有风险
Prompt/上下文prompt 版本、上下文快照、replay便于复现与回归

③ 工具生态(按开源/OTel 原生/是否 eval+obs 一体)

工具开源OTel 原生eval+obs 一体定位
Langfuse✅ 可自托管✅ 基于 OTel✅开源首选,session/agent 图可视化
Arize Phoenix✅✅ OTel+OpenInference✅开源 + 企业版 Arize AX
HoneyHive部分✅ OTLP 原生✅trajectory 回放、含 MCP server
LangSmithSaaS 为主框架原生埋点✅自动根因、与 LangChain 深绑
W&B WeaveSaaS自有 SDK✅session/turn/step/子 agent 一等公民
Datadog LLM ObsSaaS支持 OTel✅与既有 APM 一体、合规齐全

选型心法:要私有化/省钱 → Langfuse 或 Phoenix(开源+OTel 原生);已重度用 Datadog → 直接开 LLM Observability 模块;深绑 LangChain → LangSmith。避免自研全套——这个赛道成熟度已够高。

④ 2026 前沿(watch,尚未落定)

  1. 「Agent observability」成独立品类 —— OTel 已发布专门的 agent 可观测约定(对齐 Google AI-agent 白皮书),目标是 CrewAI/AutoGen/LangGraph 通用。追踪它从 Development → stable 的进度,是这块最重要的信号。
  2. eval 驱动 / 闭环自愈 —— 遥测直接反哺 agent 改进(自动检测→诊断→修复重复出现的 trace 问题)。这与前面 evomap 的「经验演化层」是同一件事的两个入口:可观测面产出的失败轨迹,正是经验层要沉淀的原料。(注:营销超前于成熟实践,谨慎。)
  3. MCP 可观测 —— tools/call 级埋点已有早期约定,随 MCP 生态铺开会快速演进。
  4. 多 agent 与记忆/上下文可观测 —— 多 agent 协调、记忆读写的可观测仍是公认未解的缺口,属于「值得盯、还没方案」。

落地建议

现在就做的最小动作:用 OTel GenAI 约定给每次 LLM/工具/agent 调用埋点(哪怕属性名会变),接一个开源后端(Langfuse/Phoenix),把 token/成本/时延先看见;在线 eval 与闭环自愈作为下一阶段。埋点是把「经验层」喂饱的前提——没有轨迹数据,evomap 式的经验演化就是无米之炊。

技术选型 / 面试问答清单

规范化实践

  • Q:OpenSpec 靠什么约束 agent? A:不是技术沙箱,是「产物约束」——必须先产出可评审的 proposal/specs/design/tasks 并对齐,再照 tasks 逐条执行;delta 归档时折叠进真理源 spec,评审左移。
  • Q:Skill 为什么能规模化不撑爆上下文? A:渐进式披露三层——name+description 常驻判断何时用、命中才加载正文、需要才加载附件;确定性部分写成脚本让模型执行而非读入。
  • Q:CodeGraph 比 grep 强在哪? A:它是 tree-sitter 全 AST 解析出的符号+边的图谱,能答「谁调谁、改了炸哪」这类结构问题;grep 只能匹配字面文本。

Skill vs evomap

  • Q:Skill 和 evomap 本质区别? A:Skill 是人写的静态说明书(文档导向、不自我改进);evomap 是 agent 从运行经验自动演化的经验基因(可自我改进、可跨 agent 网络继承),且用 skill2gep 把 Skill 当输入蒸馏成 Gene。
  • Q:evomap/evolver 本质是什么? A:是提示词生成器 + 经验资产版本化账本,不是能自己改代码的 AI。一个周期只做四件确定性动作:扫 memory 日志→从本地 GEP 库选 Gene/Capsule 模板→拼出受协议约束的提示词打到 stdout→追加 EvolutionEvent 审计;改不改代码由宿主运行时或人决定,git 兜底回滚。数据模型 Gene(策略模板)/Capsule(验证过的具体修复含 diff)/EvolutionEvent(审计日志)就是"经验的三张表"。
  • Q:evomap 值得上生产吗? A:分三层——范式层(经验→可审计资产→可继承)真价值值得学并自建;引擎层(prompt 编排器 + git 审计)单机/小团队有限有用但别神化;网络层(Hub/A2A/Credits/Council)是企业红线(数据主权/审计定责/错误经验放大/许可证与锁定风险)生产禁用。结论:学范式、自建经验资产层、坚决不接公共网络。

存量代码 & 组件复用

  • Q:百万行存量代码怎么让 agent 读懂/维护? A:三步闭环——定位(向量找模糊意图/SCIP 精确跳转)→ 影响面分析(CodeGraph callers/impact 查爆炸半径,这步最关键)→ 安全改动(TDD+CI 回归)→ 沉淀 ADR。索引用三种混合:结构图谱(主干)+ 精确引用 + 语义向量;纯向量丢结构边是反模式。
  • Q:可复用组件怎么选型? A:按确定性和复用边界分层——确定性动作→Tool/脚本、判断流程→Skill、跨系统→MCP Server、独立子任务→Subagent、跨任务经验→记忆/Gene;能用确定性代码解决的绝不留给模型即兴。

企业级工程规范

  • Q:AI 生成的代码凭什么敢合进主干? A:因为它和人写的代码走同一套、甚至更严的门禁——formatter/lint/类型检查左移拦风格与幻觉类型错误、单测+diff 覆盖率门、SAST/SCA/密钥扫描、CODEOWNERS 强制对应 owner 评审、CI 回归覆盖 CodeGraph 圈定的影响面。AI 代码能绕过门禁直接合入不是效率是定时炸弹。
  • Q:AI 时代工程规范有哪些新增/放大的风险点? A:① 幻觉包名被投毒(slopsquatting)→ lockfile + 私有 registry 白名单 + 依赖存在性校验;② AI 复制带漏洞的训练样本 → SAST 走更严的门;③ 生成量大人肉 review 顶不住 → 尽量把评审意见固化成机器可执行的 lint/类型规则;④ 每步 AI 动作要能追溯定责 → 全链路 Trace + 审计。
  • Q:企业级工程规范全景有哪几段? A:开发期(lint/format/静态分析/分支策略)→ 提交评审期(Conventional Commits/CODEOWNERS/pre-commit)→ CI 门禁(测试+覆盖率/SAST/SCA/可复现构建)→ 发布运维期(SemVer/灰度回滚/可观测审计),事故复盘 ADR 回流开发期形成闭环。第 7 维是协调与共识——AI 消除了开发间摩擦,而那些摩擦恰恰是共享理解的载体。
  • Q:结构图谱(CodeGraph/Graphify)到底能做什么? A:跨文件边解析(calls/imports/inherits)、最短路径查询(A→B 经几跳)、God node 检测(系统瓶颈)、社区发现(Leiden 自动切子系统)、边置信度标注(EXTRACTED 源码显式 vs INFERRED 推断)。这些全是 grep 和向量原理上做不到的——grep 只匹配字面文本,向量丢结构边。Graphify 进一步做到零 LLM 依赖(纯 tree-sitter)+ 边置信度,LOCOMO recall@10 = 0.497 远超 mem0 的 0.048。
  • Q:agent 运行时安全怎么管? A:静态安全门(SAST/SCA/密钥扫描)管代码合入前,运行时命令守卫(dcg)管命令执行前——dcg 用 50+ 安全 pack 拦截 git reset --hard/rm -rf/DROP TABLE 等不可逆命令,支持 agent 信任等级(不同 agent 配不同策略)、heredoc 内嵌脚本扫描、上下文感知(不拦 grep "rm -rf" 只拦 rm -rf /)。企业级安全 = 左移静态门 + 运行时守卫 + 审计追溯三层。
  • Q:AI 消除摩擦后团队共识怎么维持? A:Armin Ronacher 的巴别塔类比——agent 让每个人都能在自己不理解的角落做局部改动,测试通过、解释按需生成,但没人需要交流,共享理解悄然坍塌而工程仍能继续(塔不倒只是升高)。替代机制:CodeGraph 影响面分析 + ADR 强制记录"为什么" + OpenSpec spec 评审同步共识 + 定期"系统漫步"对齐架构模型 + 保留人审不替代决策。护栏不是效率敌人,是人为重建被 agent 消除的摩擦——而那部分摩擦是共识的载体。

基建与可观测

  • Q:AI 研发基建有哪几个面? A:控制面(spec/skill/MCP 注册 + 护栏 + 租户隔离,管规则)、数据面(模型网关 + 知识库 + 经验库 + 语义缓存,管知识与执行)、可观测面(trace/eval/成本/审计,管度量与反馈),CI/CD 横切串成闭环;只建数据面就上线是 Demo 能跑生产就崩的根因。
  • Q:AI 可观测和传统 APM 有什么不同? A:作用域从请求级变轨迹级(观测整条 plan→act→reflect + session、子 agent、工具调用、记忆读写);判定从确定性变概率性,靠 eval(离线回归 + 在线 LLM-as-judge),所以 eval 与 observability 正合并。
  • Q:AI 可观测最该追的标准? A:OpenTelemetry GenAI 语义约定(gen_ai.*,含 invoke_agent/execute_tool/mcp span、TTFT/token 指标),已拆到独立仓库但仍是 Development(命名改过 gen_ai.system→gen_ai.provider.name);现在就该按它埋点、接开源后端(Langfuse/Phoenix),闭环自愈是下一阶段。

心法总结

AI 工程化的本质是「把易失的东西固化」:需求固化成 spec、流程固化成 skill、代码理解固化成图谱、踩过的坑固化成经验资产。Skill 是静态说明书,evomap 是会演化的经验基因——但企业级落地的胜负手不在「用哪个网络」,而在私有化 + 审计回滚 + 人工闸门 + 权限隔离 + 度量闭环这五道工程护栏。

本域延伸

  • 「经验层」的记忆/检索本质仍是一次 RAG 调用,受 chunking、rerank、"迷失在中间" 制约;上下文剪枝 同样适用于把长经验压缩进上下文。
  • 「怎么造一个 agent」的闭环、工具设计、护栏与评测见 Agent 开发;本篇是它的「工程化/企业级选型」上层视角。
  • 底层的上下文窗口 O(n²)、解码采样约束见 大模型核心原理;latency/成本优化见 推理与微调优化。

记忆口诀

  • 四层栈:意图层 OpenSpec(spec 固化需求)/ 方法层 Skill(流程固化+渐进披露)/ 理解层 CodeGraph(结构图谱)/ 经验层 evomap(经验演化)
  • 三索引:结构图谱(主干·影响面)/ 精确引用 SCIP(点对点跳转)/ 语义向量(模糊意图·有幻觉)
  • 三基建面:控制面(规则编排)/ 数据面(知识执行)/ 可观测面(度量反馈)·CI/CD 横切串闭环
  • 五道红线:私有化 / 审计回滚 / 人工闸门 / 权限隔离 / 度量闭环——evomap 学范式、自建资产层、不接公共网络

内容来源

综合整理自各项目官方仓库/站点(2026-07 核实;生态更新快,请以官方为准):

  • OpenSpec — github.com/Fission-AI/OpenSpec · openspec.dev
  • Superpowers — github.com/obra/superpowers(Jesse Vincent / Prime Radiant)
  • Anthropic Agent Skills — 官方工程博客《Equipping agents for the real world with Agent Skills》
  • CodeGraph — colbymchenry/codegraph(与本项目 codegraph_* 工具签名吻合);实战分析参考 CodeGraph 代码图谱实战(2026-06,含四层建图链路/工具选择表/Resolution框架语义补全/索引保鲜/MCP接入工程要点)
  • evomap / Evolver — github.com/EvoMap/evolver · evomap.ai · arXiv:2604.15097 · EvoMap/skill2gep(★ benchmark 与 star 数为项目方自述,未独立复核)
  • Sourcegraph / SCIP / LSIF、LlamaIndex 等选型信息来自各自官方文档
  • Graphify — github.com/Graphify-Labs/graphify(YC S26,tree-sitter 知识图谱,benchmark 见 BENCHMARKS.md)
  • dcg (Destructive Command Guard) — github.com/Dicklesworthstone/destructive_command_guard(Rust + SIMD,50+ 安全 pack)
  • Armin Ronacher — The Tower Keeps Rising(2026-07-13,AI 时代的巴别塔类比)

自测:合上资料能说清楚吗?

  1. 「AI 会写代码」和「AI 能做工程」之间隔着哪几层规范化?分别解决什么断层?
参考答案

四层:意图层(OpenSpec 把需求固化成可评审 spec,治意图漂移)→方法层(Skill 把流程固化成可组合能力,治流程不可复现)→理解层(CodeGraph 把存量代码建成结构图谱,治靠 grep 读代码)→经验层(evomap 把经验演化成可继承资产,治经验无法沉淀)。

  1. 让 agent 读懂百万行存量代码靠三种索引混合,各管哪一段?为什么「全代码丢向量库做 RAG」是反模式?
参考答案

结构图谱(主干)答影响面「改了炸哪」、精确引用 SCIP 答点对点定义/引用跳转、语义向量答「哪段做鉴权」这类模糊意图。纯向量丢掉了调用/依赖的结构边,agent 看得懂片段却算不清影响面,故只能当补充不能当主干。

  1. 对比 Skill 与 evomap 的 Gene:二者在抽象层次、维护方式、是否自我改进上有何本质区别?关系是什么?
参考答案

Skill = 人写的静态说明书(markdown+脚本、靠人维护、用了不变);Gene = 从运行经验自动演化的资产(可自我改进 test-time evolution、可跨 agent 网络继承)。关系:Skill 是 Gene 的低阶形态,evomap 用 skill2gep 把 Skill 当输入原料蒸馏成 Gene。

  1. evomap/Evolver 在生产环境到底有没有价值?请分层判断。
参考答案

分三层且价值急剧衰减:范式层(经验→可审计资产→可继承)真价值、值得学并自建;引擎层(本质只是 prompt 生成器+git 审计账本,不改代码)单机/小团队有限有用别神化;网络层(Hub/A2A/Credits/Council)触数据主权、错误经验放大、许可证锁定等企业红线,生产禁用。

  1. 「AI 生成的代码凭什么敢合进主干」?企业级安全为什么是三层防线?
参考答案

因为它和人写的代码走同一套甚至更严的门禁:formatter/lint/类型检查、单测+diff 覆盖率门、SAST/SCA/密钥扫描、CODEOWNERS 强制评审、CI 回归覆盖 CodeGraph 圈定的影响面。安全三层=左移静态门(合入前)+ 运行时守卫 dcg(执行前)+ 审计追溯(执行后)。

最近更新: 2026/9/10 11:38
Prev
微调策略