feat: add MCP research access and browser key management

This commit is contained in:
yuxuanhui
2026-09-09 16:18:27 +08:00
parent 4debca7dbd
commit 45238280e3
47 changed files with 2642 additions and 44 deletions
+6 -4
View File
@@ -62,7 +62,7 @@ docker compose ps
面板收起、切换会话和网络断开不会停止后端执行。刷新后从服务端历史与快照恢复,活动执行每 3 秒更新;不提供逐 token 续传。“停止生成”请求后端取消,再关闭前端接收。服务重启会将生成中的轮次标记为中断,不自动重放;待确认记录在重新登录后仍可处理,但重新检查版本。模型配置变更后,旧的待确认轮次需停止并重新预览。
模型不可用或未配置时,原有业务功能继续使用。API Key 仅加密存储于数据库,不返回浏览器;发送聊天时,相关本地业务结果会发送至你指定的模型服务。没有 MCP、知识检索、多 Agent 或平台属性回写。回测使用独立的固定集合确认,详见下文。
模型不可用或未配置时,原有业务功能继续使用。API Key 仅加密存储于数据库,不返回浏览器;发送聊天时,相关本地业务结果会发送至你指定的模型服务。MCP 研究入口独立于 Chatbox,见 [MCP 接入说明](docs/mcp-research.md);不提供知识检索、多 Agent 或平台属性回写。回测使用独立的固定集合确认,详见下文。
## Chatbox 研究到回测结果
@@ -111,6 +111,7 @@ docker compose -f compose.public.yaml logs --tail=100 web
| `WQ_EMAIL` / `WQ_PASSWORD` | WorldQuant 邮箱和密码,成对设置;本地 `.env`,生产 Gitea Secrets |
| `LOCAL_PORT` | 本机入口端口,默认 8080 |
| `DOMAIN` | 公网域名 |
| `MCP_ENABLED` | 启用远程 MCP 研究入口,默认 false;使用独立 PAT 认证 |
| `AI_REQUEST_LIMIT` | 每轮模型请求上限,默认 12 |
| `AI_TOOL_LIMIT` | 每轮工具执行上限,默认 12 |
| `AI_OUTPUT_TOKENS` | 每次模型输出上限,默认 4096 |
@@ -120,7 +121,7 @@ WorldQuant 凭据不再从 `account.json` 读取。进程环境变量优先于
WorldQuant 密码仅在后端解密。平台 Cookie 仅保存在后端内存,进程重启后重新认证。前端不保存密码或 Cookie 副本;日志与响应不输出平台认证正文。`.env` 不进入 Docker 构建上下文,应与数据库备份分别安全保管。丢失 `ENCRYPTION_KEY` 后须重新输入平台密码和模型 API Key;切勿在正常升级时重新生成它。
修改系统密码(同时撤销所有系统会话):
修改系统密码(同时撤销所有系统会话和 MCP 令牌):
```bash
docker compose exec backend python -m app.cli reset-password
@@ -222,20 +223,21 @@ WQ_DEV_API=http://127.0.0.1:18000 pnpm dev --port 5179
FastAPI 的 `/openapi.json` 与 `/docs` 可在后端开发端口访问;生产 Web 入口只代理 `/api/*`,不对外公开文档页面。
- `/api/v1/auth`:登录、退出、会话;除登录与健康检查外,业务接口都需要 Cookie。
- `/api/v1/auth`:登录、退出、会话;除登录、健康检查及独立 PAT 认证的 MCP 外,业务接口都需要 Cookie。
- `/api/v1/account`:偏好、加密凭据、连接/验证/断开/资料刷新。
- `/api/v1/alphas`:服务端筛选与排序、详情、本地研究记录、批量编辑、流式 CSV。
- `/api/v1/alphas/{id}/sources`:分页查看已保存回测的研究来源;Alpha 列表及 CSV 支持 `source`、`source_reference`、`research_id`、`backtest_run_id` 筛选。
- `/api/v1/alphas/{id}/pnl`:只读缓存;刷新通过 `pnl_refresh` 任务。
- `/api/v1/alphas/{id}/self-correlation`:读取本地检测结果;检测通过 `self_correlation` 任务。
- `/api/v1/sync-jobs`:创建任务立即返回 202 和 ID,查询、取消与重试。
- `/api/v1/mcp/`:可选 Streamable HTTP 研究入口,PAT 分权限认证;[工具与运维说明](docs/mcp-research.md)。
- `/api/v1/backtests`:候选草稿、不可变预览、异步启动、运行/结果/事件分页、调度配置、暂停/继续/停止/找回及重跑预览。
- `/api/v1/backtests/research-previews`:通过固定输入、表达式模板和字段绑定生成候选预览;沿用现有确认启动接口。
- `/api/v1/ai`:脱敏模型配置与测试、会话历史、SSE 执行、执行快照、取消及确认。新执行只接收 `request_id`、`message`、`context`;同一会话重复请求 ID 返回原运行,参数变化返回 409。
研究记录 PATCH 现在必须提供读取时的 `version`;批量编辑必须提供每个目标 ID 的 `versions` 映射。`0002` 迁移给旧研究记录设置初始版本 1,不修改其内容。版本冲突返回 409。
写请求需 `X-WQ-Request: 1`;浏览器跨站写入被拒绝。Alpha 平台快照、`research` 本地研究、`pnl_cache`、`self_correlations` 本地检测结果分开存储。`0005` 迁移只新增检测结果表。研究状态固定为 `inbox/candidate/optimizing/archived`;平台类型、语言、状态按原值显示。
网页写请求需 `X-WQ-Request: 1`;MCP 使用独立 Bearer 令牌且校验 Host/Origin;浏览器跨站写入被拒绝。Alpha 平台快照、`research` 本地研究、`pnl_cache`、`self_correlations` 本地检测结果分开存储。`0005` 迁移只新增检测结果表。研究状态固定为 `inbox/candidate/optimizing/archived`;平台类型、语言、状态按原值显示。
列表及导出支持 `submission=UNSUBMITTED|SUBMITTED`,平台状态缺失时不推断为已提交。`daily_sync` 必须提供分组及 `date_from` / `date_to`,每个 UTC 日期分别分页获取可见、隐藏记录;新建 `full_sync` 只同步已提交。旧的无分组全量任务保持原范围恢复。每页数据与检查点同事务提交,Alpha ID 幂等更新。失败任务保留进度,重试只处理剩余页或失败 ID。上游 `Retry-After` 等待可被取消。分页过程中平台记录移动可能造成重复或遗漏,通过 ID 去重和再次同步对应范围校正;单次没有查到不自动删除本地记录。