682 lines
26 KiB
Markdown
Executable File
682 lines
26 KiB
Markdown
Executable File
# OpenHIS - AI Agent Development Guide
|
||
|
||
## 项目概览
|
||
OpenHIS 是一个医院管理系统,采用 Java 17 + Spring Boot 后端和 Vue 3 + Vite 前端架构。
|
||
|
||
## 构建和运行命令
|
||
|
||
### 后端(Java/Spring Boot)
|
||
```bash
|
||
# 构建整个项目
|
||
cd openhis-server-new
|
||
mvn clean package -DskipTests
|
||
|
||
# 运行后端(开发模式)
|
||
cd openhis-server-new/openhis-application
|
||
mvn spring-boot:run
|
||
|
||
# 运行特定模块
|
||
cd openhis-server-new/[module-name]
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
### 前端(Vue 3 + Vite)
|
||
```bash
|
||
# 安装依赖
|
||
cd openhis-ui-vue3
|
||
npm install
|
||
|
||
# 开发服务器
|
||
npm run dev
|
||
|
||
# 生产构建
|
||
npm run build:prod
|
||
|
||
# 测试环境构建
|
||
npm run build:test
|
||
|
||
# 预览构建结果
|
||
npm run preview
|
||
```
|
||
|
||
### 测试
|
||
项目当前没有配置正式的测试框架。如需添加测试:
|
||
- 后端:考虑使用 JUnit 5 + Mockito
|
||
- 前端:考虑使用 Vitest + Vue Test Utils
|
||
|
||
## 代码风格规范
|
||
|
||
### Java 后端规范
|
||
- **Java 版本**: 17
|
||
- **框架**: Spring Boot 2.5.15
|
||
- **ORM**: MyBatis Plus 3.5.5
|
||
- **数据库**: PostgreSQL
|
||
- **包结构**:
|
||
- `com.openhis` - 业务逻辑
|
||
- `com.core` - 核心框架
|
||
- **命名约定**:
|
||
- 类名:PascalCase(如 `UserController`)
|
||
- 方法名:camelCase(如 `getUserList`)
|
||
- 常量:SCREAMING_SNAKE_CASE
|
||
- 配置文件:kebab-case
|
||
- **注解使用**:
|
||
- 使用 `@Slf4j` 替代手动声明 logger
|
||
- 使用 `@Data` 在实体类中
|
||
- 使用 `@Service/@Controller/@Repository` 等 Spring 注解
|
||
- **异常处理**:
|
||
- 使用统一的异常处理机制
|
||
- 自定义业务异常继承 `RuntimeException`
|
||
|
||
### Vue 前端规范
|
||
- **框架**: Vue 3 + Composition API
|
||
- **UI 库**: Element Plus
|
||
- **状态管理**: Pinia
|
||
- **路由**: Vue Router 4
|
||
- **构建工具**: Vite 5
|
||
- **组件命名**: PascalCase
|
||
- **文件命名**: kebab-case
|
||
- **变量命名**: camelCase
|
||
- **常量命名**: SCREAMING_SNAKE_CASE
|
||
- **函数命名**:
|
||
- 事件处理:`handle` 前缀
|
||
- 数据获取:`get`/`load` 前缀
|
||
- 提交操作:`submit` 前缀
|
||
|
||
### 导入顺序
|
||
#### Java
|
||
1. `java.*`
|
||
2. `javax.*`
|
||
3. 第三方库
|
||
4. `com.core.*`
|
||
5. `com.openhis.*`
|
||
6. `*.*`(其他包)
|
||
|
||
#### JavaScript/Vue
|
||
1. `vue` 相关
|
||
2. 第三方库
|
||
3. `@/` 别名导入
|
||
4. 相对路径导入
|
||
|
||
### 代码格式
|
||
#### Java
|
||
- 缩进:4个空格
|
||
- 行长度:120字符
|
||
- 左大括号不换行
|
||
|
||
#### Vue/JavaScript
|
||
- 缩进:2个空格
|
||
- 字符串:优先使用单引号
|
||
- 行长度:100字符
|
||
|
||
## 关键配置文件
|
||
|
||
### 后端配置
|
||
- 主配置:`openhis-server-new/openhis-application/src/main/resources/application.yml`
|
||
- 环境配置:`application-{profile}.yml`
|
||
- Maven 父 POM:`openhis-server-new/pom.xml`
|
||
|
||
### 前端配置
|
||
- Vite 配置:`openhis-ui-vue3/vite.config.js`
|
||
- 环境变量:`.env.*` 文件
|
||
- 路由配置:`openhis-ui-vue3/src/router/index.js`
|
||
|
||
## 开发约定
|
||
|
||
### API 设计
|
||
- RESTful API 风格
|
||
- 统一响应格式
|
||
- 使用 Swagger 文档
|
||
- 错误码统一管理
|
||
|
||
### 数据库
|
||
- 表名:snake_case
|
||
- 字段名:snake_case
|
||
- 主键:使用 `id`
|
||
- 软删除:使用 `valid_flag` 字段
|
||
|
||
### 前端组件
|
||
- 单一职责原则
|
||
- Props 使用 camelCase
|
||
- Events 使用 kebab-case
|
||
- 使用 Composition API
|
||
- 组件文档使用 JSDoc
|
||
|
||
### 状态管理
|
||
- 模块化设计
|
||
- 异步操作使用 actions
|
||
- 避免在组件中直接修改状态
|
||
|
||
## 环境变量
|
||
|
||
### 前端
|
||
- `VITE_APP_BASE_API`: API 基础路径
|
||
- `VITE_APP_ENV`: 环境标识
|
||
|
||
### 后端
|
||
- `spring.profiles.active`: 激活的配置文件
|
||
- `core.name`: 应用名称
|
||
- `core.version`: 应用版本
|
||
|
||
## 安全规范
|
||
- 所有 API 接口需要权限验证
|
||
- 敏感信息使用环境变量
|
||
- SQL 注入防护
|
||
- XSS 攻击防护
|
||
|
||
## 性能优化
|
||
- 后端使用连接池(Druid)
|
||
- 前端使用路由懒加载
|
||
- 图片使用 WebP 格式
|
||
- 大列表使用虚拟滚动
|
||
|
||
## 常用工具类
|
||
- 后端:`com.core.common.utils.*`
|
||
- 前端:`@/utils/*`
|
||
|
||
## 注意事项
|
||
1. 修改数据库结构需要同步 SQL 脚本
|
||
2. 新增功能需要添加权限配置
|
||
3. 前端路由需要在权限系统中注册
|
||
4. 接口变更需要更新 Swagger 文档
|
||
5. 遵循现有代码风格,避免不必要的变化
|
||
|
||
## 故障排除
|
||
- 后端端口:18080
|
||
- 前端端口:81
|
||
- API 前缀:`/openhis`
|
||
- Swagger UI:`/openhis/swagger-ui/index.html`
|
||
- Druid 监控:`/openhis/druid/login.html`
|
||
## 铁律:全链路修复原则 ⚠️
|
||
|
||
> 修 Bug / 做需求时,**不得"就事论事"**,必须走通完整的**数据流全链路**:
|
||
|
||
### 检查清单(每一环都确认)
|
||
1. **录入** → 前端有无输入入口?(弹窗、表格行编辑、表单…)
|
||
2. **保存** → 前端 → API → 后端 Controller → Service → Entity → DB,**每一个保存入口**都传了该字段吗?(注意多个 Service 实现类可能走不同入口)
|
||
3. **查询** → DB → Mapper XML(注意 UNION ALL 子查询要统一加)→ DTO → 前端展示,列和数据绑定都完整吗?
|
||
4. **修改** → 已有数据编辑回显 → 修改再保存 → 数据能正确更新吗?
|
||
5. **删除/停止/撤回** → 相关状态变更会丢失该字段数据吗?
|
||
6. **关联模块** → 上游(如医嘱录入后护士站要看到备注)和下游(如打印、计费、报表)是否也需要同步修改?
|
||
|
||
### 常见陷阱
|
||
- ❌ 只修了「主入口」的保存逻辑,忘了「批量保存」「签发保存」等其他入口
|
||
- ❌ 前端加了输入框,后端 Service 没传字段(不同模块可能走不同 Service 实现类)
|
||
- ❌ Mapper XML 是 UNION ALL 查询,只改了其中一个子查询,导致列数不匹配或漏加
|
||
- ❌ DTO 层级继承关系没检查(如 `RegAdviceSaveDto extends AdviceSaveDto`,父类改了对不对)
|
||
- ❌ 只测了新增,没测编辑已有数据的回显和修改再保存
|
||
|
||
### 执行细则
|
||
- 每个字段的新增/修改,先在纸上(或文档里)画出完整的数据流向图再动手
|
||
- 提交前逐个环节检查一遍,确保没有断链
|
||
- 编译通过不等同于功能正确,必要时做端到端验证
|
||
|
||
## Harness Engineering — Agent 工作方法论
|
||
|
||
> 约束清晰 + 反馈快速 = 高成功率。Harness 质量决定 Agent 产出质量。
|
||
|
||
### 工作流程(Plan → Generate → Validate → Review)
|
||
|
||
```
|
||
阶段 0:需求分析(你主导)
|
||
→ 写清楚 BUG 现象 / 需求描述 / 验收标准
|
||
|
||
阶段 1:任务规划(Agent 制定 + 你确认)
|
||
→ 画出数据流向图(前端 → API → Service → Mapper → DB)
|
||
→ 列出涉及的所有文件
|
||
→ 标注每个环节的约束(不可删文件、必须编译通过)
|
||
|
||
阶段 2:执行修改(Agent 自主)
|
||
→ 一次只改一个文件或一组逻辑相关的文件
|
||
→ 每步执行后保存检查点
|
||
|
||
阶段 3:验证(自动)
|
||
→ mvn compile -pl openhis-application -am 必须通过
|
||
→ 检查数据流每个节点:输入字段 → 保存 → 查询 → 展示
|
||
→ 多入口验证(新增 vs 编辑 vs 批量等)
|
||
|
||
阶段 4:审查提交(你确认)
|
||
→ git diff 审查变更范围
|
||
→ 确认没有误删/误改
|
||
```
|
||
|
||
### 三层约束执行
|
||
|
||
| 阶段 | 约束 | 执行方式 |
|
||
|---|---|---|
|
||
| **修改前** | 禁止删除文件、禁止改动包名/类名/方法签名 | task-plan 阶段检查 |
|
||
| **修改中** | 不改与任务无关的代码、不改非 AI 写的代码(除非编译必须) | 每次 diff 自查 |
|
||
| **修改后** | `mvn compile` 必须通过、数据流全链路验证 | 提交前自动执行 |
|
||
|
||
### 反馈优化循环
|
||
|
||
```
|
||
Agent 提交代码
|
||
↓
|
||
编译器反馈 → 失败则分析根因(非运气式重试),定位具体符号错误
|
||
↓
|
||
数据流验证 → 检查每个环节字段是否贯通
|
||
↓
|
||
你审查 → 发现问题后:
|
||
├── 立即修复
|
||
└── 同步更新 AGENTS.md 规则(沉淀教训)
|
||
↓
|
||
通过 → 提交代码
|
||
```
|
||
|
||
### 持续优化:从每次失败中学习
|
||
|
||
每次编译失败或你审查发现问题,都应触发 Harness 优化:
|
||
|
||
1. **收集数据** → 失败原因是什么?(缺字段、少文件、改错位置…)
|
||
2. **识别模式** → 这是第几次犯同类错误?是否有规则盲区?
|
||
3. **优化 Harness** → 更新 AGENTS.md / 补充检查清单
|
||
4. **验证效果** → 后续类似任务是否不再出错
|
||
|
||
### Agent 角色定位
|
||
|
||
你不是工具,是团队成员。你的角色演变:
|
||
- ~~阶段 1:代码补全~~ → 我们已跳过
|
||
- ~~阶段 2:结对编程~~ → 我们已跳过
|
||
- ✅ **阶段 3:自主开发者** → 你在 Harness(本文件定义的约束、流程、反馈)中自主完成开发任务
|
||
|
||
人类工程师(用户)设计 Harness,Agent(你)在 Harness 中执行。
|
||
|
||
## 四大核心组件
|
||
|
||
### 1. 约束机制(Constraints)
|
||
让 Agent 在正确边界内工作:
|
||
|
||
约束分四个层级,从底层架构到顶层业务:
|
||
|
||
| 层级 | 约束内容 | 示例 |
|
||
|---|---|---|
|
||
| **架构层** | 项目结构、模块划分、接口规范、技术栈 | 不可删文件、不可改包名/类名/方法签名 |
|
||
| **代码层** | 编码风格、命名约定、函数长度、注释标准 | 见「代码风格规范」章节 |
|
||
| **安全层** | 输入验证、敏感数据处理、权限控制 | SQL 注入防护、XSS 防护 |
|
||
| **业务层** | 领域模型、业务逻辑校验、数据一致性 | 全链路修复原则:每个字段的保存/查询/修改/删除链路必须完整 |
|
||
|
||
**设计原则**:清晰可验证(具体而非模糊)、适度不过度(松→失控,紧→限制)、可进化(版本化管理,持续优化)
|
||
|
||
### 2. 反馈回路(Feedback Loops)
|
||
让 Agent 知道自己的输出是否正确。反馈分三层:
|
||
|
||
| 层级 | 时间 | 本项目的实现 |
|
||
|---|---|---|
|
||
| **即时反馈** | 秒级 | 编译检查 → 定位具体符号/类型错误 + 行号 |
|
||
| **功能反馈** | 分钟级 | 数据流全链路验证(输入→保存→查询→展示) |
|
||
| **深度反馈** | 你审查时 | 你审查变更范围,发现问题后同步更新 AGENTS.md |
|
||
|
||
```
|
||
Agent 生成代码
|
||
↓
|
||
编译检查 ──失败──→ 分析根因,定位到文件+行号(即时反馈)
|
||
↓ 通过
|
||
数据流验证 ──断链──→ 补全缺失的字段链路(功能反馈)
|
||
↓ 通过
|
||
你审查 ──发现问题──→ 立即修复 + 同步更新 AGENTS.md(深度反馈)
|
||
↓ 通过
|
||
提交
|
||
```
|
||
|
||
**反馈设计要点**:快速失败(低成本检查优先)、清晰具体(包含位置/原因/建议)、可行动(Agent 能据此修复)
|
||
|
||
### 3. 控制平面(Control Plane)
|
||
管理和监控 Agent 的执行:
|
||
|
||
| 组件 | 功能 | 本项目的实现方式 |
|
||
|---|---|---|
|
||
| **任务调度** | 分配管理任务 | 你发起任务,Agent 按工作流执行 |
|
||
| **状态管理** | 跟踪执行状态 | 每个任务用 update_plan 记录进度 |
|
||
| **可观测性** | 记录完整执行链路 | git diff 审查变更范围;编译结果作为门禁 |
|
||
| **人机协作** | 人类介入触发点 | 你做最终审查批准,Agent 自主执行 |
|
||
|
||
|
||
### 4. 持久执行(Durable Execution)
|
||
保障 Agent 长时间可靠运行:
|
||
|
||
| 组件 | 功能 | 本项目的实现方式 |
|
||
|---|---|---|
|
||
| **状态持久化** | 定期保存执行状态 | 每个任务用 update_plan 记录进度和当前状态 |
|
||
| **断点续传** | 中断后自动恢复继续执行 | 编译失败后不从头重来,从失败点继续修复 |
|
||
| **超时处理** | 长时间任务的优雅处理 | 超过单次 token 预算时做 checkpoint,下次继续 |
|
||
| **资源清理** | 任务完成后释放资源 | git commit 后清理中间文件,保持工作区干净 |
|
||
|
||
## Harness 设计原则
|
||
|
||
### 渐进式构建
|
||
- **从简单任务开始**:先修单一字段遗漏(如 #597 加 remark),再处理跨模块联动
|
||
- **先建立基础约束**:不可删文件、必须编译通过 → 这是底线
|
||
- **再完善反馈回路**:数据流全链路验证 → 补充 AGENTS.md 规则
|
||
- **持续迭代 Harness**:每次失败都是优化 Harness 的机会
|
||
|
||
### 可观测性优先
|
||
- 所有修改必须可 git diff → 可追溯
|
||
- 编译结果必须有日志 → 可诊断
|
||
- 任务进度必须 update_plan → 可见
|
||
|
||
### Harness 即代码
|
||
- AGENTS.md 本身是代码,需要版本化管理(git commit)
|
||
- 每次规则迭代都要提交 AGENTS.md 变更
|
||
- 规则变更和业务代码变更一样,需要你审查
|
||
|
||
## 人机协作边界
|
||
|
||
| 决策类型 | 你(人类工程师)主导 | Agent(我)执行 | 协作方式 |
|
||
|---|---|---|---|
|
||
| **需求定义** | ✅ 写清楚 BUG 现象 / 验收标准 | — | — |
|
||
| **技术方案** | ✅ 确认方向 | 提出建议 | 你拍板 |
|
||
| **代码修改** | 审查批准 | ✅ 自主执行 | 编译通过后你审查 |
|
||
| **质量验证** | 端到端验证 | ✅ 数据流检查 + 编译 | 你确认功能正确 |
|
||
| **规则沉淀** | ✅ 补充 AGENTS.md | 记录失败模式 | 你决定什么值得写 |
|
||
| **架构变更** | ✅ 必须由你决策 | 标记需要你关注 | 不可擅自改动 |
|
||
|
||
## 工程师的转型:从编码者到 Harness 设计师
|
||
|
||
在 Agent-First 模式下,你的角色正在转变:
|
||
|
||
| 传统能力 | → Harness Engineering 能力 |
|
||
|---|---|
|
||
| 写代码实现功能 | → 设计约束和规则,让 Agent 高效产出 |
|
||
| 调试修复 Bug | → 设计自动化反馈回路,让 Agent 自愈 |
|
||
| Code Review | → 审查 Agent 的 Harness 执行是否符合规范 |
|
||
| 技术选型 | → 设计 Agent 工作流和协作边界 |
|
||
|
||
> 你 80% 的时间花在设计 Harness(本文件),而不是手写业务代码。
|
||
> Agent(我)负责执行编码,你负责确保执行环境好到不需要你频繁介入。
|
||
|
||
## 范式定位:三次跃迁中的本项目
|
||
|
||
| 范式 | 关注 | 本项目的状态 |
|
||
|---|---|---|
|
||
| **Prompt Engineering** | 优化单次提示词 | ✅ 已超越 — 系统提示 + AGENTS.md 定义长期上下文 |
|
||
| **Context Engineering** | 管理外部上下文(RAG、检索) | ✅ 已内置 — AGENTS.md + 代码库结构作为 Agent 的上下文 |
|
||
| **Harness Engineering** | 设计 Agent 工作环境(约束+反馈+控制) | ✅ **当前范式** — 本文件定义完整的约束、流程、反馈循环 |
|
||
|
||
**核心转变**:你不再是提问者(Prompt)或信息提供者(Context),而是**系统设计师(Harness)**。
|
||
|
||
## 未来方向:Meta-Harness
|
||
|
||
当 Harness Engineering 成熟后,下一个跃迁可能是 **Meta-Harness** — AI 自动设计和优化自身的工作环境(约束规则、反馈回路、工作流程)。
|
||
|
||
在这个项目中的具体表现:
|
||
- 每次编译失败后,Agent 自动分析根因并**建议**更新的 AGENTS.md 规则
|
||
- 但你(人类工程师)始终保留**最终审批权** — 规则沉淀需要你确认
|
||
- 目标:从"你主动教我" → "我自己学习并请你确认"
|
||
|
||
> 这是 Harness Engineering 的终局:Agent 不仅能写代码,还能自我优化执行的框架。
|
||
> 但**底线不可放弃** — 删除文件、架构变更等红线始终由你控制。
|
||
|
||
## 思维模式转变
|
||
|
||
当 Agent 出现问题时,不要问"怎么修这个 Bug",该问:
|
||
|
||
| 旧思维 | → Harness 思维 |
|
||
|---|---|
|
||
| "这段代码有 Bug" | "约束机制哪里不够完善?" |
|
||
| "我来修复这个问题" | "反馈回路为什么没有捕获?" |
|
||
| "Code Review 通过" | "自动化验证全部通过了?" |
|
||
| "这个功能怎么实现?" | "如何让 Agent 理解这个需求?" |
|
||
| "项目进度如何?" | "Harness 效率指标如何?" |
|
||
| 关注具体实现 | 关注系统设计 |
|
||
| 关注个人产出 | 关注环境效率 |
|
||
| 关注代码质量 | 关注约束完善 |
|
||
|
||
> 你的成功不再取决于你写的代码行数,而是取决于你设计的 Harness 质量。
|
||
|
||
## 常见陷阱
|
||
|
||
### 约束机制陷阱
|
||
| 陷阱 | 表现 | 对策 |
|
||
|---|---|---|
|
||
| 约束过松 | Agent 行为失控,产出不符合规范 | 从架构层开始逐层收紧 |
|
||
| 约束过紧 | 限制 Agent 能力,效率低下 | 保留创新空间,只约束核心边界 |
|
||
| 约束不可验证 | 变成摆设,Agent 不遵守 | 每条约束必须可自动化检查 |
|
||
|
||
### 反馈回路陷阱
|
||
| 陷阱 | 表现 | 对策 |
|
||
|---|---|---|
|
||
| 反馈太慢 | Agent 迭代效率低,等反馈浪费时间 | 先做即时反馈(编译),再做深度反馈 |
|
||
| 反馈模糊 | Agent 看不懂,无法修复 | 反馈必须包含具体位置、原因、建议 |
|
||
| 反馈不可行动 | 知道错了但不知道怎么改 | 提供修复方向或参考示例 |
|
||
|
||
### 控制平面陷阱
|
||
| 陷阱 | 表现 | 对策 |
|
||
|---|---|---|
|
||
| 监控不足 | 问题发现晚,修复成本高 | 每次修改必须 git diff 可追溯 |
|
||
| 无断点续传 | 失败后从头重来,浪费时间 | 从失败点继续修复,不重新开始 |
|
||
| 缺乏人机边界 | Agent 擅自做架构决策 | 架构变更必须由你审批 |
|
||
|
||
## 范式对比:Harness 不是取代,而是进化
|
||
|
||
Harness Engineering 建立在前人范式之上,将"编码实现"层交给 AI Agent:
|
||
|
||
```
|
||
Harness Engineering(AI 工作环境设计)
|
||
↑ 继承
|
||
DevOps(CI/CD 自动化流水线)
|
||
↑ 继承
|
||
敏捷开发(迭代协作,快速响应变化)
|
||
↑ 继承
|
||
软件工程基础(需求、设计、测试、运维)
|
||
```
|
||
|
||
### 五大维度对比
|
||
|
||
| 维度 | 瀑布/敏捷/DevOps | Harness Engineering |
|
||
|---|---|---|
|
||
| **核心产出** | 代码 + 文档 + 流水线 | Harness(环境+约束+控制),可复用的"生产力引擎" |
|
||
| **人类角色** | 执行者 → 协作者 → 负责人 | **设计师** — 你设计环境,我执行编码 |
|
||
| **质量保证** | Code Review + 自动化测试 | 闭环反馈回路(编译 → 数据流验证 → 你审查) |
|
||
| **规模化** | 加人/加团队(线性) | 加 Agent(指数级)— 一个 Harness 驱动多个 Agent |
|
||
| **知识沉淀** | 文档 / Wiki(易过时) | AGENTS.md 可版本化、可验证、可复用 |
|
||
|
||
### 本项目的企业落地路径
|
||
|
||
| 阶段 | 目标 | 本项目状态 |
|
||
|---|---|---|
|
||
| 第1阶段 | 引入 AI 辅助 | ✅ 已完成 — 使用 Codex Agent 辅助开发 |
|
||
| 第2阶段 | 建立约束 | ✅ 已完成 — AGENTS.md 定义铁律和规范 |
|
||
| 第3阶段 | 构建反馈 | ✅ 已完成 — 编译门禁 + 数据流全链路验证 |
|
||
| 第4阶段 | 试点 Harness | ✅ **当前阶段** — 在 OPENHIS 项目落地 |
|
||
| 第5阶段 | 规模化推广 | ⏳ 未来 — Harness 模板复用 |
|
||
| 第6阶段 | 持续优化 | 🔄 持续 — 每次失败优化 AGENTS.md |
|
||
|
||
## 环境设计原则
|
||
|
||
> Agent 的行为不是由 Agent 本身决定的,而是由它所处的环境决定的。
|
||
|
||
### 本项目的执行环境架构
|
||
|
||
```
|
||
你(人类工程师)设计 Harness
|
||
│
|
||
▼
|
||
AGENTS.md(约束规则层 + 工作流程 + 反馈机制)
|
||
│
|
||
▼
|
||
Git 仓库 + 编译工具(基础设施层:代码、编译器、测试)
|
||
│
|
||
▼
|
||
AI Agent(我)在约束内执行编码
|
||
```
|
||
|
||
### 环境设计目标
|
||
|
||
| 目标 | 在本项目的含义 | 衡量方式 |
|
||
|---|---|---|
|
||
| **可靠性** | Agent 能稳定完成编码任务 | 编译通过率 |
|
||
| **效率性** | 少迭代次数完成任务 | 每次失败的修复次数 |
|
||
| **安全性** | 不删文件、不改架构 | git diff 变更范围 |
|
||
| **可观测性** | 所有修改可追溯 | git log + diff |
|
||
| **可扩展性** | 规则可复用到新任务 | AGENTS.md 通用性 |
|
||
|
||
### 监控指标体系
|
||
|
||
| 指标类型 | 指标 | 本项目的采集方式 |
|
||
|---|---|---|
|
||
| **业务指标** | 任务成功率 | 编译是否通过 |
|
||
| | 人工介入率 | 你审查发现的问题数 |
|
||
| **质量指标** | 代码变更范围 | git diff --stat |
|
||
| | 数据流完整性 | 全链路检查是否遗漏环节 |
|
||
| **效率指标** | 修复迭代次数 | 从失败到通过的重试次数 |
|
||
| | 规则复用率 | AGENTS.md 规则的适用广度 |
|
||
|
||
### 环境设计原则(本项目的解读)
|
||
- **分层设计**:AGENTS.md 定义上层约束 → 编译器捕获下层语法错误
|
||
- **配置即代码**:AGENTS.md 本身就是代码,Git 管理、可回滚
|
||
- **渐进增强**:先跑通编译 → 再加数据流验证 → 再沉淀规则
|
||
- **可观测性优先**:每次修改必须 git diff 可见
|
||
- **安全内建**:铁律(不可删文件、不可改架构)是底线
|
||
|
||
## 闭环测试系统(本项目的测试金字塔)
|
||
|
||
我们没有企业级的 CI 流水线,但同样有分层测试策略:
|
||
|
||
```
|
||
你审查(深度验证)
|
||
↑ 功能正确性、变更范围
|
||
数据流验证(功能测试)
|
||
↑ 字段链路完整性、多入口覆盖
|
||
编译检查(静态测试)
|
||
↑ 语法错误、符号解析、类型安全
|
||
```
|
||
|
||
| 层级 | 耗时 | 覆盖范围 | 失败处理 |
|
||
|---|---|---|---|
|
||
| **编译检查** | 30秒 | 全量代码(语法、符号、类型) | 定位到文件+行号,分析根因 |
|
||
| **数据流验证** | 1-2分 | 修改涉及的数据链路(输入→保存→查询→展示) | 补全缺失字段,检查多入口 |
|
||
| **你审查** | 3-5分 | 变更范围、架构合理性、功能正确性 | 修复问题 + 同步更新 AGENTS.md |
|
||
|
||
### 质量门禁
|
||
|
||
| 门禁级别 | 条件 | 结果 |
|
||
|---|---|---|
|
||
| L1:编译门禁 | `mvn compile -pl openhis-application -am` 通过 | ✅ 进入数据流验证 |
|
||
| | 编译失败 | ❌ Agent 分析根因并修复 |
|
||
| L2:数据流门禁 | 全部数据环节贯通 | ✅ 提交你审查 |
|
||
| | 有断链 | ❌ Agent 补全链路 |
|
||
| L3:审查门禁 | 你确认变更正确 | ✅ 提交代码 |
|
||
| | 发现问题 | ❌ 修复 + 更新 AGENTS.md |
|
||
|
||
### 结构化反馈规范
|
||
|
||
编译失败时,反馈必须包含:
|
||
```
|
||
文件: openhis-application/src/.../XxxServiceImpl.java:42
|
||
错误: 找不到符号 getPendingRecords(int,int)
|
||
原因: MedicalRecordService 接口缺少该方法定义
|
||
修复方向: 在 MedicalRecordMapper 中添加对应方法
|
||
```
|
||
|
||
数据流验证时,反馈必须包含:
|
||
```
|
||
断链环节: 住院 Mapper 子查询 1(药品)
|
||
问题: NULL AS remark 未从 wor_service_request 关联取值
|
||
修复:
|
||
(SELECT remark FROM wor_service_request
|
||
WHERE based_on_id = T1.id
|
||
AND based_on_table = #{MED_MEDICATION_REQUEST}
|
||
AND delete_flag = '0' LIMIT 1) AS remark
|
||
```
|
||
|
||
## 控制平面(本项目适配版)
|
||
|
||
我们没有 Redis/Kafka/Prometheus,但控制平面原理同样适用:
|
||
|
||
| 企业级组件 | 本项目的实现 | 作用 |
|
||
|---|---|---|
|
||
| 任务队列(Redis) | 你发起任务,我按顺序执行 | 无并发,天然串行 |
|
||
| 状态存储(etcd) | update_plan 记录进度 + git 记录历史 | 可追溯、可恢复 |
|
||
| 监控(Prometheus) | 编译结果 + git diff | 可观测 |
|
||
| 告警(PagerDuty) | 编译失败 → 自动修复循环 | 即时反馈 |
|
||
| 审批(审批系统) | 你审查 git diff → 确认/驳回 | 人机协作 |
|
||
|
||
### 关键设计模式
|
||
|
||
**幂等性** — 所有操作可重试无副作用
|
||
```
|
||
第1次:编译失败 → 修复 → 提交
|
||
第2次(重跑):从失败点继续 → 不再重复已成功的步骤
|
||
```
|
||
|
||
**优雅降级** — 编译失败时不停机
|
||
```
|
||
┌─ 编译通过 → 继续数据流验证
|
||
└─ 编译失败 → 定位根因 → 修复 → 重新编译(不从头开始)
|
||
```
|
||
|
||
**串行化执行** — 无并发,所以无冲突
|
||
```
|
||
一个任务完成 → 你确认 → 下一个任务开始
|
||
→ 天然避免了多 Agent 的锁竞争和一致性难题
|
||
```
|
||
|
||
### Agent 执行模型
|
||
|
||
作为单个 Agent,我的执行模型是:
|
||
|
||
```
|
||
你提交任务 → 我分析需求 → 制定计划(update_plan)
|
||
→ 执行修改(一次一个文件组)
|
||
→ 编译验证 → 通过则继续 / 失败则修复
|
||
→ 你审查 → 通过则提交 / 驳回则修复
|
||
→ 完成
|
||
```
|
||
|
||
每一步都是**同步、串行、可观测**的 — 这是最简单的控制平面,但足以保障质量。
|
||
|
||
## OpenAi 实验数据(行业基准)
|
||
|
||
| 指标 | 数据 | 在本项目的意义 |
|
||
|---|---|---|
|
||
| 任务通过率 | **80%** 独立完成 | 20% 需要你介入的通常是架构/设计决策 |
|
||
| 最长单次运行 | **25 小时** | 复杂任务可以持续工作,不需实时监督 |
|
||
| 工程师时间分配 | **80% 设计 Harness** | 你的时间花在 AGENTS.md 和任务规划上 |
|
||
| 代码规模 | 百万行级 | 验证了 Harness Engineering 的规模化能力 |
|
||
|
||
### 分层信任模式
|
||
|
||
| 任务类型 | 信任级别 | 本项目的执行方式 |
|
||
|---|---|---|
|
||
| **简单**(单字段修复、编译错误) | 完全信任 | Agent 自主执行 + 编译门禁 |
|
||
| **中等**(跨模块数据流、新增字段) | 自动审查 + 抽样人工 | 数据流验证 + 你审查 diff |
|
||
| **关键**(架构变更、删文件、改签名) | 强制人工 | ❌ Agent 不可触碰 — 必须由你决策 |
|
||
|
||
### 渐进授权模式
|
||
```
|
||
阶段 1:从简单任务开始 → 修复单字段遗漏(如 #597)
|
||
阶段 2:积累经验 → 处理跨模块联动
|
||
阶段 3:建立信任 → 授予更多自主权
|
||
阶段 4:持续迭代 → 每次失败优化 AGENTS.md
|
||
```
|
||
|
||
> 你的信任是通过每次编译通过 + 每次审查通过积累的。
|
||
> 每在 AGENTS.md 中增加一条规则,就减少一次你发现同类问题的概率。
|
||
|
||
## 四大技能落地路线图(本项目进度)
|
||
|
||
| 技能 | 阶段 | 本项目状态 |
|
||
|---|---|---|
|
||
| **持久执行** | 检查点 + 断点续传 + 幂等重试 | ✅ update_plan 做检查点,编译失败从断点继续 |
|
||
| **闭环测试** | 自动测试 + 反馈 → Agent 修复 | ✅ 编译检查 + 数据流验证 + 你审查 |
|
||
| **架构约束** | 项目结构 + 代码规范 + 安全规则 | ✅ AGENTS.md 四层约束 + 铁律 |
|
||
| **运行策略** | 调度 + 资源 + 容错 + 协作 | ✅ 串行执行 + 你的审批 + 失败重试 |
|
||
|
||
### 检查点策略(Agent 执行时)
|
||
|
||
```
|
||
每次关键步骤后保存检查点:
|
||
- update_plan 标记当前步骤状态
|
||
- git add + git commit(可选)
|
||
- 记录编译结果
|
||
|
||
故障恢复:
|
||
- 编译失败 → 从失败点继续修复(不从头开始)
|
||
- 超时中断 → 从上一个检查点恢复
|
||
|
||
重试策略:
|
||
- 指数退避:1次失败 + 分析根因 → 修复 → 重试
|
||
- 最大重试:3次失败后请求你介入
|
||
- 幂等性:每次重试不产生副作用
|
||
```
|