baodan/AGENTS.md

179 lines
7.6 KiB
Markdown
Raw 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.

# 保险智能客服系统
## 项目概述
基于 BaoDan 源码的保险行业智能客服系统。**直接在 BaoDan 源码上开发**,自研代码放在 `api/insurance/` 目录下,与 BaoDan 代码物理隔离,只改 BaoDan 的 `main.py` 注册路由。
## 架构
```
用户浏览器 / 企微 H5
┌─ BaoDan 服务(你的代码 + BaoDan 代码,同一进程)────────┐
│ BaoDan WebApp对话界面
│ BaoDan 管理后台(知识库/Prompt/模型/日志) │
│ 你的 Extensions
│ · api/insurance/wecom/ 企微机器人 + OAuth │
│ · api/insurance/recommend/ 产品推荐 │
│ · api/insurance/permissions/角色权限 │
│ └── api/insurance/stats/ 数据统计 │
└────────────────────────────────────────────────────────┘
└── 你的前端Vue 3独立项目
```
## 核心原则
1. **在 BaoDan 源码上开发**,自研代码放 `api/insurance/`,与 BaoDan 代码隔离
2. **只改 BaoDan 的 `main.py`**(注册路由)和 `web/.env.local`(开启 iframe其余 BaoDan 文件不动
3. **复用 BaoDan 基础设施**认证、数据库、Redis、日志全部用 BaoDan 现有的,不重复造轮子
4. **BaoDan 升级安全**:你的代码在独立目录,升级时只合并 `main.py` 那几行改动
5. **前端独立**Vue 3 项目,对话页面 iframe 嵌入 BaoDan WebApp
## 目录结构
```
baodan-main/
├── api/
│ ├── core/ # BaoDan 核心(不动)
│ ├── controllers/ # BaoDan API 路由(不动)
│ ├── models/ # BaoDan 数据模型(不动)
│ ├── services/ # BaoDan 业务逻辑(不动)
│ ├── extensions/ # BaoDan 扩展(不动)
│ │
│ ├── insurance/ # ★ 你的代码(新建目录)
│ │ ├── __init__.py
│ │ ├── wecom/ # 企微机器人 + OAuth
│ │ │ ├── wecom_bot.py # 消息回调处理
│ │ │ ├── wecom_oauth.py # OAuth 登录
│ │ │ └── routes.py # Blueprint 路由
│ │ ├── recommend/ # 产品推荐
│ │ │ ├── recommend_api.py # 推荐接口
│ │ │ └── workflow_helper.py# Workflow 调用封装
│ │ ├── permissions/ # 角色权限
│ │ │ ├── models.py # 角色/权限模型
│ │ │ ├── middleware.py # 权限校验
│ │ │ └── routes.py # 角色管理接口
│ │ ├── stats/ # 数据统计
│ │ │ └── stats_api.py # 统计接口
│ │ └── db/ # 自研数据表
│ │ ├── wecom_user.py # 企微用户映射
│ │ └── recommend_record.py# 推荐记录
│ │
│ └── main.py # ★ BaoDan 入口(只改这里:注册 insurance 路由)
├── web/
│ └── .env.local # ★ BaoDan 前端配置(只改这里:开启 iframe
├── docker/ # Docker 部署配置
└── dev/ # 开发脚本
frontend/ # 你的前端(独立 Vue 3 项目)
├── src/
│ ├── pages/ # 登录/对话/推荐/管理页面
│ ├── components/ # 通用组件
│ ├── composables/ # 组合函数
│ └── utils/ # 工具函数
├── package.json
└── vite.config.ts
deploy/
├── sql/init.sql # 自研表建表脚本
└── nginx.conf # Nginx 反向代理
docs/ # 所有项目文档
├── README.md # 文档索引(入口)
├── 保险智能客服系统_需求文档.md
├── 保险智能客服系统_API接口文档.md
├── 保险智能客服系统_编码规范.md
├── 保险智能客服系统_测试用例.md
├── 保险智能客服系统_文档规范.md
├── 前端开发计划.md
├── 开发计划.md
├── 开发任务清单.md
├── API_curl示例.md
└── 部署指南.md
```
## 修改 BaoDan 源码清单
| 文件 | 改动 | 改动量 |
|------|------|:---:|
| `api/main.py` | 注册 insurance Blueprint | ~5 行 |
| `web/.env.local` | 开启 iframe 嵌入 | 1 行 |
| **合计** | **只改 2 个 BaoDan 文件** | **~6 行** |
## 开发规范
详见 `docs/保险智能客服系统_编码规范.md`,关键点:
- 自研代码全部放在 `api/insurance/` 下,不往 BaoDan 其他目录写代码
- 后端文件名/变量名snake_case
- 前端组件名/变量名camelCase / PascalCase
- 复用 BaoDan 的数据库连接、Redis、日志系统
- 统一响应格式:`{"code": 0, "message": "success", "data": {...}}`
- 注释用中文commit message 用英文
## 运行方式
```bash
# 1. 启动 BaoDan源码模式
cd baodan-main
./dev/setup # 安装依赖
./dev/start-api # 后端(含你的 insurance 模块)
./dev/start-worker # Celery Worker
./dev/start-web # 前端
# 2. 启动你的 Vue 前端
cd frontend
pnpm install && pnpm dev
# 3. 验证
curl http://localhost:5001/api/health
curl http://localhost:5001/api/wecom/callback # 企微回调
```
## 开发文档
所有文档已整理到 `docs/` 目录,完整索引见 [docs/README.md](docs/README.md)
- `docs/保险智能客服系统_需求文档.md` — 完整需求
- `docs/保险智能客服系统_API接口文档.md` — 45 个 API 接口
- `docs/保险智能客服系统_编码规范.md` — 编码标准
- `docs/保险智能客服系统_测试用例.md` — 测试用例
- `docs/前端开发计划.md` — 前端开发详细计划
- `docs/开发计划.md` — 8 阶段开发计划
- `docs/开发任务清单.md` — 185 项可勾选任务
- `docs/API_curl示例.md` — 接口调试 curl 示例
- `docs/部署指南.md` — BaoDan 源码集成指南
- `docs/保险智能客服系统_文档规范.md` — 文档编写标准
## BaoDan 对接要点
- 复用 BaoDan 的数据库连接SQLAlchemy自研表直接用 BaoDan 的 DB
- 复用 BaoDan 的认证系统,在上面叠加你的角色权限
- 调 BaoDan 的 RAG 引擎:**直接 import Python 函数**,不走 HTTP
- 调 BaoDan 的 Workflow通过 Python API 调用,不走 HTTP
- 按险种筛选:创建多个 BaoDan 应用,你的路由代码按用户选择分发
## BaoDan 升级流程
```bash
cd baodan-main
git stash # 暂存你的 insurance/ 目录改动
git pull origin main # 拉取 BaoDan 新版本
git stash pop # 恢复你的改动
# 如果 main.py 有冲突 → 手动合并(只合并注册路由的 5 行)
# 如果 .env.local 有冲突 → 重新加那一行
# insurance/ 目录永远不会冲突(新增的目录)
```
## 注意事项
- `.env` 文件不要提交到 Git
- BaoDan 的 `NEXT_PUBLIC_ALLOW_EMBED` 必须开启才能 iframe 嵌入
- 企微回调必须在 5 秒内返回 `success`,异步处理消息
- BaoDan WebApp 和你的前端必须**同源部署**
- 自研表的数据库迁移用 Alembic放在 `api/insurance/db/`