TradingAgents-CN 厂家默认 API 地址(default_base_url)配置详解:三级优先级机制与实战验证
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
导读
本文围绕 TradingAgents-CN(中文增强版多智能体金融交易框架)中llm_providers集合的default_base_url字段,完整讲解其概念定义、三级优先级解析链、三种配置方式与完整的验证测试方法。读完本文,你将掌握如何在不改代码的前提下,通过 Web 界面、MongoDB 或 REST API 为不同 LLM 厂家(Google、DeepSeek、通义千问等)定制 API 地址,并能通过日志与测试脚本精确判断当前分析任务实际使用了哪一层的地址配置。
一、default_base_url是什么?
在 TradingAgents-CN 中,系统支持多厂家、多模型的 LLM 接入,每个厂家(Provider)在 MongoDB 的llm_providers集合中维护一条记录,包含厂家标识、显示名称、支持的模型能力、API Key 以及厂家默认 API 地址(default_base_url)。
default_base_url解决的核心问题是:当某个模型没有单独配置api_base时,系统应该用哪个地址去访问该厂家的服务。它相当于厂家的"兜底地址",让用户无需为每个模型重复填写 URL。
一个典型厂家文档结构如下(摘自 docs/configuration/DEFAULT_BASE_URL_USAGE.md):
{ "name": "google", "display_name": "Google AI", "default_base_url": "https://generativelanguage.googleapis.com/v1", "api_key": "your_api_key_here" }在数据模型层,default_base_url被正式定义为可空字符串字段:
- app/models/config.py 中
LLMProviderRequest.default_base_url: Optional[str] = Field(None, description="默认API地址"); - 响应模型
LLMProviderResponse同样携带该字段(见 app/models/config.py)。
同时,app/scripts/init_providers.py 在初始化数据库时会为预设厂家写入合理的默认地址,例如 openai 为https://api.openai.com/v1、google 为https://generativelanguage.googleapis.com/v1beta、qwen 为https://dashscope.aliyuncs.com/compatible-mode/v1、302ai 为https://api.302.ai/v1、aihubmix 为https://aihubmix.com/v1。
二、三级配置优先级:模型 api_base > 厂家 default_base_url > 硬编码默认值
系统在获取 API 地址时严格按照以下优先级逐级回落:
1️⃣ 模型配置的 api_base(system_configs.llm_configs[].api_base) ↓ (如果没有) 2️⃣ 厂家配置的 default_base_url(llm_providers.default_base_url) ↓ (如果没有) 3️⃣ 硬编码的默认 URL(代码中的默认值)2.1 源码实现链路
该逻辑的核心实现在 app/services/simple_analysis_service.py 的get_provider_and_url_by_model_sync(model_name)函数中,其解析流程为:
- 查询活跃系统配置:从
system_configs集合读取is_active: true的最新版本文档(按version降序),在llm_configs数组中按model_name匹配目标模型; - 优先级判定 backend_url(源码 app/services/simple_analysis_service.py):
- 若模型配置存在
api_base字段,直接使用,并打印日志✅ [同步查询] 模型 {model_name} 使用自定义 API: {api_base}; - 否则若厂家文档存在
default_base_url,则使用厂家默认地址,并打印✅ [同步查询] 模型 {model_name} 使用厂家默认 API: {backend_url}; - 否则调用
_get_default_backend_url(provider)返回硬编码默认值,并给出警告日志⚠️ [同步查询] 厂家 {provider} 没有配置 default_base_url,使用硬编码默认值;
- 若模型配置存在
- 数据库无匹配时的兜底:若数据库中没有该模型的配置,系统会先用
_get_default_provider_by_model(model_name)做模型到厂家的默认映射(如gemini-2.0-flash -> google、qwen-plus -> qwen、gpt-4o -> openai),再尝试读取该厂家的default_base_url与环境变量 API Key(app/services/simple_analysis_service.py); - 最终回退:映射失败或厂家查询异常时,直接返回硬编码默认 URL 与环境变量 Key。
2.2 硬编码默认值的位置
代码内硬编码默认地址集中在tradingagents/llm_clients/provider_keys.py的default_backend_url()函数(tradingagents/llm_clients/provider_keys.py),内置了主流厂家的 URL 映射:
| provider key | 硬编码默认 URL |
|---|---|
| https://generativelanguage.googleapis.com/v1beta | |
| qwen | https://dashscope.aliyuncs.com/compatible-mode/v1 |
| openai | https://api.openai.com/v1 |
| deepseek | https://api.deepseek.com |
| anthropic | https://api.anthropic.com |
| openrouter | https://openrouter.ai/api/v1 |
| aihubmix | https://aihubmix.com/v1 |
| ollama | http://localhost:11434/v1 |
| qianfan | https://qianfan.baidubce.com/v2 |
| siliconflow | https://api.siliconflow.cn/v1 |
| glm | https://open.bigmodel.cn/api/paas/v4/ |
未命中的厂家默认回落至 qwen 地址。注意:_get_default_backend_url()在 app/services/simple_analysis_service.py 中还会对302ai与aihubmix做特判(分别返回https://api.302.ai/v1与https://aihubmix.com/v1),随后才委托给default_backend_url()。
2.3 厂商别名归一化
由于用户可能在界面填写中文名(如"阿里百炼""智谱"),系统通过normalize_provider_key()(tradingagents/llm_clients/provider_keys.py)将别名归一为规范 key:dashscope/alibaba/阿里百炼→qwen,zhipu/智谱→glm。因此llm_providers.name与llm_configs[].provider可以安全使用别名,不影响default_base_url的匹配。
2.4 一个需要注意的特判:qwen 与旧地址
源码中还有一处兼容逻辑(app/services/simple_analysis_service.py):当归一化后的 provider 为qwen且 backend_url 恰好等于旧的https://dashscope.aliyuncs.com/api/v1时,会强制替换为default_backend_url("qwen")(即 compatible-mode 兼容端点)。这意味着升级旧库后,即使库里残留旧版 dashscope 地址,也会被自动纠正为兼容模式端点。
三、三个典型使用场景与日志特征
以下场景均可在日志中直接观察命中层级,便于排障。
场景 1:使用厂家默认地址
- 配置:厂家
google的default_base_url = https://generativelanguage.googleapis.com/v1;模型gemini-2.0-flash未配置api_base。 - 结果:使用厂家的
default_base_url。 - 日志:
✅ [同步查询] 使用厂家 google 的 default_base_url: https://generativelanguage.googleapis.com/v1
场景 2:使用模型自定义地址(优先级更高)
- 配置:厂家
google的default_base_url = https://generativelanguage.googleapis.com/v1;模型gemini-2.0-flash配置了api_base = https://custom-api.google.com/v1。 - 结果:使用模型的
api_base。 - 日志:
✅ [同步查询] 模型 gemini-2.0-flash 使用自定义 API: https://custom-api.google.com/v1
场景 3:两级都缺失,回退硬编码默认值
- 配置:厂家
google未配置default_base_url;模型gemini-2.0-flash未配置api_base。 - 结果:使用硬编码默认 URL。
- 日志:
⚠️ 使用硬编码的默认 backend_url: https://generativelanguage.googleapis.com/v1(_get_default_backend_url会先打印🔧 [默认URL] google -> ...)
四、三种配置方式
方式 1:通过 Web 界面配置
- 登录系统;
- 进入设置 → 厂家管理;
- 点击目标厂家的编辑按钮;
- 在默认API地址输入框中填写 API 地址;
- 点击更新按钮保存。
前端对应实现位于 frontend/src/views/Settings/components/ProviderDialog.vue,表单项 label 为"默认API地址",placeholder 为https://api.openai.com/v1。该组件还预置了各厂家的模板默认值(如 aihubmix 为https://aihubmix.com/v1、dashscope 为https://dashscope.aliyuncs.com/api/v1、deepseek 为https://api.deepseek.com等),新建厂家时可直接套用。
厂家名称: Google AI 默认API地址: https://generativelanguage.googleapis.com/v1 API Key: your_google_api_key_here方式 2:通过 MongoDB 直接配置
适用于批量初始化或脚本化运维场景:
// 连接 MongoDB use trading_agents // 更新厂家配置 db.llm_providers.updateOne( { "name": "google" }, { "$set": { "default_base_url": "https://generativelanguage.googleapis.com/v1" } } )查询确认:
db.llm_providers.find({ "name": "google" }).pretty()新增厂家示例(结构对应 app/models/config.py 的LLMProviderRequest):
db.llm_providers.insertOne({ "name": "custom_provider", "display_name": "自定义厂家", "default_base_url": "https://api.custom-provider.com/v1", "api_key": "your_api_key_here" })方式 3:通过 REST API 配置
厂家管理路由位于 app/routers/config.py,GET /api/config/llm/providers会返回包含default_base_url的厂家列表(源码 app/routers/config.py 将provider.default_base_url原样返回)。更新厂家配置:
curl -X PUT "http://localhost:8000/api/config/providers/google" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "default_base_url": "https://generativelanguage.googleapis.com/v1" }'五、支持的厂家一览
以下为系统预设支持的厂家及其默认 API 地址(综合 docs/configuration/DEFAULT_BASE_URL_USAGE.md 与 app/scripts/init_providers.py 初始化数据):
| 厂家名称 | 默认 API 地址 |
|---|---|
| https://generativelanguage.googleapis.com/v1 | |
| dashscope | https://dashscope.aliyuncs.com/api/v1 |
| openai | https://api.openai.com/v1 |
| deepseek | https://api.deepseek.com |
| anthropic | https://api.anthropic.com |
| openrouter | https://openrouter.ai/api/v1 |
| qianfan | https://qianfan.baidubce.com/v2 |
| 302ai | https://api.302.ai/v1 |
另外,init_providers.py中还预置了 glm(https://open.bigmodel.cn/api/paas/v4)、siliconflow(https://api.siliconflow.cn/v1)、aihubmix(https://aihubmix.com/v1)等厂家;qwen 的实际初始化地址为 compatible-mode 端点(https://dashscope.aliyuncs.com/compatible-mode/v1)。若你的部署库中这些厂家的default_base_url与上表不同,以数据库中实际配置为准(数据库值优先于代码默认值)。
六、验证与测试
6.1 官方测试脚本
仓库提供两个现成脚本:
python scripts/test_default_base_url.py该脚本(scripts/test_default_base_url.py)的执行流程为:
- 连接 MongoDB,读取厂家
google的原始default_base_url; - 将其临时改为
https://test-api.google.com/v1; - 调用
get_provider_and_url_by_model_sync("gemini-2.0-flash"),断言返回的backend_url等于测试地址; - 调用
create_analysis_config(...)创建分析配置,断言配置中的backend_url正确; - 恢复原始配置(有值则
$set还原,无值则$unset删除字段)。
预期输出:
✅ backend_url 正确: https://test-api.google.com/v1 ✅ 配置中的 backend_url 正确: https://test-api.google.com/v1另一个脚本 scripts/test_default_base_url_fix.py 从三个层面验证修复效果:调用tradingagents.graph.trading_graph.create_llm_by_provider创建 LLM 实例并检查openai_api_base属性;通过create_analysis_config验证厂家的default_base_url写入分析配置;初始化TradingAgentsGraph并检查quick_thinking_llm/deep_thinking_llm的 base_url 是否正确。
6.2 手动测试步骤
- 修改厂家的
default_base_url; - 创建分析配置;
- 验证
backend_url是否使用了default_base_url; - 恢复原始配置。
6.3 日志验证
启动后端服务后,日志会明确显示最终采用的地址与来源:
.\.venv\Scripts\python -m uvicorn app.main:app --reload日志示例:
✅ [同步查询] 使用厂家 google 的 default_base_url: https://generativelanguage.googleapis.com/v1 ✅ 使用数据库配置的 backend_url: https://generativelanguage.googleapis.com/v1 来源: 模型 gemini-2.0-flash 的配置或厂家 google 的默认地址创建分析配置时还会打印(app/services/simple_analysis_service.py):
✅ 使用数据库配置的 backend_url: https://... 来源: 模型 ... 的配置或厂家 ... 的默认地址 🔑 快速模型 API Key: 已配置 / 未配置(将使用环境变量) 🔑 深度模型 API Key: 已配置 / 未配置(将使用环境变量)七、API Key 的并行优先级(关联说明)
与backend_url配套,get_provider_and_url_by_model_sync还同时解析 API Key,其优先级为模型配置的 api_key > 厂家配置的 api_key > 环境变量(见 app/services/simple_analysis_service.py),并会过滤掉占位值"your-api-key"。环境变量名称映射定义在env_key_for_provider()(tradingagents/llm_clients/provider_keys.py),例如GOOGLE_API_KEY、DASHSCOPE_API_KEY、OPENAI_API_KEY、DEEPSEEK_API_KEY等。这两条优先级链共同决定了分析任务的最终连通性。更详细的 API Key 机制可参考 docs/configuration/API_KEY_PRIORITY.md。
八、注意事项
- 配置优先级:模型配置的
api_base优先级高于厂家的default_base_url; - URL 格式:确保 URL 格式正确,以
https://开头;若厂家要求,需以/v1结尾(如 dashscope 的 compatible-mode 端点); - 重启服务:修改配置后建议重启后端服务使配置生效;
- 测试验证:修改配置后建议运行
scripts/test_default_base_url.py验证是否生效; - 环境变量兜底:API Key 可留空并改用
.env环境变量注入,前端表单对此有明确提示(frontend/src/views/Settings/components/ProviderDialog.vue)。
九、常见问题(FAQ)
Q1:修改了default_base_url但没有生效?
原因:模型配置中存在api_base字段,其优先级更高。
解决方法:
- 检查
system_configs.llm_configs[]中该模型是否配置了api_base; - 若有,删除或修改模型配置的
api_base; - 或者直接在模型配置中设置
api_base(此时模型级地址会覆盖厂家级)。
Q2:如何知道当前使用的是哪个配置?
方法:查看后端日志,日志会打印配置来源,三种典型日志:
✅ [同步查询] 模型 gemini-2.0-flash 使用自定义 API: https://custom-api.google.com/v1 ✅ [同步查询] 使用厂家 google 的 default_base_url: https://generativelanguage.googleapis.com/v1 ⚠️ 使用硬编码的默认 backend_url: https://generativelanguage.googleapis.com/v1Q3:如何添加新的厂家?
方法:在 Web 界面(设置 → 厂家管理 → 新增)或通过 MongoDBinsertOne添加新厂家,结构参考上文方式 2 的示例;也可通过 REST API 创建(对应 app/routers/config.py 的POST /api/config/llm/providers路由)。
Q4:使用代理中转服务(如 302AI、AIHubMix)需要注意什么?
这些聚合渠道的default_base_url通常是统一的 OpenAI 兼容网关地址(https://api.302.ai/v1、https://aihubmix.com/v1),在厂家配置中填好网关地址后,模型选择对应的上游模型名即可,无需为每个模型单独配置api_base。
相关文件索引
- 配置说明原文:docs/configuration/DEFAULT_BASE_URL_USAGE.md
- 核心解析实现:app/services/simple_analysis_service.py
- 硬编码默认地址:tradingagents/llm_clients/provider_keys.py
- 厂家数据模型:app/models/config.py
- 厂家管理路由:app/routers/config.py
- 厂家初始化脚本:app/scripts/init_providers.py
- 前端配置表单:frontend/src/views/Settings/components/ProviderDialog.vue
- 测试脚本:scripts/test_default_base_url.py、scripts/test_default_base_url_fix.py
- 关联文档:API Key 配置优先级
【免费下载链接】TradingAgents-CN基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考