多源数据供应商路由与降级
多源数据供应商路由与降级
学习目标
读完本章后,你将能够:
- 设计双层数据供应商配置(类别级默认 + 工具级覆盖)
- 实现运行时降级链(主供应商 → 备用供应商)
- 评估不同降级触发条件的适用场景
- 将数据路由与 Agent 工具调用解耦
核心概念
为什么需要多供应商路由
AI Agent 在获取外部数据(金融行情、新闻、天气、搜索等)时,单一供应商存在以下风险:
| 风险 | 表现 | 影响 |
|---|---|---|
| 限流 | API 调用频率超过配额 | 请求被拒,Agent 流水线中断 |
| 服务中断 | 供应商故障或维护 | 数据不可用 |
| 覆盖不足 | 某些数据点供应商不提供 | 功能缺失 |
| 成本 | 高用量场景下费用过高 | 需要降级到免费方案 |
双层配置模型
优先级:工具级配置 > 类别级配置 > 默认供应商。
示例配置:
# 类别级:所有新闻类工具默认用 yfinancedata_vendors: core_stock_apis: "yfinance" technical_indicators: "yfinance" fundamental_data: "yfinance" news_data: "yfinance"
# 工具级:get_stock_data 覆盖为 alpha_vantagetool_vendors: get_stock_data: "alpha_vantage"运行时降级链
降级链在每次工具调用时动态构建:
关键设计决策:哪些异常触发降级?
| 异常类型 | 是否触发降级 | 理由 |
|---|---|---|
| 限流(429 / RateLimitError) | 是 | 临时性故障,备用供应商可能未达限流 |
| 网络超时 | 否(通常) | 所有供应商可能都超时,降级无意义 |
| 认证失败 | 否 | 备用供应商的 API Key 也可能无效 |
| 数据不存在 | 否 | 备用供应商同样没有该数据 |
供应商分类组织
将工具按数据类别分组,而非直接映射到供应商:
| 类别 | 描述 | 工具 |
|---|---|---|
| core_stock_apis | OHLCV 价格数据 | get_stock_data |
| technical_indicators | 技术指标(MACD/RSI 等) | get_indicators |
| fundamental_data | 财务报表 | get_fundamentals, get_balance_sheet, get_cashflow, get_income_statement |
| news_data | 新闻与内部交易 | get_news, get_global_news, get_insider_transactions |
优势:新增供应商时只需添加类别映射,不需要修改每个工具的调用代码。
问题与规避
限流触发后的 Token 浪费
问题:Agent 已经花费 Token 生成了工具调用参数,但供应商限流导致调用失败。如果 Agent 重新生成调用,又花费一次 Token。
对策:降级链在框架层处理(而非让 Agent 重新生成),对 Agent 透明。Agent 只看到最终结果或统一错误。
降级链过长导致延迟
问题:3 个供应商的降级链可能增加 2-3 倍延迟。
对策:
- 限制降级链长度(最多 2 个供应商)
- 仅对限流异常降级,网络错误直接失败
- 记录供应商健康状态,连续失败后临时标记为不可用
供应商 API 差异
问题:不同供应商返回的数据格式不同(字段名、时间格式、缺失值处理)。
对策:
- 在供应商适配器层做格式归一化
- 定义统一的内部数据模型(如
OHLCV结构体) - Agent 工具接收归一化后的数据
设计取舍
框架层降级 vs Agent 自主重试
| 方案 | 优势 | 代价 |
|---|---|---|
| 框架层降级 | Agent 透明,不浪费 Token | 框架需要知道所有供应商的异常类型 |
| Agent 自主重试 | 灵活,Agent 可选择不同工具 | 浪费 Token,增加延迟 |
推荐:对于临时性故障(限流),框架层降级更优;对于数据不存在等场景,让 Agent 自主决定下一步。
静态配置 vs 动态发现
| 方案 | 优势 | 代价 |
|---|---|---|
| 静态配置(YAML/字典) | 明确、可审计 | 新增供应商需改配置 |
| 动态发现(插件注册) | 运行时扩展 | 复杂度增加,版本兼容难 |
推荐:固定供应商集合时用静态配置;需要第三方扩展时用插件注册。
参考来源
- Alpha Vantage API Documentation — API 端点与限流策略
- yfinance Package — 免费金融数据抓取