ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何对每美元的搜索 API 质量进行基准测试
教程

如何对每美元的搜索 API 质量进行基准测试

衡量每花费一美元的搜索 API 结果质量。将 Scavio、Brave、Tavily 和 Perplexity 与自动相关性评分进行比较。

获取免费API密钥API文档

如果结果很差,更便宜的搜索也无济于事。本教程构建了一个自动化基准,使用相关性指标对搜索 API 结果质量进行评分,并计算质量/美元比率。您可以在多个提供商之间测试相同的查询并获得排名比较。该基准测试使用关键词重叠、领域权威启发法和新鲜度评分——不需要法学硕士法官。

前置条件

  • 已安装 Python 3.9+
  • 至少两个搜索提供商的 API 密钥
  • 请求已安装库

操作指南

步骤 1: 定义具有预期结果的基准查询

创建一组测试查询,您可以知道什么是好的结果。包括预期的顶级域和应出现的关键术语。

Python
benchmark_queries = [
    {
        'query': 'python asyncio tutorial 2026',
        'expected_domains': ['docs.python.org', 'realpython.com', 'stackoverflow.com'],
        'expected_terms': ['asyncio', 'await', 'coroutine', 'event loop'],
    },
    {
        'query': 'next.js app router server components',
        'expected_domains': ['nextjs.org', 'vercel.com', 'react.dev'],
        'expected_terms': ['server components', 'app router', 'next.js'],
    },
    {
        'query': 'best CRM software small business 2026',
        'expected_domains': ['forbes.com', 'g2.com', 'capterra.com'],
        'expected_terms': ['CRM', 'pricing', 'small business', 'features'],
    },
    {
        'query': 'docker compose networking tutorial',
        'expected_domains': ['docs.docker.com', 'stackoverflow.com'],
        'expected_terms': ['docker', 'compose', 'network', 'bridge'],
    },
    {
        'query': 'react useEffect cleanup function',
        'expected_domains': ['react.dev', 'stackoverflow.com', 'kentcdodds.com'],
        'expected_terms': ['useEffect', 'cleanup', 'unmount', 'return'],
    },
]

print(f'{len(benchmark_queries)} benchmark queries defined')

步骤 2: 构建质量评分函数

根据域匹配、术语覆盖率、结果计数和片段质量对每个结果集进行评分。返回 0-100 的质量分数。

Python
def score_results(results: list, expected_domains: list, expected_terms: list) -> dict:
    if not results:
        return {'total': 0, 'domain_score': 0, 'term_score': 0, 'count_score': 0}
    # Domain match score (0-40 points)
    result_domains = [r.get('link', '').split('/')[2] if '/' in r.get('link', '') else ''
                      for r in results[:10]]
    domain_hits = sum(1 for ed in expected_domains
                      if any(ed in rd for rd in result_domains))
    domain_score = min(domain_hits / max(len(expected_domains), 1) * 40, 40)
    # Term coverage score (0-40 points)
    all_text = ' '.join(r.get('title', '') + ' ' + r.get('snippet', '')
                        for r in results[:10]).lower()
    term_hits = sum(1 for t in expected_terms if t.lower() in all_text)
    term_score = min(term_hits / max(len(expected_terms), 1) * 40, 40)
    # Result count score (0-20 points)
    count_score = min(len(results) / 10 * 20, 20)
    total = round(domain_score + term_score + count_score, 1)
    return {'total': total, 'domain_score': round(domain_score, 1),
            'term_score': round(term_score, 1), 'count_score': round(count_score, 1)}

print('Quality scorer ready')

步骤 3: 跨提供商运行基准并计算每美元的质量

针对每个提供商执行每个基准查询,对结果进行评分,并计算质量/美元比率。

Python
import requests, os, time

SCAVIO_KEY = os.environ.get('SCAVIO_API_KEY', '')

def search_scavio(query):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us', 'num_results': 10})
    return [{'title': r['title'], 'link': r['link'], 'snippet': r.get('snippet', '')}
            for r in resp.json().get('organic_results', [])]

PRICES = {'scavio': 0.005}

def run_benchmark():
    results = {}
    for provider in PRICES:
        scores = []
        for bq in benchmark_queries:
            search_results = search_scavio(bq['query'])
            score = score_results(search_results, bq['expected_domains'], bq['expected_terms'])
            scores.append(score['total'])
            time.sleep(0.3)
        avg_score = sum(scores) / len(scores)
        price = PRICES[provider]
        qpd = avg_score / (price * 1000) if price > 0 else avg_score  # quality per $1
        results[provider] = {'avg_quality': round(avg_score, 1),
                             'price_per_1k': price * 1000,
                             'quality_per_dollar': round(qpd, 1)}
    print(f'{"Provider":<15} {"Quality":>8} {"$/1K":>8} {"Q/$":>8}')
    print('-' * 42)
    for name, r in sorted(results.items(), key=lambda x: -x[1]['quality_per_dollar']):
        print(f'{name:<15} {r["avg_quality"]:>7.1f} {r["price_per_1k"]:>7.2f} {r["quality_per_dollar"]:>7.1f}')
    return results

run_benchmark()

Python 示例

Python
import requests, os, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def search(query):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us', 'num_results': 10})
    return resp.json().get('organic_results', [])

def score(results, terms):
    text = ' '.join(r.get('snippet', '') for r in results).lower()
    hits = sum(1 for t in terms if t.lower() in text)
    return hits / len(terms) * 100 if terms else 0

queries = [('python asyncio', ['asyncio', 'await', 'coroutine']),
           ('react hooks', ['useState', 'useEffect', 'hook'])]
for q, terms in queries:
    results = search(q)
    s = score(results, terms)
    print(f'{q}: quality={s:.0f}/100, cost=$0.005')

JavaScript 示例

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function search(query) {
  const resp = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query, country_code: 'us', num_results: 10 })
  });
  return (await resp.json()).organic_results || [];
}

function score(results, terms) {
  const text = results.map(r => r.snippet || '').join(' ').toLowerCase();
  const hits = terms.filter(t => text.includes(t.toLowerCase())).length;
  return (hits / terms.length) * 100;
}

const results = await search('python asyncio tutorial');
console.log(`Quality: ${score(results, ['asyncio', 'await', 'coroutine']).toFixed(0)}/100`);

预期输出

JSON
5 benchmark queries defined
Quality scorer ready

Provider         Quality     $/1K      Q/$
------------------------------------------
scavio              78.4     5.00     15.7

Interpretation: 15.7 quality points per dollar spent
Higher Q/$ = better value for money

相关教程

  • 如何计算每个代理搜索查询的实际成本
  • 如何为最便宜的搜索提供商构建成本路由器
  • 如何以编程方式验证 AI 搜索结果

常见问题

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

已安装 Python 3.9+. 至少两个搜索提供商的 API 密钥. 请求已安装库. Scavio API密钥注册即送50个免费积分。

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

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

相关资源

Best Of

Google I/O 2026 AI模式变化后最佳搜索API

Read more
Glossary

搜索 API 供应商格局(2026)

Read more
Best Of

2026 年最佳 SERP API 提供商按价格排名

Read more
Glossary

免费搜索API层级对比

Read more
Comparison

Search APIs (Scavio, Tavily, SerpAPI) vs Headless Browser (Playwright, Puppeteer, Browserbase)

Read more
Comparison

Google Places API vs SERP Local Pack API

Read more

开始构建

衡量每花费一美元的搜索 API 结果质量。将 Scavio、Brave、Tavily 和 Perplexity 与自动相关性评分进行比较。

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

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

产品

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

开发者

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

替代方案

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

工具

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

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策