ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何优化人工智能代理的搜索预算
教程

如何优化人工智能代理的搜索预算

通过缓存、查询重复数据删除、平台路由和预算上限,将 AI 代理的搜索 API 成本降低 60-80%。有效的 Python 实现。

获取免费API密钥API文档

每回合都进行搜索的人工智能代理会快速消耗积分。研究代理每次会话运行 50 次搜索,每次 0.005 美元,每次对话费用为 0.25 美元。本教程实现了四项优化:结果缓存、查询重复数据删除、平台感知路由和硬预算上限。它们共同削减了 60-80% 的成本,而不会降低产量。

前置条件

  • 已安装 Python 3.8+
  • 请求已安装库
  • 来自 scavio.dev 的 Scavio API 密钥
  • 使用搜索的现有代理

操作指南

步骤 1: 为搜索结果添加 TTL 缓存

缓存可配置窗口的结果。大多数 SERP 数据的有效期为 1-24 小时。

Python
import os, requests, hashlib, time

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

class SearchCache:
    def __init__(self, ttl=3600):
        self.cache = {}
        self.ttl = ttl
        self.hits = self.misses = 0

    def _key(self, query, platform):
        return hashlib.md5(f'{query}:{platform}'.encode()).hexdigest()

    def get(self, query, platform='google'):
        key = self._key(query, platform)
        if key in self.cache and time.time() - self.cache[key]['ts'] < self.ttl:
            self.hits += 1
            return self.cache[key]['data']
        self.misses += 1
        return None

    def set(self, query, platform, data):
        self.cache[self._key(query, platform)] = {'data': data, 'ts': time.time()}

    def stats(self):
        total = self.hits + self.misses
        rate = self.hits / total * 100 if total else 0
        return f'{self.hits} hits, {self.misses} misses ({rate:.0f}%)'

步骤 2: 实施查询重复数据删除

规范化查询以在访问 API 之前捕获接近重复的数据。

Python
import re

def normalize_query(query):
    q = re.sub(r'[^a-z0-9\s]', '', query.lower().strip())
    stop = {'the', 'a', 'an', 'is', 'are', 'what', 'how', 'do', 'does'}
    return ' '.join(sorted(w for w in q.split() if w not in stop))

class SmartSearch:
    def __init__(self):
        self.cache = SearchCache()
        self.norm_map = {}
        self.api_calls = 0

    def search(self, query, platform=None):
        if platform is None:
            platform = self._route(query)
        norm = normalize_query(query)
        if norm in self.norm_map:
            cached = self.cache.get(self.norm_map[norm], platform)
            if cached: return cached
        cached = self.cache.get(query, platform)
        if cached: return cached
        resp = requests.post('https://api.scavio.dev/api/v1/search',
            headers=H, json={'query': query, 'platform': platform, 'country_code': 'us'})
        data = resp.json()
        self.cache.set(query, platform, data)
        self.norm_map[norm] = query
        self.api_calls += 1
        return data

    def _route(self, query):
        q = query.lower()
        if any(w in q for w in ['price', 'buy', 'amazon', 'product']): return 'amazon'
        if any(w in q for w in ['reddit', 'opinion', 'recommend']): return 'reddit'
        if any(w in q for w in ['video', 'youtube', 'tutorial']): return 'youtube'
        return 'google'

步骤 3: 添加预算上限

防止代理超出每个会话的成本阈值。

Python
class BudgetSearch(SmartSearch):
    def __init__(self, max_budget=0.50):
        super().__init__()
        self.max_budget = max_budget

    def search(self, query, platform=None):
        if self.api_calls * 0.005 >= self.max_budget:
            return {'error': 'Budget exceeded', 'organic_results': []}
        return super().search(query, platform)

    def stats(self):
        cost = self.api_calls * 0.005
        print(f'API calls: {self.api_calls} (${cost:.3f} / ${self.max_budget:.3f} budget)')
        print(f'Cache: {self.cache.stats()}')

步骤 4: 通过模拟代理会话测试节省情况

运行实际的工作负载并衡量与简单方法相比的节省情况。

Python
smart = BudgetSearch(max_budget=0.50)

queries = [
    'best SERP API pricing 2026',
    'SERP API pricing comparison 2026',  # near-duplicate
    'best serp api pricing 2026',        # case duplicate
    'amazon price tracking API',          # -> amazon
    'reddit opinions on tavily',          # -> reddit
    'youtube tutorial web scraping',      # -> youtube
    'SERP API pricing comparison 2026',   # cached
    'web scraping API for beginners',
    'web scraping api beginners',         # near-duplicate
]

for q in queries:
    data = smart.search(q)
    n = len(data.get('organic_results', data.get('products', [])))
    print(f'  "{q[:45]}" -> {n} results')

print()
smart.stats()
naive = len(queries) * 0.005
actual = smart.api_calls * 0.005
print(f'Naive: ${naive:.3f}, Actual: ${actual:.3f}, Saved: {(1-actual/naive)*100:.0f}%')

Python 示例

Python
import os, requests, hashlib, time

API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
cache = {}
hits = misses = 0

def search(query, platform='google', ttl=3600):
    global hits, misses
    key = hashlib.md5(f'{query.lower()}:{platform}'.encode()).hexdigest()
    if key in cache and time.time() - cache[key]['ts'] < ttl:
        hits += 1; return cache[key]['data']
    misses += 1
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': query, 'platform': platform, 'country_code': 'us'}).json()
    cache[key] = {'data': data, 'ts': time.time()}
    return data

for q in ['serp api', 'serp api', 'SERP API']:
    search(q.lower())
print(f'Hits: {hits}, Misses: {misses}, Saved: ${hits * 0.005:.3f}')

JavaScript 示例

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const H = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
const cache = new Map();
let hits = 0, misses = 0;

async function search(query, platform = 'google', ttl = 3600) {
  const key = `${query.toLowerCase()}:${platform}`;
  const c = cache.get(key);
  if (c && Date.now() - c.ts < ttl * 1000) { hits++; return c.data; }
  misses++;
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: H,
    body: JSON.stringify({ query, platform, country_code: 'us' })
  }).then(r => r.json());
  cache.set(key, { data, ts: Date.now() });
  return data;
}

async function main() {
  for (const q of ['serp api', 'serp api', 'SERP API']) await search(q);
  console.log(`Hits: ${hits}, Misses: ${misses}`);
}
main().catch(console.error);

预期输出

JSON
  "best SERP API pricing 2026" -> 5 results
  "SERP API pricing comparison 2026" -> 5 results
  "best serp api pricing 2026" -> 5 results (cached)
  "amazon price tracking API" -> 5 results
  "reddit opinions on tavily" -> 5 results
  "youtube tutorial web scraping" -> 5 results
  "SERP API pricing comparison 2026" -> 5 results (cached)
  "web scraping API for beginners" -> 5 results
  "web scraping api beginners" -> 5 results (cached)

API calls: 6 ($0.030 / $0.500 budget)
Cache: 3 hits, 6 misses (33%)
Naive: $0.045, Actual: $0.030, Saved: 33%

相关教程

  • 如何向深度研究代理添加搜索
  • 如何以编程方式比较 SERP API 定价模型
  • 如何在队列和实时 SERP 模式之间进行选择

常见问题

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

已安装 Python 3.8+. 请求已安装库. 来自 scavio.dev 的 Scavio 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

开始构建

通过缓存、查询重复数据删除、平台路由和预算上限,将 AI 代理的搜索 API 成本降低 60-80%。有效的 Python 实现。

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

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

产品

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

开发者

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

替代方案

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

工具

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

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策