2026年9月21日 · 阅读 —

接盘不熟的业务线,我从生产代码反查业务规则

Agent 与 Skills测试与评测

接盘不熟的业务线,我从生产代码反查业务规则

业绩不好看的时候,团队最先动的就是人。产品、研发、测试一批批走,剩下的人每人手里都压着几条没完全摸透的业务线。文档本来就不全,交接再一断,你对着一个系统,既不知道它为什么这么设计,也不知道现在到底发生了什么。

一开始我也按老办法来:翻需求文档、看接口、追着老同事问。但老同事也未必全知道——尤其是那些改了很多轮的规则,早就不在文档里了,也没人能讲清楚。

后来我发现,真正靠得住的来源只有一个:生产环境的项目代码。规则再怎么漂移,最后都会落进代码、SQL、配置和定时任务里。

问题变成:怎么把这一堆代码,变成产品、测试能读、能追、能复现的业务规则。


这是什么

codebase-graph-prd-rules 是一组互补的 AI 代理 Skill,把项目源码整理成供非开发者(产品、运营、QA)阅读的、可追溯的详细业务规则文档。

两个 Skill 共享同一方法论与证据边界——先建 Graphify 代码图谱,用图谱定位入口与调用链路,再逐条用真实源码、SQL/XML 与配置确认规则。图谱负责导航,源码负责确认。两者都不改动业务系统——只分析和写文档。

两个 Skill 覆盖不同粒度:

  • ** codebase-graph-business-rules ** —— _全项目_业务规则。扫描整个项目、建图,产出一份集成文档:模块地图、入口、实体/状态、数据与配置、端到端链路、逐模块规则表、测试范围与追溯索引。
  • ** codebase-graph-module-rules ** —— _单模块_深挖。给定功能描述或模块名,追溯一个模块的规则、排序/限额/状态/流程,产出测试导向的专项文档。

为什么需要

常规做法(反例)本项目
规则只存在开发者脑中或零散注释里成文、可源码验证的规则文档
排序被含糊地叫成“优先级”拆分资格过滤 vs 排序键 vs 后置过滤/终止
无证据,无法核查每条规则带 src/...:line 来源
图谱推断边被当成事实图谱只作导航;源码确认事实
静态检查通过被说成已验证静态与运行行为分开、如实报告
模块多条链路在末尾重复追加同一模块的分支合并到同一节

它解决 5 个工程痛点:

  1. 可追溯 — 每条规则记录来源文件+行号,便于审计与变更。
  2. 非开发者可读 — 表格与 Mermaid 图解释业务含义,而不是堆类名。
  3. 证据诚实分层 — EXTRACTED / INFERRED / 源码确认分开报告。
  4. 测试就绪 — 每条关键规则映射到可执行的 P 0/P 1 测试断言矩阵。
  5. 安全 — 拒绝未授权的生产动作、绝不输出凭据。

核心概念

1. 图谱导航,源码确认

图谱负责定位入口与候选链路(触发 → 编排 → 决策 → 存储/日志 → 外部结果)。每条规则再用源码、SQL/XML、配置确认——INFERRED 图谱边只是线索,不是事实。

2. 三层规则

业务规则分为三层,绝不混为一谈:

  • 资格过滤 —— 候选是否具备进入资格?
  • 候选排序 —— 谁先处理(字段、方向、null 规则、并列行为)?
  • 运行时控制 —— 限额、去重、并发、发送、失败回滚。

排序必须写明字段、方向、null/空值规则、并列行为、后置过滤与最终终止条件——以实际比较器或 SQL ORDER BY 为准,而非假设。

3. 证据等级

等级可写结论不可写结论
源码/SQL/配置已复核当前实现的条件、顺序、字段、调用与副作用外部系统最终结果
图谱 EXTRACTED可作为定位和关系线索未读实现的业务规则
图谱 INFERRED标为待源码确认的候选关系已确认调用或业务合同
注释/日志/字段名补充意图或待确认项独立事实
运行结果该环境和输入下的观测未覆盖场景的普遍保证

4. 只分析,不执行

两个 Skill 只分析和写文档。未经显式授权,拒绝调用真实下游服务、发送真实线索、改动数据或运行生产行为——并如实报告哪些_未执行_。


仓库结构

