跳转到内容

多源数据供应商路由与降级

多源数据供应商路由与降级

学习目标

读完本章后,你将能够:

  • 设计双层数据供应商配置(类别级默认 + 工具级覆盖)
  • 实现运行时降级链(主供应商 → 备用供应商)
  • 评估不同降级触发条件的适用场景
  • 将数据路由与 Agent 工具调用解耦

核心概念

为什么需要多供应商路由

AI Agent 在获取外部数据(金融行情、新闻、天气、搜索等)时,单一供应商存在以下风险:

风险表现影响
限流API 调用频率超过配额请求被拒,Agent 流水线中断
服务中断供应商故障或维护数据不可用
覆盖不足某些数据点供应商不提供功能缺失
成本高用量场景下费用过高需要降级到免费方案

双层配置模型

优先级:工具级配置 > 类别级配置 > 默认供应商。

示例配置

# 类别级:所有新闻类工具默认用 yfinance
data_vendors:
core_stock_apis: "yfinance"
technical_indicators: "yfinance"
fundamental_data: "yfinance"
news_data: "yfinance"
# 工具级:get_stock_data 覆盖为 alpha_vantage
tool_vendors:
get_stock_data: "alpha_vantage"

运行时降级链

降级链在每次工具调用时动态构建:

关键设计决策:哪些异常触发降级?

异常类型是否触发降级理由
限流(429 / RateLimitError)临时性故障,备用供应商可能未达限流
网络超时否(通常)所有供应商可能都超时,降级无意义
认证失败备用供应商的 API Key 也可能无效
数据不存在备用供应商同样没有该数据

供应商分类组织

将工具按数据类别分组,而非直接映射到供应商:

类别描述工具
core_stock_apisOHLCV 价格数据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/字典)明确、可审计新增供应商需改配置
动态发现(插件注册)运行时扩展复杂度增加,版本兼容难

推荐:固定供应商集合时用静态配置;需要第三方扩展时用插件注册。

参考来源