agent: 更智能的 LLM provider 调度(byModel 精确路由 + AUTO 优先级链)

吸收 llmsproxy 的调度思想适配 HomeAgent“一源一模型”结构:
- RoutableProvider{Model,Priority} 次级接口(不破坏既有 Provider 实现)
- ProviderManager.OrderedProviders 改为按 (优先级 desc, 可用, 默认优先) 稳定排序,
  AUTO/空模型走该优先级链
- 新增 ProviderManager.ResolveForModel:精确模型名路由到归属源,找不到回落 AUTO 链
- LuaAdaptedProvider 不再无条件覆写 req.Model;显式模型名原样转发
- LLMSource.Priority + core.llm.sources.<name>.priority 配置项
- process.go: 显式模型走 ResolveForModel,AUTO 走 OrderedProviders
- 新增路由单测(优先级排序 + byModel 解析)

验证: go test ./... 27 包 0 失败;Windows 交叉编译通过;部署后服务健康
This commit is contained in:
root
2026-08-10 11:54:45 +08:00
parent 6c45ca2ff0
commit 2e91bf63a7
7 changed files with 154 additions and 19 deletions

View File

@ -186,6 +186,7 @@ var sourceFieldDefs = []struct {
{"adapter", "string", "适配器"},
{"adapter_path", "string", "适配器路径"},
{"max_concurrent", "int", "并发上限"},
{"priority", "int", "AUTO 优先级(大者优先)"},
}
// registerSourceDefs 注册 core.llm.sources.<name>.* 的 ConfigDef
@ -816,6 +817,7 @@ func (r *ConfigRegistry) ToConfig() *types.Config {
AdapterPath: read(p+".adapter_path", ""),
ContextWindow: readInt(p+".context_window", 0),
MaxConcurrent: readInt(p+".max_concurrent", 8),
Priority: readInt(p+".priority", 0),
ThinkingEnabled: readBool(p+".thinking_enabled", false),
})
}