codebase-graph-prd-rules/
├── README.md                        # 本说明(英文)
├── README.zh-CN.md                  # 本说明(中文)
├── LICENSE                          # MIT
├── .gitignore                       # 排除 macOS/Python/IDE 产物
├── .gitattributes                   # * text=auto eol=lf
├── codebase-graph-business-rules/   # 全项目业务规则 Skill
│   ├── SKILL.md                     # 激活入口
│   ├── prompts/codebase-graph-business-rules.md
│   ├── agents/openai.yaml           # 发现元数据
│   ├── references/
│   │   ├── graphify-and-evidence.md # 建图顺序 + 语义提取 + 证据等级
│   │   └── document-contract.md     # 文档与测试契约
│   ├── evals/eval.yaml + cases/     # 3 个回归用例
│   ├── examples/project-rules-example.md
│   └── scripts/verify_skill_package.py
└── codebase-graph-module-rules/     # 单模块规则 Skill
    ├── SKILL.md                     # 激活入口
    ├── prompts/codebase-graph-module-rules.md
    ├── agents/openai.yaml           # 发现元数据
    ├── references/
    │   ├── module-discovery.md      # 术语→候选→链路检索
    │   └── module-document-contract.md
    ├── evals/eval.yaml + cases/     # 3 个回归用例
    ├── examples/module-rules-example.md
    └── scripts/verify_skill_package.py

每个 Skill 都是自包含包:激活入口、完整执行规范、发现元数据、三个 eval 用例、示例与可执行的包校验器。


两个 Skill

codebase-graph-business-rulescodebase-graph-module-rules
范围全项目单个功能 / 模块
输入项目根 + 源码范围功能描述 / 模块名
输出集成文档:模块地图、实体/状态、数据与配置、链路、逐模块规则、测试范围、追溯索引专项文档:边界、关系、规则/排序/限额、测试矩阵
合并规则同一模块跨入口/异常/定时链路合并到一节同一模块主/支链路合并到一节
适用“梳理全项目 / 全量功能 / PRD 基线”“梳理某个模块 / 某条规则”

选择规则:一个明确边界的模块用 codebase-graph-module-rules;无单模块边界的全项目扫描用 codebase-graph-business-rules。


快速开始

环境要求:校验器需要 Python 3.9+(仅标准库,无第三方依赖)。需要一个可分析的源码项目;语义图谱提取可选地需要配置 LLM 凭据。

1. 让代理能加载该 Skill

把需要的 Skill 目录(如 codebase-graph-business-rules/)复制到代理的 skill 路径,或按本地路径 Skill 引用。

2. 校验一个 Skill 包

对 Skill 目录运行内置包校验器:

python3 codebase-graph-business-rules/scripts/verify_skill_package.py codebase-graph-business-rules
# → skill package contract passed: 3 eval cases, prompt, metadata, references

python3 codebase-graph-module-rules/scripts/verify_skill_package.py codebase-graph-module-rules
# → skill package contract passed: 3 eval cases, prompt, metadata, references

校验器检查:必需工件存在、SKILL.md 前置 name 与目录一致、agents/openai.yaml 的 metadata.key 一致、任何 .md / .yaml 无凭据类内容。

3. 使用该 Skill

向代理提出请求,例如:

"请扫描项目代码,先建 Graphify 图谱,再按模块输出业务规则、来源、流程图和测试范围。"
"请针对线索包和排序规则,先建 Graphify 图谱,再输出详细业务规则、流程图、来源和测试点。"

两个 Skill 默认在项目本地 docs/ 输出 Markdown 文档;明确要求时附加 CSV/JSON 规则账本。


验证

每个 Skill 带 evals/ 下的 3 用例回归契约:

用例文件验证什么
成功路径basic-success.yaml完整请求产出图谱 + 规则 + 来源 + 测试
信息缺失edge-incomplete-input.yaml缺少输入必须暴露缺口/“待确认”,而非猜
范围/风险边界edge-scope-boundary.yaml越界请求(如发送真实线索)被拒绝

静态包校验(verify_skill_package.py)证明_结构与安全_;它不代表任何项目已被分析。


常见问题 FAQ

Q: 该用哪个 Skill? 一个边界明确的模块用 codebase-graph-module-rules;无单模块边界的全项目扫描用 codebase-graph-business-rules。

Q: 需要 LLM 凭据吗? 不需要。语义提取仅在显式提供凭据时才执行;无凭据时退化为结构图谱+源码复核,并报告该限制。

Q: 这些 Skill 会改我的代码吗? 不会。两个 Skill 只分析和写文档。改动业务代码、数据或外部系统需要你另行显式授权。

Q: 文档长什么样? Markdown + 表格 + Mermaid 流程/状态图,业务含义优先而非堆类名,并带 src/main/.../Service.java:120 这类可定位来源。

Q: 能把规则导出 CSV/JSON 吗? 可以,明确要求时在 Markdown 主稿之外附加导出。


先建图谱,再让图谱指路

纯靠人肉读一个老项目的代码,调用关系太绕,读不完,也记不住。我的做法是先搭一张代码图谱,再让图谱带路,而不是一上来就钻进去翻。

