fix(ai): Agent chat handler 精确选择 FC-capable provider + 环境变量适配
- chat_handler: 使用 get_provider("claude") 精确获取,避免 resolve fallback 到 Ollama
- ProviderRegistry: 新增 get_provider() 方法(无 health check,无 fallback)
- orchestrator: 从 ANTHROPIC_DEFAULT_SONNET_MODEL 读取模型名,兼容智谱代理
- erp-server: Claude provider 注册优先读 ANTHROPIC_AUTH_TOKEN + ANTHROPIC_BASE_URL
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -477,13 +477,21 @@ async fn main() -> anyhow::Result<()> {
|
||||
// 构建多 Provider 注册表
|
||||
let registry = std::sync::Arc::new(erp_ai::provider::registry::ProviderRegistry::new());
|
||||
|
||||
// 始终注册默认 Claude provider(兼容旧配置)
|
||||
// 始终注册默认 Claude provider — 优先用环境变量
|
||||
{
|
||||
let mut claude =
|
||||
erp_ai::provider::claude::ClaudeProvider::new(config.ai.api_key.clone());
|
||||
if let Some(ref base_url) = config.ai.base_url {
|
||||
claude = claude.with_base_url(base_url.clone());
|
||||
}
|
||||
let api_key = if !config.ai.api_key.is_empty() {
|
||||
config.ai.api_key.clone()
|
||||
} else {
|
||||
std::env::var("ANTHROPIC_AUTH_TOKEN")
|
||||
.or_else(|_| std::env::var("ANTHROPIC_API_KEY"))
|
||||
.unwrap_or_default()
|
||||
};
|
||||
let base_url = std::env::var("ANTHROPIC_BASE_URL")
|
||||
.ok()
|
||||
.or_else(|| config.ai.base_url.clone())
|
||||
.unwrap_or_else(|| "https://api.anthropic.com".to_string());
|
||||
let claude =
|
||||
erp_ai::provider::claude::ClaudeProvider::new(api_key).with_base_url(base_url);
|
||||
registry.register("claude".to_string(), std::sync::Arc::new(claude));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user