mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-05-17 21:17:28 +08:00
2.7 KiB
2.7 KiB
03 Provider 层模块化
背景
pkg/providers/http_provider.go 当前聚合了通用 HTTP provider、Responses API、OpenAI-compatible Chat、Codex/Qwen/Kimi 兼容逻辑、OAuth runtime 状态、请求构造、响应解析和部分持久化状态逻辑。文件复杂度偏高,继续新增 Provider 会越来越难。
目标
在保持现有行为和测试通过的前提下,把 Provider 层按职责拆开,降低单文件复杂度。
建议改动范围
主要文件:
pkg/providers/http_provider.gopkg/providers/oauth.gopkg/providers/*_provider.go- 新增若干 provider 内部文件
建议新增文件:
pkg/providers/provider_registry.gopkg/providers/responses_adapter.gopkg/providers/openai_compat_adapter.gopkg/providers/provider_runtime.gopkg/providers/provider_request_options.go
尽量避免修改:
pkg/agent/*pkg/tools/*cmd/*pkg/api/*
建议拆分
Provider 注册与路由
移动到 provider_registry.go:
CreateProviderCreateProviderByNamenormalizeProviderRouteNamegetProviderConfigByName- provider alias / route 相关逻辑
Responses API 适配
移动到 responses_adapter.go:
- Responses request body 构造。
- Responses input item 转换。
- Responses tools 转换。
- Responses response 解析。
- Responses compact summary。
OpenAI-compatible Chat 适配
移动到 openai_compat_adapter.go:
- chat completions request body 构造。
- multimodal message 转换。
- function call 转换。
- Qwen/Kimi 兼容 chat 格式相关公共逻辑。
Provider runtime 状态
移动到 provider_runtime.go:
- runtime state 结构。
- history 持久化。
- health score。
- recent hits/errors/changes。
- candidate order。
请求选项与通用解析
移动到 provider_request_options.go:
rawOptionstringOptionmapOptionstringSliceOptionint64FromOptionfloat64FromOption- 其他 request option helper。
验收标准
go test ./pkg/providers通过。go test ./...通过。- Provider 对外接口不变。
- 现有配置文件无需迁移。
http_provider.go明显缩小,并聚焦HTTPProvider本体。- 没有改变已有 provider 的请求格式,除非测试明确覆盖并更新说明。
测试建议
重点跑:
go test ./pkg/providers -count=1
go test ./pkg/agent ./pkg/api ./cmd -count=1
go test ./...
Provider 层已有大量请求构造测试。拆分时应优先保持测试不动,让测试证明行为未变。
并行注意
该任务风险较高,建议不要和“新增 Provider”或“AgentLoop 工具调用逻辑改动”同时修改同一分支。若必须并行,先完成纯移动,再做行为改动。