流程是这样的:

  1. 明确要分析的范围——是整个项目,还是某一条业务线。
  2. 对源码建 Graphify 图谱,把入口、服务、实体、Mapper、任务这些节点和调用关系拉出来。
  3. 用图谱定位”触发 → 编排 → 决策 → 落库/外部调用”这条链路走到哪。
  4. 关键规则一律回到源码、SQL/XML、配置里去确认,图谱只当导航,不当结论。
  5. 产出表格 + 流程图的 Markdown,给产品和测试读。

图谱的作用是”定位”,不是”背书”。图谱上标注的 INFERRED 关系,只是候选线索;一条规则到底怎么算的,必须以源码和真实配置为准。

一个 Skill 管全局,一个 Skill 管细节

这活儿干了几次之后,我把流程沉淀成了两个 Skill,推到了 GitHub:

仓库:xsoway/codebase-graph-prd-rules

  • codebase-graph-business-rules:整条系统的业务规则。扫全项目、建图,产出一份集成文档——模块地图、入口、实体/状态、数据与配置、端到端链路、逐模块规则表、测试范围和追溯索引。适合产品要快速熟悉一整个不熟的领域。
  • codebase-graph-module-rules:某一个功能模块的专项深挖。给定一个功能名或模块名,追出这一个模块里的规则、排序、限额、状态流转,配一份测试矩阵。适合开发或测试针对具体一条逻辑查细节。

两个 Skill 的分工一句话讲清:全局用 business-rules 摸全貌,单点用 module-rules 抠细节。 它们都遵守同一条铁律——图谱只负责导航,事实只从源码来,绝不改业务系统代码,只分析和写文档。

每个 Skill 都自带校验器,提交前跑一遍能确认包结构完整、元数据键一致、扫描不到密钥:

python3 codebase-graph-business-rules/scripts/verify_skill_package.py codebase-graph-business-rules
# → skill package contract passed: 3 eval cases, prompt, metadata, references

 使用该 Skill

向代理提出请求,例如:

/codebase-graph-business-rules
"请扫描项目代码,先建 Graphify 图谱,再按模块输出业务规则、来源、流程图和测试范围。"

/codebase-graph-module-rules
"请针对xx功能模块和排序规则,先建 Graphify 图谱,再输出详细业务规则、流程图、来源和测试点。"

两个 Skill 默认在项目本地 docs/ 输出 Markdown 文档;明确要求时附加 CSV/JSON 规则账本。

规则要能追到源头

这套东西真正想解决的不是”能不能生成一段文档”,是敢不敢拿这份文档去下判断。所以每条规则我都要求带上来源——项目相对路径加行号,比如 src/main/.../Service.java:120。行号是拿来追溯的,不是拿来糊弄的。

排序这种最容易含糊的地方,文档里必须拆到不能再拆:

  • 资格过滤:这个候选到底有没有资格进池子。
  • 候选排序:按什么字段、升序降序、空值怎么处理、并列时谁在前。
  • 运行时控制:限额、去重、并发、发送、失败怎么回滚。

做测试的人拿到这份文档,能直接对着 P0/P1 测试矩阵去补用例,而不是对着一个”看起来应该这样”的含糊描述猜。

不能把没验证的说成验证过

有一点我很在意:静态检查和真实跑起来是两回事。Skill 里产出的文档是”分析结论”,不等于”生产环境已验证”。集成没跑、数据库没跑、调度没跑、生产行为没跑——这些我都在证据边界里如实标注为”待确认”,不写进结论冒充已验证。

语义图里用到了 LLM 做 INFERRED 关系的补充,但这些关系一律标成”待源码确认的线索”,绝不直接当成事实写进业务规则。

说白了:能查的查,查不到的标清楚。宁可文档里多几个”待确认”,也不让产品、测试拿着一个编出来的规则去开工。

收个尾

这套东西跑过几个项目,效果还算能落地。仓库已经公开,License 用 MIT,中英双语 README,发布前做了密钥扫描和包结构校验。

如果你现在也在接不熟的业务线,可以在自己机器上跑一遍:

git clone https://github.com/xsoway/codebase-graph-prd-rules.git
python3 codebase-graph-prd-rules/codebase-graph-business-rules/scripts/verify_skill_package.py codebase-graph-prd-rules/codebase-graph-business-rules

接下来我可以做的事:如果你们那边业务规则是排在字段、SQL 上的,我能把”排序、限额”这类最容易出错的部分配出可直接复用的测试矩阵,再跑一遍真实数据的回归,把那些”待确认”的坑一个个填掉。

项目地址: https://github.com/xsoway/codebase-graph-prd-rules

#code库 #业务规则 #code图谱 #AgentSkill #交接期 #测试工程