Files
kefu/deploy/protocol-integration-20260916/payload/BACKEND.md
T
2026-09-21 10:34:06 +08:00

124 lines
7.2 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.
# 配置管理后台
项目内置配置后台,用于统一管理登录账号、角色、AI 模型、MCP 和聊天知识库。
> 当前协议版已包含完整前端、知识中心和 Worker。使用说明见 [INTEGRATION_20260916.md](INTEGRATION_20260916.md),服务端部署见 [deploy/im-admin/README.md](deploy/im-admin/README.md)。完整后台应使用 `python run_backend.py --db backend.db` 启动 API、网关和知识 Worker;单独启动 API 不执行后台知识任务。
## 1. 启动后台
在项目目录运行:
```powershell
python admin_api.py
```
后台监听 `8766`(管理界面 + JSON 接口 + 桌面端同步都在这一个服务上)。端口被占用时会直接报错退出,不再静默顺延——顺延过的端口没人知道,排查时只会看到"连不上"。
桌面端会读取 `backend_runtime.json` 自动发现实际地址,无需手工修改。
> 早期版本还有一个 `8765` 的网页后台(服务端渲染 HTML)。它已整体退役:界面由 Vue 管理端承担,桌面端同步、调用留痕上报也都并进了 `admin_api.py`。`admin_backend.py` 仍在,但只作为数据层被引用,不再自己起服务。
浏览器打开控制台打印的地址。首次创建数据库时使用:
- 用户名:`admin`
- 初始密码:`Admin@123456`
首次登录必须修改密码。也可以在第一次启动前通过环境变量 `WECOM_ADMIN_INITIAL_PASSWORD` 设置不同的初始密码。
数据库默认保存在 `backend.db`,已加入 `.gitignore`。首次建库会读取当前 `ai_settings.json` 作为第一版模型配置。
## 2. 用户与角色
- 管理员(admin):管理用户、角色并发布模型配置。
- 配置员(operator):查看和发布模型配置,不能管理用户。
- 只读用户(viewer):查看后台并登录桌面端同步配置,不能修改配置。
管理员创建的新用户第一次登录网页时也必须修改初始密码,之后才能从桌面端登录。
## 3. 桌面端自动配置
启动 `wechat_gui.py`,进入“AI 人格与能力”页:
1. 点击“登录后台”。
2. 填写后台地址、用户名和密码。
3. 登录成功后,后台配置立即写入本机 `ai_settings.json` 并生效。
4. 桌面端以后会在启动时及每 5 分钟自动同步,也可以点击“立即同步”。
本机只保存 30 天有效的访问令牌,不保存后台密码。登录后台并启用自动同步后,本地 AI 配置字段会变成只读,以后台配置为准;退出后台后可恢复本地编辑。
后台发生端口冲突并自动更换端口时,同一项目目录中的桌面端会自动发现新地址;已有登录令牌可以继续使用。
同一台电脑上启动后台与桌面端时,后台会在 `backend_runtime.json` 发布一个仅限回环地址使用的临时只读同步凭证。桌面软件启动时会先检测该服务并拉取最新配置,所以即使没有保存后台账号登录,也会立即刷新“能力开关”“模型与身份”和“MCP 服务器”中的内容。该凭证不能管理用户或修改后台配置,后台停止后即失效。
## 3.1 智能体(角色与规则)
管理端「AI 模型 → 智能体」决定客服**用什么身份、按什么规矩说话**;模型清单和角色编排决定**用哪个模型**。两件事分开配,因为变更频率差一个数量级——模型半年动一次,话术一周动三次。
一个智能体 = 人设 + 一组规则。规则只有三种:
| 类型 | 触发 | 作用 |
| --- | --- | --- |
| 补充指令(guide) | 关键词留空 = 每轮都注入;填了关键词 = 客户这句话命中才注入 | 追加一句给模型的要求 |
| 禁止措辞(forbid) | **回复里**出现关键词 | 换成这条规则的兜底话术;留空则用客户端内置的那句 |
| 固定口径(reply) | **客户这句话**命中关键词 | 直接发配好的话术,不问模型 |
「启用与协作」里有两种模式:
- **单角色**:只上一个,所谓"切换智能体"就是换这里选的那个。
- **协作**:多个同时在场,客户这句话命中谁的「负责话题」就由谁主答,其余角色的禁止措辞**仍然全体生效**。不论哪种模式,客户看到的始终是同一个人——不会自报角色名,也不会出现"转给同事"。
方案按版本追加,不原地改,回滚就是再存一版指回去。保存后随桌面端配置下发,客户端不用发版。
出厂自带「健康顾问」和「客户经理」两个角色,默认按协作上岗。两个角色都带同一条禁止措辞规则:把客户看得见的文字说成"系统编码/乱码/无法确认具体意思"一律拦下——这是线上真实发生过的事故(客户发来血糖值「13」,模型回"这串像系统编码")。即使一个智能体都不配,客户端里那条内置兜底也照样生效。
相关权限码:`agent:read` / `agent:write`。升级到这个版本的老后台,管理员自动获得;配置员和只读用户需要在「角色权限」里勾一下。
## 4. 连接已部署的后台
后台所在电脑启动服务:
```powershell
python admin_api.py --host 0.0.0.0 --port 8766
```
桌面端后台地址填写服务器的局域网地址,例如 `http://192.168.1.20:8766`。需要在 Windows 防火墙中仅对可信局域网放行该端口。
Docker、云服务器、HTTPS、备份和升级步骤统一放在 [deploy/im-admin/README.md](deploy/im-admin/README.md),不再与桌面端使用说明混在一起。
## 5. 管理员密码恢复
停止后台后运行:
```powershell
python admin_api.py --reset-admin-password
```
按提示输入新密码。重置后已有 admin 登录令牌会失效,下次登录仍需再修改一次密码。
## API
- `POST /api/v1/auth/login`:桌面端登录并取得令牌。
- `POST /api/v1/auth/logout`:注销令牌。
- `GET /api/v1/me`:读取当前用户及角色。
- `GET /api/v1/config`:读取当前版本的模型配置。
- `POST /api/v1/model/test`:使用当前提交的模型地址、名称和可选密钥测试连通性(仅管理员和配置员;不会保存配置)。
- `GET /api/v1/desktop/config`:桌面软件启动时只读同步云端配置。
- `GET /health`:健康检查。
模型测试支持三种 `AI_PROVIDER_TYPE`:
- `openai`:OpenAI 兼容接口,向 `chat/completions` 发送最小对话请求。
- `dify`:Dify 应用接口,向 `chat-messages` 发送 blocking 请求。
- `comfyui`:ComfyUI 文生图服务,通过 `GET /system_stats` 检查服务状态。
管理页面可直接选择服务类型并点击“测试模型连通性”。测试使用页面当前值,不保存配置;API Key 留空时沿用后台已保存值,响应和审计记录均不会包含密钥。
## 云端开发模式
管理员或配置员可在“能力开关”中开启“开发模式”并发布。桌面端下次启动或定时同步后,会在“运行日志”显示:
- 云端配置请求的具体地址、配置版本和更新时间;
- 云端返回的具体配置;
- 每次模型调用采用的服务类型、模型名称、基础地址和最终请求地址。
所有诊断均会隐藏 API Key、Token、密码、认证头、Cookie 等敏感值,也不会输出聊天内容。关闭开关并发布后,桌面端下次同步起停止输出这些诊断信息。