1
0

refactor: 实现 ConversionEngine 协议转换引擎,替代旧 protocol 包

引入 Canonical Model 和 ProtocolAdapter 架构,支持 OpenAI/Anthropic 协议间
无缝转换,统一 ProxyHandler 替代分散的 OpenAI/Anthropic Handler,简化
ProviderClient 为协议无关的 HTTP 发送器,Provider 新增 protocol 字段。
This commit is contained in:
2026-04-20 00:36:27 +08:00
parent 26810d9410
commit 1dac347d3b
65 changed files with 9690 additions and 2139 deletions

View File

@@ -180,14 +180,14 @@ type ProviderClient interface {
- 路由时需要知道 providerProtocol 以选择正确的 Adapter
- 默认值 `'openai'` 确保现有数据兼容
### D7: 删除旧 `internal/protocol/` 包,在 `internal/conversion/` 中重建
### D7: 删除旧 `internal/protocol/` 包,在 `internal/conversion/` 中全新实现
**选择**:直接删除 `internal/protocol/openai/``internal/protocol/anthropic/`,在 `internal/conversion/`从零构建新架构
**选择**:直接删除 `internal/protocol/openai/``internal/protocol/anthropic/`,在 `internal/conversion/`对照设计文档全新编写所有代码
**理由**
- 旧代码的设计模式OpenAI 类型为枢纽)与新架构根本不同
- 旧代码的设计模式OpenAI 类型为枢纽)与新架构根本不同,无法复用
- 保留旧代码容易导致混用两种模式,引入隐蔽 bug
- 旧代码中的类型定义可以迁移copy-paste但组织方式需重建
- 旧代码中的类型定义不迁移,直接根据设计文档重新定义,确保与新架构一致
### D8: 目标包结构
@@ -206,7 +206,7 @@ internal/conversion/
engine.go # ConversionEngine 门面 + HTTPRequestSpec/HTTPResponseSpec
openai/
types.go # OpenAI 线路格式类型(从旧 protocol/openai/types.go 迁移并补全
types.go # OpenAI 线路格式类型(对照 conversion_openai.md 全新定义
adapter.go # ProtocolAdapter 实现detectInterfaceType/buildUrl/buildHeaders/supportsInterface/encodeError
decoder.go # decodeRequest/decodeResponse/扩展层 decode 方法
encoder.go # encodeRequest/encodeResponse/扩展层 encode 方法
@@ -214,7 +214,7 @@ internal/conversion/
stream_encoder.go # OpenAIStreamEncoder缓冲策略
anthropic/
types.go # Anthropic 线路格式类型(从旧 protocol/anthropic/types.go 迁移并补全
types.go # Anthropic 线路格式类型(对照 conversion_anthropic.md 全新定义
adapter.go # ProtocolAdapter 实现detectInterfaceType/buildUrl/buildHeaders/supportsInterface/encodeError
decoder.go # decodeRequest/decodeResponse/扩展层 decode 方法
encoder.go # encodeRequest/encodeResponse/扩展层 encode 方法
@@ -260,14 +260,14 @@ internal/conversion/
### 步骤
1. **创建 `internal/conversion/` 包**:实现 Layer 1-3Canonical Model、接口定义、Engine不改动现有代码
2. **实现 OpenAI Adapter 和 Anthropic Adapter**Layer 4-5在 conversion 包内自包含
2. **全新实现 OpenAI Adapter 和 Anthropic Adapter**Layer 4-5对照设计文档在 conversion 包内全新编写,不沿用旧 protocol 包代码
3. **编写全面测试**:覆盖编解码、流式转换、错误处理、同协议透传
4. **改造 `domain.Provider`**:新增 `Protocol` 字段
5. **创建数据库迁移**`ALTER TABLE providers ADD COLUMN protocol TEXT DEFAULT 'openai'`
6. **改造 `ProviderClient`**:简化为接受 `HTTPRequestSpec` 的 HTTP 发送器
7. **创建 `ProxyHandler`**:统一代理入口,集成 ConversionEngine
8. **更新 `cmd/server/main.go`**:注册 Adapter、创建 Engine、配置新路由
9. **删除旧 `internal/protocol/` 包**:确认新架构完全替代后删除
9. **删除旧 `internal/protocol/` 包**直接删除,不迁移代码,确认新架构完全替代
10. **更新 README.md**项目结构、API 接口、路由说明
### 兼容策略
@@ -279,7 +279,7 @@ internal/conversion/
### 回滚策略
- Git 分支隔离:在新分支开发,合并前充分测试
-`internal/protocol/` 包在确认新架构稳定后再删除
-`internal/protocol/` 包在删除前确认新架构所有测试通过,删除后不可恢复旧代码(从 git 历史仍可找回)
- 数据库迁移向下兼容(仅 ADD COLUMN
## Open Questions