news 2026/6/7 19:47:10

Agent开发系列(十二)-知识库建设(ADR)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Agent开发系列(十二)-知识库建设(ADR)

一、什么是ADR?

ADR(Architecture Decision Record,即架构决策记录)。研发团队里特指"记录一次重要架构决策的短文档"。

它是什么它不是什么
重要架构决策的"决策书"(过去时)架构总览(那是"现在是什么")
记录"为什么选 A 不选 B"会议纪要(那是过程)
防止"重复讨论 + 推翻重做"产品决策(那是 PRD/Roadmap)
写一次、状态变更、几乎不改内容实施细节(那是 PR/Commit)
# ADR-0001: 选 PostgreSQL 不用 MySQL ## 状态 Accepted ## 背景 - MySQL 5.7 已运行 5 年,数据量 3TB - 性能瓶颈 + EOL 合规压力 - 需要 JSONB、窗口函数、并行查询 ## 考虑的选项 1. MySQL 8.0(升级) 2. PostgreSQL 16(迁移) 3. TiDB(HTAP) ## 决策 选 PostgreSQL 16。 - 否决 MySQL 8:JSON 弱,无法解决 3TB JOIN - 否决 TiDB:运维成本高,收益不明确 ## 后果 - 正面:JSON 性能 +5x - 负面:迁移需 6 周 - 后续:6 个月后 review

二、ADR的知识模板如何定义?

2.1 知识模板

分类字段类型必填备注
基础编号string全局唯一,如 0001
基础标题string动词开头,一句话
基础状态enumProposed/Accepted/Rejected/Deprecated/Superseded
基础创建日期date
基础决策日期date×状态变 Accepted 时填
基础作者@user草稿作者
基础决策参与者list[@user]参与讨论的人
基础关联服务/系统list[link]×
核心背景markdown【核心】面临什么问题,为什么现在要决策,有什么约束
核心选项list(≥2)【核心】至少 2 个,通常 3-4 个,每个有名称
核心决策markdown【核心】选了什么,理由是什么
核心后果markdown【核心】正面 / 负面影响,后续工作
关联superseded byADR 编号×状态为 Superseded 时填
关联关联代码路径list[link]×实施该 ADR 的代码
关联关联 Runbooklist[link]×涉及运维的填
关联关联事故档案list[link]×事故触发的 ADR 填

案例如下:

# ADR-0001: 选 PostgreSQL 不用 MySQL ## 状态 Accepted ## 背景 - 当前订单数据存储在 MySQL 5.7,已运行 5 年 - 数据量增长到 3TB,MySQL 大表 JOIN 性能瓶颈 - 团队对 MySQL 5.7 EOL(2023-10)有合规压力 - 业务需要 JSONB、窗口函数、并行查询 ## 考虑的选项 1. **MySQL 8.0**:升级现有 MySQL,无数据迁移 2. **PostgreSQL 16**:迁移到 PG,功能强,生态成熟 3. **TiDB**:HTAP 方案,水平扩展 ## 决策 **选 PostgreSQL 16**。 理由:JSONB/窗口函数原生支持、并行查询、社区活跃度高于 MySQL 8、 团队已有 PG 经验(3 人)。 **否决 MySQL 8**:JSON 函数能力弱、并行查询有限、升级无法解决 3TB JOIN 瓶颈。 **否决 TiDB**:运维成本高、HTAP 收益对当前业务不明确。 ## 后果 - **正面**:JSON 字段查询性能 +5x,大表 JOIN +3x - **正面**:为后续架构演进(多租户、地理分布)提供更好基础 - **负面**:数据迁移需 6 周,需 0.5 FTE 专注 - **负面**:MySQL 时代的运维经验部分失效 - **后续**:运行 6 个月后 review,看是否需要回退 - **关联**: [迁移项目 #PRJ-2031]

三、ADR的更新机制如何设计?

触发器触发条件动作责任方
PR-ingestPR 实施 ADR 决策自动关联 ADR 编号到 PRLLM
Lint 反查代码偏离 ADR告警 + 提醒更新状态自动
手动状态变更重大事件(事故/技术演进)触发走 PR 改状态决策参与者
定期 review每年/每季度复查检查"过期的 ADR"架构师

