fix(copilot): harden provider configuration flow

This commit is contained in:
2026-07-13 14:57:28 +08:00
parent 19cee9af11
commit a712b91982
8 changed files with 153 additions and 36 deletions
+12 -4
View File
@@ -97,9 +97,12 @@ Provider 预设只负责填充默认 Endpoint,不锁死模型:
| Provider | 默认 Base URL | 协议实现 |
|---|---|---|
| OpenAI | `https://api.openai.com/v1` | Eino OpenAI |
| Anthropic | `https://api.anthropic.com` | Anthropic Messages API |
| OpenAI Compatible | 用户填写 | Eino OpenAI;适用于 DeepSeek、通义千问、豆包及自建网关 |
| OpenAI | `https://api.openai.com/v1` | `llm.OpenAIProvider`,OpenAI Chat Completions API |
| Anthropic | `https://api.anthropic.com` | `llm.AnthropicProvider`,Anthropic Messages API |
| OpenAI Compatible | 用户填写 | `llm.OpenAIProvider` + 自定义 Base URL;适用于 DeepSeek、通义千问、豆包及自建网关 |
`EinoProvider` 适配器仍保留给显式构造的 Eino ChatModel/Embedder 使用;数据库驱动的
`ProviderManager` 运行时配置链路不经过该适配器,而是按协议直接创建上述 Provider。
首期不单独增加 DeepSeek/Qwen/Doubao 枚举,避免把供应商宣传名称与真实协议实现绑死。
@@ -313,13 +316,18 @@ Embedding 维度由迁移 `000056_make_article_embedding_dimension_dynamic` 改
- `go test ./...` 通过。
- 覆盖明文存储、掩码/不回显、保留/替换/清除、候选测试不落库、Provider 热切换、
OpenAI/OpenAI-compatible/Anthropic、超时/重试、统一安全错误、动态 Embedding 维度和重建状态。
- Service → `ProviderManager` → Fake HTTP Provider 集成测试证明 editor、copilot、assistant、
label suggestion 分别使用账户配置的功能模型,未配置时由 Manager 回退平台默认模型。
- Assistant 显式配置的 Temperature(包括 `0`)优先于平台默认值;未显式配置时继续使用平台值。
- OpenAI-compatible 的错误响应与 malformed SSE chunk 不进入日志或健康检查响应;对外只返回稳定错误类别。
- SuperAdmin 平台权限、Administrator 账户权限和 Agent 禁止访问均有 Handler/Middleware 回归测试。
- 配置变更写入 `audits`,只记录 Provider、模型、维度、配置状态和是否变更 Key,不记录 Key 或掩码。
### 前端自动化
- Vitest 覆盖菜单/路由、Pinia 平台与账户请求、SuperAdmin 识别、Provider 条件字段、
API Key 不回填/清除确认、Anthropic 非法组合、维度确认、回复行为和自动回复确认。
API Key 不回填/清除确认、清除 Key 时允许保存但禁止连接测试、Anthropic 非法组合、
维度确认、回复行为和自动回复确认。
- `pnpm build` 通过。
### 真实运行验证
+6 -2
View File
@@ -8,8 +8,10 @@
> 调研日期:2026-07-08(初版)/ 2026-07-12 更新
> 基于代码库:2026-07-12 Copilot 配置中心实现状态
> 对标项目:Chatwoot Captain AI (enterprise edition)
> 注:2026-07-09 状态更新 — Eino 框架已替换手写 LLM 层,多 LLM Provider(OpenAI/Anthropic)已接入,
> Function Calling 已实现,Help Center pgvector 语义搜索已实现,AutoReplyRule 已集成到消息流程。
> 注:2026-07-12 状态更新 — 数据库驱动的运行时配置链路使用协议原生
> `OpenAIProvider`/`AnthropicProvider`;`EinoProvider` 适配器仍可供显式构造的 Eino
> ChatModel/Embedder 使用,但不承载 Copilot 配置中心的 Provider 热切换。Function Calling、
> Help Center pgvector 语义搜索和 AutoReplyRule 消息流程均已接入。
---
@@ -64,6 +66,8 @@ Provider 配置与运行链路已闭环,保存后无需重启即可生效。
- 数据结构:`ChatRequest`/`ChatResponse`/`ChatMessage`/`EmbeddingRequest`/`EmbeddingResponse`/
`StreamChunk`/`ToolDefinition`/`ToolFunction`
- `ProviderManager` 原子替换 Chat/Embedding Provider Snapshot;账户模型按功能解析后进入请求。
- 配置中心按协议直接构造 `OpenAIProvider`/`AnthropicProvider`;OpenAI-compatible 复用
`OpenAIProvider` 并使用自定义 Base URL,Eino 适配器不在该运行时链路中。
- `ToolExecutionService` 已将 Custom Tool 转为 `ToolDefinition`,执行 tool-call 循环并回传结果。
### 2.2 数据模型层