baodan/CLAUDE.md
2026-07-23 08:52:59 +08:00

166 lines
7.8 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
## 目录结构
```
baodanagent/
├── api/
│ └── insurance/ # ★ 你的全部自研代码
│ ├── app.py # Flask 应用入口
│ ├── config.py # 公共配置
│ ├── routes.py # Blueprint 路由注册
│ ├── admin/ # 管理后台(用户/部门/模板/通知)
│ ├── auth/ # 认证(企微 OAuth + 账密登录)
│ ├── chat/ # 对话功能iframe 嵌入 BaoDan
│ ├── db/ # 数据库 + 自定义迁移migrate_001~013
│ ├── kb/ # 知识库管理
│ ├── middleware/ # 认证中间件
│ ├── models/ # SQLAlchemy 数据模型12 个)
│ ├── recommend/ # 产品推荐Workflow 调用)
│ ├── stats/ # 数据统计
│ ├── utils/ # 工具函数(审计/邮件/错误处理)
│ └── wecom/ # 企微机器人 + OAuth
├── frontend/ # 你的前端(独立 Vue 3 项目)
│ ├── src/
│ │ ├── pages/ # 页面视图(用户端 + 管理端)
│ │ ├── components/ # 公共组件
│ │ ├── composables/ # 组合式函数
│ │ └── utils/ # 工具函数api.ts
│ └── dist/ # 构建产物
├── deploy/ # 部署配置SQL/init.sql, nginx.conf, logo
├── scripts/ # 脚本目录(按用途分类)
│ ├── deploy/ # 部署脚本deploy-baodanagent.sh 等)
│ ├── build/ # 构建脚本build-and-push.sh, package.sh
│ ├── tools/ # 工具脚本check-env.sh, docker-cleanup.sh
│ ├── setup/ # 初始化脚本create_admin.py 等)
│ └── README.md # 脚本索引说明
├── tests/ # 测试文件
├── docs/ # 项目文档19 篇)
├── patches/ # Dify 源码补丁
├── plugin_files/ # Dify 插件定义
├── docker-compose.dify.yml # Docker Compose数据库 + Redis
├── docker-compose.frontend.yml # Docker Compose前端容器
├── Dockerfile.dify-custom # API 镜像(添加 insurance 模块)
├── Dockerfile.web-custom # Web 镜像(替换品牌)
├── Dockerfile.frontend # 前端镜像(静态服务 + 反向代理)
├── serve.py # 前端静态服务 + API 反向代理
├── dify-main/ # Dify 开源基座(参考,不直接修改)
└── deploy-package/ # 预构建部署包Docker 镜像 tarballs
```
## 修改 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` — 项目状态 + 未完成功能
- `docs/开发任务清单.md` — 412 项可勾选任务
- `docs/API_curl示例.md` — 接口调试 curl 示例
- `docs/部署文档_完整版.md` — 完整部署文档
- `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/`