Files
2026-07-28 09:46:53 +08:00

140 lines
7.7 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.
# 配置管理后台
项目内置了一个零额外依赖的配置后台,用于统一管理登录账号、角色、AI 模型和 MCP 配置。
## 1. 启动后台
在项目目录运行:
```powershell
python admin_backend.py
```
后台会优先使用 `8765`。如果该端口已被其他程序占用,会自动尝试 `8766``8767`……,并在控制台打印最终地址。桌面端会读取 `backend_runtime.json` 自动跟随实际端口,无需手工修改。
浏览器打开控制台打印的地址。首次创建数据库时使用:
- 用户名:`admin`
- 初始密码:`Admin@123456`
首次登录必须修改密码。也可以在第一次启动前通过环境变量 `WECOM_ADMIN_INITIAL_PASSWORD` 设置不同的初始密码。
数据库默认保存在 `backend.db`,已加入 `.gitignore`。首次建库会优先读取本机
`ai_settings.local.json`,不存在时才读取无密钥的 `ai_settings.json` 模板。
## 2. 用户与角色
- 管理员(admin):管理用户、角色并发布模型配置。
- 配置员(operator):查看和发布模型配置,不能管理用户。
- 只读用户(viewer):查看后台并登录桌面端同步配置,不能修改配置。
“只读”表示不能修改后台,不表示看不到运行密钥:桌面端需要直接调用模型,因此所有
获准同步桌面配置的账号都会收到 API Key。viewer 只应发放给可信终端用户;若要做到
用户永远接触不到模型密钥,需要另行部署由后台代发请求的模型代理。
管理员创建的新用户第一次登录网页时也必须修改初始密码,之后才能从桌面端登录。
## 3. 桌面端自动配置
启动 `wechat_gui.py`,进入“AI 人格与能力”页:
1. 点击“登录后台”。
2. 填写后台地址、用户名和密码。
3. 登录成功后,后台配置立即写入已忽略 Git 的本机
`ai_settings.local.json` 并生效。
4. 桌面端以后会在启动时及每 5 分钟自动同步,也可以点击“立即同步”。
本机只保存 30 天有效的访问令牌,不保存后台密码。登录后台并启用自动同步后,本地 AI 配置字段会变成只读,以后台配置为准;退出后台后可恢复本地编辑。
后台发生端口冲突并自动更换端口时,同一项目目录中的桌面端会自动发现新地址;已有登录令牌可以继续使用。
同一台电脑上启动后台与桌面端时,后台会在 `backend_runtime.json` 发布一个仅限回环地址使用的临时只读同步凭证。桌面软件启动时会先检测该服务并拉取最新配置,所以即使没有保存后台账号登录,也会立即刷新“能力开关”“模型与身份”和“MCP 服务器”中的内容。该凭证不能管理用户或修改后台配置,后台停止后即失效。
桌面端主“AI 客服”页也是本地功能页:Qt 不再创建 WebEngine,经典 Tk 不再
启动或嵌入 Edge。Qt 页提供类似 Codex 的原生多轮 Agent 对话,可新建会话、续聊
和停止执行,并显示安装、自有模型、隔离状态和受控工具边界。
### Grok Build 本地客服 Agent
企业微信文字客服现在是项目内置功能,不再通过外部 Chat 网址、游客身份或专用
账号接入。桌面端把客户消息交给本机 Grok Build AgentAgent 只能调用项目内置的
受控客服 MCP 获取本地上下文、客服档案和业务资料,再由模型直接生成回复草稿。
该受控运行环境不提供 Shell、文件、Web 或消息发送工具,最终发送仍由现有企业
微信流程控制。宿主还会核对一次性、无客户原文的工具审计:模型必须实际读取
当前会话、分析本轮消息,并校验与最终输出完全一致的回复;明确预约时还必须
完成“待人工确认”登记,否则该轮草稿不会发送。
后台可统一下发:
| 字段 | 默认值 | 范围 / 用途 |
|---|---:|---|
| `GROK_CUSTOMER_SERVICE_ENABLED` | `true` | 启用本地客服 Agent |
| `GROK_CUSTOMER_SERVICE_TIMEOUT` | `180` | 单次回复超时,`30..600` 秒 |
| `GROK_CUSTOMER_SERVICE_MAX_TURNS` | `8` | 单次最多 Agent 轮数,`2..30` |
| `GROK_CUSTOMER_SERVICE_EFFORT` | `low` | `low``medium``high` |
桌面软件启动、保存本地配置或完成后台同步后,会在后台线程检查本机 Grok Build
安装状态,并对后台自有模型执行不含业务数据的最小流式端点预检;不会探测旧客服
HTTP 地址或 xAI 登录。旧版
`CHAT_API_*` 字段即使仍存在于 `ai_settings.local.json`,也会被忽略,且下一次
保存或后台发布时不会再导出。
### Grok Agent 自有模型
后台“模型配置中心”包含独立的 Grok Agent 自有模型。Grok Build 只负责 Agent
调度,不提供本项目的推理模型。启用后,桌面端会把
`GROK_API_BASE``GROK_MODEL`、接口协议、认证方式、上下文窗口、最大输出和
温度自动写入 LocalAppData 项目专属 Grok 状态目录内 `config.toml` 的自动配置
区块。密钥不写入 TOML,仅在受管模型确实已同步,且启动可能使用该模型的 Grok
进程时通过 `WECOM_GROK_API_KEY` 环境变量注入。启动门禁会解析完整 TOML,
精确核对模型、端点、协议、认证方式和生成参数;注释或多行字符串不能伪造通过。
主对话、搜索、总结、图片理解、分叉、子代理、Goal、自动分类器和压缩摘要等
Agent 模型角色也全部固定到 `wecom-backend`;额外建议模型与没有自有接口的 xAI
Imagine 图片/视频能力关闭。项目使用独立的 `custom-agent-only-v1` 运行目录,
不迁入旧的 xAI 登录凭据或旧 Grok 模型会话,并禁用 Grok/xAI 登录入口。
自有模型可使用 OpenAI Chat Completions、OpenAI Responses、Anthropic Messages
也可在“接口协议”中选择 Dify Chat Messages。Dify 地址既可填写 `/v1`,也可填写
完整 `/v1/chat-messages`;桌面端会用随机本地端口启动 loopback 适配器,将 Dify
的结构化决策转换为 Grok Build 标准工具调用。启动预检会强制执行一次随机挑战
工具调用,只有 Dify 应用确实支持 Agent 工具协议时才显示“已就绪”。Dify Key
不会写入 Grok 配置或交给 Grok 子进程。缺失、不兼容、认证失败、工具协议不合格
或端点返回错误时 Agent 会直接停止,绝不会回退到 Grok/xAI 模型。
本地端口由操作系统自动分配;每次启动 Agent 都会刷新,配置更新时新旧任务使用
不同版本的本地端点,互不覆盖。
若 Dify 应用定义了必填输入变量,可在后台“Dify inputs JSON”中填写固定对象;
默认 `{}`
`GROK_AUTH_SCHEME=auto` 对 Anthropic 官方
域名使用 `x-api-key`,其他兼容服务使用 Bearer;也可按服务端要求显式选择。
完整说明见 `GROK_BUILD.md`
## 4. 局域网部署
如需让其他电脑连接,可在后台所在电脑运行:
```powershell
python admin_backend.py --host 0.0.0.0 --port 8765
```
桌面端后台地址填写服务器的局域网地址,例如 `http://192.168.1.20:8765`。需要在 Windows 防火墙中仅对可信局域网放行该端口。
跨公网使用时不要直接暴露此 HTTP 服务,应使用 Nginx、Caddy 等反向代理配置 HTTPS,再把桌面端地址改为 HTTPS 地址。
## 5. 管理员密码恢复
停止后台后运行:
```powershell
python admin_backend.py --reset-admin-password
```
按提示输入新密码。重置后已有 admin 登录令牌会失效,下次登录仍需再修改一次密码。
## API
- `POST /api/v1/auth/login`:桌面端登录并取得令牌。
- `POST /api/v1/auth/logout`:注销令牌。
- `GET /api/v1/me`:读取当前用户及角色。
- `GET /api/v1/config`:读取当前版本的模型配置。
- `GET /health`:健康检查。