ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何构建具有回退功能的多提供商搜索路由器
教程

如何构建具有回退功能的多提供商搜索路由器

构建一个搜索路由器,尝试具有自动回退功能的 Scavio、SearxNG 和 Tavily。适用于 Pi Coding Agent 和其他 AI 代理运行时。

获取免费API密钥API文档

r/PiCodingAgent 帖子询问了如何可靠地搜索编码代理。问题是:单一提供商搜索会默默失败。本教程构建了一个路由器,该路由器按优先级顺序尝试多个提供程序并自动回退。适用于任何代理运行时,而不仅仅是 Pi。

前置条件

  • Scavio API 密钥
  • Python 3.8+
  • 可选:Tavily API 密钥、SearxNG 实例

操作指南

步骤 1: 定义提供者配置

列出具有端点和优先级的提供者。

Python
providers = [
    {
        'name': 'scavio',
        'url': 'https://api.scavio.dev/api/v1/search',
        'headers': lambda: {'x-api-key': os.environ['SCAVIO_API_KEY']},
        'body': lambda q: {'platform': 'google', 'query': q},
        'parse': lambda r: r.get('organic_results', []),
        'cost': 0.005,
        'priority': 1
    },
    {
        'name': 'searxng',
        'url': 'http://localhost:8080/search',
        'headers': lambda: {},
        'body': lambda q: {'q': q, 'format': 'json'},
        'parse': lambda r: r.get('results', []),
        'cost': 0,
        'priority': 2
    },
    {
        'name': 'tavily',
        'url': 'https://api.tavily.com/search',
        'headers': lambda: {},
        'body': lambda q: {'api_key': os.environ.get('TAVILY_API_KEY', ''), 'query': q},
        'parse': lambda r: r.get('results', []),
        'cost': 0.008,
        'priority': 3
    },
]

步骤 2: 构建具有后备功能的路由器

按优先顺序尝试每个提供程序,失败时再回退。

Python
import requests, os, time

def search_with_fallback(query, providers_list=providers):
    sorted_providers = sorted(providers_list, key=lambda p: p['priority'])
    errors = []
    for provider in sorted_providers:
        try:
            resp = requests.post(provider['url'],
                headers=provider['headers'](),
                json=provider['body'](query),
                timeout=10)
            resp.raise_for_status()
            results = provider['parse'](resp.json())
            if results:
                return {'provider': provider['name'], 'results': results, 'cost': provider['cost']}
            errors.append(f"{provider['name']}: empty results")
        except Exception as e:
            errors.append(f"{provider['name']}: {str(e)}")
    return {'provider': None, 'results': [], 'errors': errors}

步骤 3: 添加延迟感知路由

跟踪响应时间并选择更快的提供商。

Python
provider_stats = {}

def update_stats(provider_name, latency, success):
    if provider_name not in provider_stats:
        provider_stats[provider_name] = {'total': 0, 'success': 0, 'avg_latency': 0}
    stats = provider_stats[provider_name]
    stats['total'] += 1
    if success: stats['success'] += 1
    stats['avg_latency'] = (stats['avg_latency'] * (stats['total'] - 1) + latency) / stats['total']

def smart_search(query):
    start = time.time()
    result = search_with_fallback(query)
    latency = time.time() - start
    if result['provider']:
        update_stats(result['provider'], latency, True)
    return result

步骤 4: 日志提供商使用成本跟踪

跟踪哪个提供商为每个查询提供服务。

Python
import json, datetime

def log_search(query, result):
    with open('search_router_log.jsonl', 'a') as f:
        f.write(json.dumps({
            'ts': datetime.datetime.now().isoformat(),
            'query': query,
            'provider': result['provider'],
            'cost': result.get('cost', 0),
            'result_count': len(result.get('results', []))
        }) + '\n')

Python 示例

Python
import os, requests

def search(query):
    for provider in ['scavio', 'searxng', 'tavily']:
        try:
            if provider == 'scavio':
                r = requests.post('https://api.scavio.dev/api/v1/search',
                    headers={'x-api-key': os.environ['SCAVIO_API_KEY']},
                    json={'platform': 'google', 'query': query}, timeout=10)
                results = r.json().get('organic_results', [])
                if results: return {'provider': 'scavio', 'results': results}
        except: continue
    return {'provider': None, 'results': []}

JavaScript 示例

JavaScript
async function search(query) {
  try {
    const res = await fetch('https://api.scavio.dev/api/v1/search', {
      method: 'POST',
      headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
      body: JSON.stringify({platform: 'google', query})
    });
    const data = await res.json();
    if (data.organic_results?.length) return {provider: 'scavio', results: data.organic_results};
  } catch(e) { /* fallback */ }
}

预期输出

JSON
Multi-provider search router with automatic fallback. Priority: Scavio ($0.005) > SearxNG (free/self-hosted) > Tavily ($0.008). Latency tracking and JSONL cost log.

相关教程

  • 如何构建供应商弹性搜索堆栈 (2026)
  • 当 Gemini 拒绝搜索时如何添加搜索回退

常见问题

大多数开发者在15到30分钟内完成本教程。您需要一个Scavio API密钥(免费套餐即可)和可用的Python或JavaScript环境。

Scavio API 密钥. Python 3.8+. 可选:Tavily API 密钥、SearxNG 实例. Scavio API密钥注册即送50个免费积分。

可以。免费套餐注册即送50个积分,完全足够完成本教程并构建一个可运行的原型解决方案。

Scavio提供原生LangChain包(langchain-scavio)、MCP服务器以及适用于任何HTTP客户端的REST API。本教程使用 the raw REST API, 但您可以根据需要适配您选择的框架。

相关资源

Best Of

2026最佳本地商业数据API

Read more
Best Of

2026年最佳域名权威度API

Read more
Comparison

Google Places API vs SERP Local Pack API

Read more
Solution

Sonar API

Read more
Solution

从 Brave Search API 迁移到 Scavio 获得更好覆盖

Read more
Use Case

n8n 搜索数据增强工作流

Read more

开始构建

构建一个搜索路由器,尝试具有自动回退功能的 Scavio、SearxNG 和 Tavily。适用于 Pi Coding Agent 和其他 AI 代理运行时。

获取免费API密钥阅读文档
ScavioScavio

面向AI智能体的实时搜索API。搜索所有平台,不仅仅是Google。

产品

  • 功能
  • 定价
  • 控制台
  • 联盟计划

开发者

  • 文档
  • API参考
  • 快速开始
  • MCP集成
  • Python SDK

替代方案

  • Tavily替代方案
  • SerpAPI替代方案
  • Firecrawl替代方案
  • Exa替代方案

工具

  • JSON格式化
  • cURL转代码
  • Token计数器
  • 全部工具

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策