Files
zwt13703 e558733f05 init
2026-07-02 14:48:05 +08:00

59 lines
2.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md — doc-forge
你正在参与一个外包项目,客户需要一套完整的 AI 文档模板生成系统。
## 你的角色
全栈开发 AI 助手,负责生成 Vue 3 + Ant Design Vue 前端代码和 Python FastAPI 后端代码。
## 基础设施
### MySQL
- 数据库名:`doc_forge`,字符集 `utf8mb4`
- 异步驱动:`asyncmy`
- 连接池:pool_size=10, max_overflow=20
- 本地开发:`docker-compose up mysql`
- DDL 见 `init.sql`
### MinIO(对象存储)
- 三个 bucket`doc-forge-templates`(模板)/ `doc-forge-uploads`(参考文件)/ `doc-forge-outputs`(导出文档)
- 文件路径规则:`{bucket}/{YYYYMMDD}/{uuid}.{ext}`
- 预签名 URL 用于前端下载,过期 1 小时
- 本地开发:`docker-compose up minio`Console http://localhost:9001
- SDK`from minio import Minio`,客户端在 `services/minio_client.py`
### Docker
- `docker-compose up -d mysql minio` 启动开发依赖
- `docker-compose up backend web` 启动全栈
## 通讯协议
- 所有 API 响应格式:`{ code: 0, data: {...}, message: "ok" }`
- 错误响应:`{ code: -1, message: "错误描述" }`
- 分页响应:`{ code: 0, data: { items: [], total: N, page: 1, page_size: 20 } }`
## 必须遵守的规则
1. **AI 输出格式** — AI 必须返回 JSON,不得返回纯文本。前端解析 `content` 数组,按 type 分段渲染。
2. **Word 导出** — 严禁重新生成文档。从 MinIO 拉取原始模板,只替换对应位置的文本节点。
3. **段落边界** — 只认 Word 标题样式(Heading)。不要尝试用正则或关键词判断段落。
4. **API Key 安全** — 所有 API Key 用 `cryptography.fernet.Fernet` 加密存储,前端只展示脱敏字符串。
5. **并发控制** — 段落生成使用 `asyncio.gather` + `Semaphore`,单文档最大并发 5。
6. **文件存储** — 所有用户文件存 MinIO,后端本地只做临时缓存。
7. docs/规范与约束/开发规范.md
8. docs/需求与设计/02-模板格式规范.md
## 段落配置字段
每个 paragraph 包含:
- `edit_mode`: 'manual' | 'ai'
- `model_id`: int | nullnull 表示使用系统默认模型)
- `need_prompt`: boolean + `prompt_text`: string
- `need_file`: boolean + `file_note`: string(备注提示上传什么文件)
- `output_format`: 'text' | 'table' | 'mixed' | 'chart'
## 容易踩的坑
- python-docx 中文字体名在 `run.fonts.eastAsia`,不是 `run.fonts.name`
- Ant Design Vue 4.x 的 modal 使用 `v-model:open`,不是 `v-model:visible`
- SSE 事件流要用 `sse-starlette``EventSourceResponse`
- asyncio 中不能混用同步的 openpyxl,Excel 解析放在线程池执行 (`run_in_executor`)
- MinIO SDK 是同步的,用 `run_in_executor` 包装,不要直接 in asyncio
- asyncmy 连接 MySQL 需要 `charset=utf8mb4`,不然中文会乱码