3.1 关键设计点

设计点具体要求
状态变更走 PR决策变更要可追溯,不是直接改
Superseded 必须有链接superseded by: ADR-0015,可追溯链条
被 Superseded 的 ADR 不删除历史背景常被翻账
Lint 强制:Accepted 状态 ADR 跟代码一致不一致就告警,推动状态变更
状态变更要 review至少 2 个决策参与者 approve
Accepted 后,正文几乎不修改决策的"过去时"是稳定的

3.2 反模式

反模式后果
直接修改 ADR 正文(改"决策")历史丢失,无法知道"当时怎么想的"
状态不写,默认都是 Accepted看不到哪些在讨论、哪些被否决
Superseded 写"已被新方案替代"不写编号追溯链断裂
删除 Rejected 的 ADR未来重新讨论时,前人踩过的坑看不见
状态变更不通知关联方实施 ADR 的人不知道决策已变

四、ADR的质量标准如何定义?

核心判断:ADR 的"质量"= 决策可追溯 + 跟代码一致 + 状态正确。不是"文档漂不漂亮"。

指标定义健康值测量方式
覆盖率重大决策有 ADR 的比例100%抽查
一致性代码与 ADR 描述一致≥ 95%Lint
可追溯决策变更链条完整无断裂100%自动
被引用率ADR 被代码/Runbook/wiki 引用的比例≥ 80%链接统计
状态正确性ADR 状态与现实一致≥ 95%季度 review

4.1 3个反向指标(出现就告警)

反向指标告警触发修复动作
裸奔决策重大代码变更(选型/架构)无对应 ADR立即告警,要求补 ADR
失信 ADR代码严重偏离 ADR 决策立即告警,要求更新状态或同步代码
僵尸 ADR状态长期不更新,引用链断裂季度 review 列出,要求清理

4.2 3个质量门槛

门槛触发动作
准入门槛(发布前)必填字段完整 + 至少 2 个选项 + 决策明确 + 至少 2 个决策参与者缺一不准合并
持续门槛(运行中)ADR 跟代码一致 + 状态正确 + 至少被 1 处引用否则季度 review 标 stale
淘汰门槛永不删除,只 Superseded归档到superseded/目录
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 19:45:10

CPLD驱动ADC0804数据采集:状态机与硬件查表法实战解析

1. 项目概述与核心挑战最近在调试一个基于CPLD和ADC0804的数据采集与显示系统,整个过程可以说是“痛并快乐着”。项目本身并不复杂,核心就是用一片CPLD(复杂可编程逻辑器件)去控制一颗经典的8位逐次逼近型模数转换器ADC0804&#…

作者头像 李华
网站建设 2026/6/7 19:41:01

过锡炉治具:解决SMT与插件混合工艺后焊难题的高效方案

1. 项目概述:当贴片板遇上插件料,一个治具如何化解后焊困局在消费电子、智能硬件乃至汽车电子这些领域打拼的硬件工程师和工厂生产管理者,这几年恐怕都有一个共同的感受:人工成本涨得让人心惊肉跳。一个直观的体现就是&#xff0c…

作者头像 李华
网站建设 2026/6/7 19:38:12

如何高效使用开源歌词提取工具:3步掌握网易云与QQ音乐歌词获取

如何高效使用开源歌词提取工具:3步掌握网易云与QQ音乐歌词获取 【免费下载链接】163MusicLyrics 云音乐歌词获取处理工具【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为找不到准确的音乐歌词而烦恼吗&#xff…

作者头像 李华
网站建设 2026/6/7 19:37:13

oproxy:开源 MITM 代理工具,可拦截、检查和模拟网络流量!

导航菜单切换导航,有登录选项,还有外观设置。平台功能涵盖 AI 代码创作,如 GitHub Copilot 借助 AI 编写优质代码等;开发者工作流,像 Actions 自动化工作流等;应用程序安全,例如 GitHub 高级安全…

作者头像 李华