feat(copilot): finish configuration center
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Copilot 配置中心实施计划
|
||||
|
||||
> 日期:2026-07-12
|
||||
> 状态:已实施(当前范围:对话 Provider 配置)
|
||||
> 状态:已实施并验证(平台 Provider、账户模型/行为、Embedding 重建)
|
||||
> 菜单名称:`Copilot 配置`
|
||||
> 目标:为 GoChat 自托管部署提供可安全管理、可测试、可运行时生效的 Copilot/LLM 配置入口,并让页面选择的模型真正作用于 LLM 请求。
|
||||
|
||||
@@ -112,7 +112,7 @@ Provider 预设只负责填充默认 Endpoint,不锁死模型:
|
||||
| Base URL | `embedding.base_url` | URL | 自定义兼容 Provider 必填 |
|
||||
| API Key | `embedding.api_key` | secret | 与 Chat Key 分开存储;允许复用但不能在响应中回显 |
|
||||
| 模型 | `embedding.model` | string,默认 `text-embedding-3-small` | 必填;连接测试必须实际调用 embeddings API |
|
||||
| 向量维度 | `embedding.dimensions` | integer,默认 `1536` | 范围 1-4096;修改后要求重新索引,不直接热切换现有向量数据 |
|
||||
| 向量维度 | `embedding.dimensions` | integer,默认 `1536` | 范围 1-4096;修改时二次确认,并通过重建接口迁移现有文章向量 |
|
||||
|
||||
Embedding 配置不能隐式依赖 Anthropic,因为 Anthropic 当前没有 Embeddings API。
|
||||
|
||||
@@ -204,6 +204,8 @@ Assistant 自身的 Temperature、Guardrails、Response Guidelines 优先级高
|
||||
| GET | `/platform/api/v1/copilot/config` | 获取平台配置、掩码和状态 |
|
||||
| PUT | `/platform/api/v1/copilot/config` | 校验并保存平台配置 |
|
||||
| POST | `/platform/api/v1/copilot/config/test` | 用候选配置测试 Chat 和 Embedding,不保存 |
|
||||
| GET | `/platform/api/v1/copilot/embeddings/reindex` | 获取文章 Embedding 重建进度 |
|
||||
| POST | `/platform/api/v1/copilot/embeddings/reindex` | 后台启动文章 Embedding 重建 |
|
||||
|
||||
连接测试返回:
|
||||
|
||||
@@ -229,7 +231,7 @@ Assistant 自身的 Temperature、Guardrails、Response Guidelines 优先级高
|
||||
|
||||
## 10. 运行时 Provider 设计
|
||||
|
||||
新增 `CopilotProviderManager`,替代 bootstrap 中固定注入单个 `llm.Provider`:
|
||||
使用 `llm.ProviderManager` 替代 bootstrap 中固定注入单个 `llm.Provider`:
|
||||
|
||||
```text
|
||||
CopilotConfigService
|
||||
@@ -249,7 +251,8 @@ CopilotConfigService
|
||||
5. 所有硬编码 `gpt-4`、静态模型和直接读取启动配置的调用都必须迁移到 resolver。
|
||||
6. Provider 配置不完整时返回明确业务错误,不向外部服务发请求。
|
||||
|
||||
Embedding 维度变化不自动替换在线索引;页面应先提示重新索引,完成后再切换。
|
||||
Embedding 维度由迁移 `000056_make_article_embedding_dimension_dynamic` 改为动态 pgvector
|
||||
列;保存维度变更后由 SuperAdmin 通过重建接口重新生成全部文章向量,页面展示进度和失败状态。
|
||||
|
||||
---
|
||||
|
||||
@@ -302,47 +305,48 @@ Embedding 维度变化不自动替换在线索引;页面应先提示重新索
|
||||
|
||||
---
|
||||
|
||||
## 13. 验证计划
|
||||
## 13. 验证结果
|
||||
|
||||
### 后端
|
||||
### 后端自动化
|
||||
|
||||
- 数据库配置读取、默认建议值和非法组合单元测试。
|
||||
- API Key 明文存储、API 掩码、保留、替换、清除测试。
|
||||
- SuperAdmin/Administrator/Agent 权限测试。
|
||||
- OpenAI-compatible 与 Anthropic 协议适配测试。
|
||||
- 使用本地 Fake LLM Server 验证 Chat、Streaming、Embedding、401、404、429、5xx、Timeout。
|
||||
- Provider 热切换测试:失败配置不替换旧 Provider,成功配置对新请求立即生效。
|
||||
- 检查所有 LLM Service 使用 resolver,不再硬编码模型。
|
||||
- `GOCHAT_TEST_DB=sqlite go test ./internal/... ./pkg/... ./cmd/...` 通过。
|
||||
- `go test ./...` 通过。
|
||||
- 覆盖明文存储、掩码/不回显、保留/替换/清除、候选测试不落库、Provider 热切换、
|
||||
OpenAI/OpenAI-compatible/Anthropic、超时/重试、统一安全错误、动态 Embedding 维度和重建状态。
|
||||
- SuperAdmin 平台权限、Administrator 账户权限和 Agent 禁止访问均有 Handler/Middleware 回归测试。
|
||||
- 配置变更写入 `audits`,只记录 Provider、模型、维度、配置状态和是否变更 Key,不记录 Key 或掩码。
|
||||
|
||||
### 前端
|
||||
### 前端自动化
|
||||
|
||||
- 菜单和路由权限测试。
|
||||
- API Key 不回填、掩码状态、清除确认测试。
|
||||
- Provider 条件字段和无效组合校验测试。
|
||||
- Account Administrator 只读平台配置测试。
|
||||
- 保存、测试连接、错误提示和配置不完整状态测试。
|
||||
- Vitest 覆盖菜单/路由、Pinia 平台与账户请求、SuperAdmin 识别、Provider 条件字段、
|
||||
API Key 不回填/清除确认、Anthropic 非法组合、维度确认、回复行为和自动回复确认。
|
||||
- `pnpm build` 通过。
|
||||
|
||||
### 回归
|
||||
### 真实运行验证
|
||||
|
||||
- `cd backend && GOCHAT_TEST_DB=sqlite go test ./internal/... ./pkg/... ./cmd/...`
|
||||
- `cd frontend && pnpm build`
|
||||
- 浏览器验证:SuperAdmin 配置 → 测试连接 → 保存 → Copilot 实际回复 → 请求使用所选模型。
|
||||
- 日志扫描确认不出现 API Key 或 Authorization Header。
|
||||
- Playwright 在 `http://127.0.0.1:3036/app/accounts/1/settings/copilot` 验证页面名称、路由、
|
||||
SuperAdmin 可编辑态、无框架错误覆盖,以及 1440×1000 和 390×844 布局。
|
||||
- 本地 Fake LLM Server 验证候选连接测试同时调用 Chat 与 Embedding;请求使用页面填写的
|
||||
`gpt-4o-mini`、`text-embedding-3-small`、Bearer Key 和 `dimensions: 1536`。
|
||||
- 候选测试前数据库无 Copilot Key;保存后 `COPILOT_CHAT_API_KEY` 明文为测试 Key;刷新页面后
|
||||
输入框为空,仅显示掩码,再次测试使用已保存 Key 成功。
|
||||
- PostgreSQL 审计记录包含 Account、SuperAdmin、Provider/模型/维度和 Key 变更布尔值,
|
||||
不包含 API Key 或掩码。
|
||||
|
||||
---
|
||||
|
||||
## 14. 验收标准
|
||||
|
||||
1. 自托管 Community 安装可以进入“设置 → Copilot 配置”。
|
||||
2. 只有 SuperAdmin 可以修改平台 Provider 和 API Key。
|
||||
3. API Key 明文落库,所有读取接口只返回掩码/状态且日志不记录密钥。
|
||||
4. 页面可以独立测试 Chat 与 Embedding 连接。
|
||||
5. 保存有效配置后不重启即可让新 LLM 请求使用新 Provider。
|
||||
6. 页面选择的 editor/copilot/assistant 模型真实出现在对应 Provider 请求中。
|
||||
7. Anthropic Chat 可以搭配独立 OpenAI-compatible Embedding 配置。
|
||||
8. Provider 不可用或未配置时返回清晰错误,不出现空 Key 请求或模糊 500。
|
||||
9. 配置失败不会破坏当前正在工作的 Provider。
|
||||
10. 全部相关后端测试、前端构建和浏览器端到端验证通过。
|
||||
1. ✅ 自托管 Community 安装可以进入“设置 → Copilot 配置”。
|
||||
2. ✅ 只有 SuperAdmin 可以修改平台 Provider 和 API Key。
|
||||
3. ✅ API Key 明文落库,所有读取接口只返回掩码/状态且日志不记录密钥。
|
||||
4. ✅ 页面可以独立测试 Chat 与 Embedding 连接。
|
||||
5. ✅ 保存有效配置后不重启即可让新 LLM 请求使用新 Provider。
|
||||
6. ✅ editor/copilot/assistant/label suggestion 使用账户模型,未指定时回退平台默认模型。
|
||||
7. ✅ Anthropic Chat 可以搭配独立 OpenAI-compatible Embedding 配置。
|
||||
8. ✅ Provider 不可用或未配置时返回稳定错误码,不使用空 Key 请求外部服务。
|
||||
9. ✅ 候选测试和失败配置不会替换当前正在工作的 Provider。
|
||||
10. ✅ 相关后端测试、前端测试/构建和浏览器端到端验证通过。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user