2026-05-22 10:42:19 +08:00
|
|
|
|
# X-Financial Agent 协作规范
|
|
|
|
|
|
|
|
|
|
|
|
## 语言规范
|
|
|
|
|
|
|
|
|
|
|
|
- 所有分析、解释、计划、提交说明和最终回复默认使用简体中文。
|
|
|
|
|
|
- 技术结论要直击重点,必要时给出可验证的文件、命令或测试结果。
|
|
|
|
|
|
|
2026-06-24 10:41:56 +08:00
|
|
|
|
## 变更日志 Skill 规范
|
|
|
|
|
|
|
2026-06-25 09:35:18 +08:00
|
|
|
|
- 每次修复 bug 后,必须调用项目级 Skill `agent-change-log`,并在 `document/development/YYYY-MM-DD/dev-logs/bugs/<bug-slug>.md` 记录该 bug 的修复内容。
|
|
|
|
|
|
- 新增功能、重构、配置或项目文档变更不再写入旧的 `document/work-log/YYYY-MM-DD.md`;功能点默认沉淀到 `document/development/YYYY-MM-DD/feature/<具体功能点>/CONCEPT.md` 和 `TODO.md`。
|
|
|
|
|
|
- 写 bug 日志前必须先执行 Git 拉取检查:默认运行 `git fetch --all --prune`、`git status -sb`、`git log HEAD..@{u}` 和 `git log @{u}..HEAD`。发现其他智能体已提交到上游或本地 ahead 提交时,要把这些提交摘要写进 bug 修复记录。
|
|
|
|
|
|
- 自动化触发由 `tools/agent-change-log/update_change_log.py` 和 `.githooks/post-commit` 提供;新 checkout 需要执行 `tools/agent-change-log/install_post_commit_hook.sh` 安装到本地 `.git/hooks/post-commit` 后,提交后才会按 `--kind auto` 自动识别 bug-like commit 并写入 `dev-logs/bugs`。
|
|
|
|
|
|
- bug 日志只保留 `## 修复记录`,记录具体时间、改了什么、操作了什么、验证了什么和影响;不再写 `遗留问题` 和 `TODO` 两块。
|
|
|
|
|
|
- 每天 17:00 生成当天综合日志:读取 `document/development/YYYY-MM-DD/feature/` 和 `document/development/YYYY-MM-DD/dev-logs/bugs/`,分析功能点与 bug 修复后写入 `document/development/YYYY-MM-DD/work-logs.med`。
|
2026-06-24 10:41:56 +08:00
|
|
|
|
|
2026-05-22 10:42:19 +08:00
|
|
|
|
## 通用代码拆分规范
|
|
|
|
|
|
|
|
|
|
|
|
无论写前端、后端还是算法代码,都必须主动避免“所有方法堆在一个类里 / 一个组件里 / 一个模块里”的写法。遇到类、组件或核心模块持续变大时,优先按职责拆分,而不是继续追加方法和状态。
|
|
|
|
|
|
|
|
|
|
|
|
### 行数与复杂度目标
|
|
|
|
|
|
|
|
|
|
|
|
- 单个类、核心组件、核心算法模块硬上限为 800 行。
|
|
|
|
|
|
- 普通文件建议控制在 300-600 行。
|
|
|
|
|
|
- 复杂业务文件可以接近 800 行,但必须有清晰职责边界。
|
|
|
|
|
|
- 文件或类超过 800 行必须视为重构预警,不应继续直接追加功能。
|
|
|
|
|
|
- 单个类不应长期承载几十个无关方法,更不应演化成上百个方法的万能类。
|
|
|
|
|
|
|
|
|
|
|
|
### 拆分原则
|
|
|
|
|
|
|
|
|
|
|
|
- 对外 API 尽量保持稳定,先把内部实现拆到小模块。
|
|
|
|
|
|
- 按职责拆分:编排、状态管理、持久化、权限、文件存储、OCR/票据分析、规则审核、响应构建、序列化、UI 交互、算法策略、数据转换。
|
|
|
|
|
|
- 新增能力时先判断归属模块;没有合适归属时新增小模块,不要默认塞回主类、主组件或主 Service。
|
|
|
|
|
|
- 拆分必须小步进行,每次提取一个明确职责,并配套运行相关测试。
|
|
|
|
|
|
|
|
|
|
|
|
### X-Financial 重点关注对象
|
|
|
|
|
|
|
|
|
|
|
|
- `ExpenseClaimService`:优先拆分申请单、明细项、附件、票据分析、草稿、规则审核、权限、序列化。
|
|
|
|
|
|
- `UserAgentService`:优先拆分知识库问答、报销预审 payload、Markdown 回复、差旅政策、表单槽位、票据分类、建议动作。
|
|
|
|
|
|
- `OrchestratorService`:优先拆分 agent 路由、工具调用、报销查询、响应构建。
|
|
|
|
|
|
- 前端大型 Vue 页面:优先拆分 composable、view model、样式分片、业务工具函数和子组件。
|
|
|
|
|
|
- 算法/规则模块:优先拆分输入解析、规则匹配、评分策略、结果解释和异常处理。
|
|
|
|
|
|
|
2026-06-01 17:07:14 +08:00
|
|
|
|
## 容器与运行环境(必读)
|
2026-05-22 10:42:19 +08:00
|
|
|
|
|
2026-06-24 12:36:03 +08:00
|
|
|
|
本项目代码是 Docker 容器 `local-x-financial-linux`(镜像 `x-financial-dev:latest`)的源码映射。
|
2026-06-01 17:07:14 +08:00
|
|
|
|
|
|
|
|
|
|
- **容器映射**:宿主机 `D:\Code\Project\X-Financial` ↔ 容器内 `/app`(`docker-compose.yml` 中 `volumes: - .:/app`,`working_dir: /app`)。
|
|
|
|
|
|
- **后端 venv**:容器内位于 `/tmp/x-financial-server-venv`(环境变量 `SERVER_VENV_DIR`),不要假设宿主机上有相同的 venv。
|
|
|
|
|
|
- **外部依赖**:Qdrant(`x-financial-qdrant`)、OnlyOffice(`x-financial-onlyoffice`)也在同一 compose 网络里。
|
|
|
|
|
|
|
|
|
|
|
|
## 验证规范(硬性约束)
|
|
|
|
|
|
|
2026-06-24 12:36:03 +08:00
|
|
|
|
> 本项目代码与运行环境以容器为唯一事实来源。所有后端测试、集成测试、依赖了 Qdrant / OnlyOffice / venv 的验证,都必须在 `local-x-financial-linux` 容器内执行,**不要在宿主机上直接跑 pytest / pip / python**。
|
2026-06-01 17:07:14 +08:00
|
|
|
|
|
|
|
|
|
|
- **进入容器跑命令**(最常用):
|
|
|
|
|
|
```bash
|
2026-06-24 12:36:03 +08:00
|
|
|
|
docker exec -w /app -e SERVER_VENV_DIR=/tmp/x-financial-server-venv local-x-financial-linux <cmd>
|
2026-06-01 17:07:14 +08:00
|
|
|
|
```
|
2026-06-24 12:36:03 +08:00
|
|
|
|
- 跑后端测试:`docker exec -w /app -e SERVER_VENV_DIR=/tmp/x-financial-server-venv local-x-financial-linux /tmp/x-financial-server-venv/bin/pytest -q <path>`
|
|
|
|
|
|
- 交互式排查:`docker exec -it -w /app local-x-financial-linux bash`(登录后默认已在 `/app`)
|
2026-06-01 17:07:14 +08:00
|
|
|
|
- **容器不可用时**(未启动、健康检查失败、镜像丢失):先 `docker compose up -d main` 恢复,再继续验证;不要绕开容器在宿主机另装 venv。
|
|
|
|
|
|
- **单元测试设置合理超时**,避免长时间卡死。涉及外部服务(Qdrant / OnlyOffice / LLM)的测试要么 mock,要么确认 compose 网络中依赖服务在线。
|
|
|
|
|
|
- **每次重构后至少运行对应服务的定向测试**;涉及公共协议时补充端到端或接口测试。
|
|
|
|
|
|
- **修改 docker-compose / start.sh / venv 路径相关代码**时,自己也要回容器里跑一次确认改动生效,不要只改文件就声称完成。
|