ScavioScavio
产品定价文档
登录开始使用
  1. 首页
  2. 教程
  3. 如何为 AI 代理构建精选搜索
教程

如何为 AI 代理构建精选搜索

构建一个搜索包装器,在将结果提供给人工智能代理之前对结果进行过滤、排名和压缩。降低 70% 的代币成本并减少幻觉。

获取免费API密钥API文档

为 AI 代理构建精选搜索意味着通过过滤、重新排名和压缩来包装搜索 API,以便代理仅接收高信号结果,而不是原始 SERP 噪音。原始搜索结果浪费了广告、不相关的域和冗长的片段上的标记,从而削弱了代理的推理能力。本教程构建了一个位于代理和 Scavio 搜索 API 之间的 Python 中间件,应用域白名单、相关性评分和代码段截断,将令牌使用量减少 70%,同时提高答案质量。

前置条件

  • Python 3.8+
  • 请求已安装库
  • 来自 scavio.dev 的 Scavio API 密钥
  • 代币计数的基本了解(tiktoken可选)

操作指南

步骤 1: 定义域过滤器和质量规则

为域创建允许列表和阻止列表,以及过滤低质量结果的规则,例如没有答案的论坛或付费内容。

Python
BLOCKED_DOMAINS = [
    'pinterest.com', 'quora.com', 'facebook.com',
    'instagram.com', 'tiktok.com', 'twitter.com',
]

TRUSTED_DOMAINS = [
    'docs.python.org', 'developer.mozilla.org', 'github.com',
    'stackoverflow.com', 'arxiv.org', 'huggingface.co',
]

def domain_score(url):
    domain = url.split('/')[2] if url else ''
    if any(b in domain for b in BLOCKED_DOMAINS):
        return -10
    if any(t in domain for t in TRUSTED_DOMAINS):
        return 5
    return 0

步骤 2: 通过压缩构建搜索包装器

创建一个调用 Scavio、过滤结果、对相关性进行评分并将代码片段压缩到令牌预算的函数。

Python
import requests, os

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

def curated_search(query, max_results=5, max_snippet_chars=200):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': query, 'country_code': 'us'}).json()
    results = data.get('organic_results', [])
    scored = []
    for r in results:
        ds = domain_score(r.get('link', ''))
        if ds < 0:
            continue
        snippet = (r.get('snippet') or '')[:max_snippet_chars]
        scored.append({
            'title': r.get('title', ''),
            'url': r.get('link', ''),
            'snippet': snippet,
            'score': ds + r.get('position', 10) * -0.5
        })
    scored.sort(key=lambda x: x['score'], reverse=True)
    return scored[:max_results]

步骤 3: 添加相关性重新排名

按与原始查询重叠的关键字对结果进行评分,以将最相关的结果推送到顶部。

Python
def relevance_score(query, result):
    query_terms = set(query.lower().split())
    text = f"{result['title']} {result['snippet']}".lower()
    matches = sum(1 for t in query_terms if t in text)
    return matches / max(len(query_terms), 1)

def curated_search_v2(query, max_results=5, max_snippet_chars=200):
    raw = curated_search(query, max_results=15, max_snippet_chars=max_snippet_chars)
    for r in raw:
        r['score'] += relevance_score(query, r) * 3
    raw.sort(key=lambda x: x['score'], reverse=True)
    return raw[:max_results]

步骤 4: 衡量代币节省

比较原始结果和策划结果之间的令牌计数以验证压缩率。

Python
def estimate_tokens(text):
    return len(text.split()) * 1.3  # rough estimate

def compare_token_usage(query):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': query, 'country_code': 'us'}).json()
    raw_text = str(data.get('organic_results', []))
    raw_tokens = estimate_tokens(raw_text)

    curated = curated_search_v2(query)
    curated_text = str(curated)
    curated_tokens = estimate_tokens(curated_text)

    savings = (1 - curated_tokens / raw_tokens) * 100
    print(f'Raw: ~{int(raw_tokens)} tokens')
    print(f'Curated: ~{int(curated_tokens)} tokens')
    print(f'Savings: {savings:.0f}%')

compare_token_usage('how to deploy FastAPI to production')

Python 示例

Python
import os, requests

H = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
BLOCKED = ['pinterest.com', 'quora.com', 'facebook.com']
TRUSTED = ['docs.python.org', 'developer.mozilla.org', 'github.com', 'stackoverflow.com']

def curated_search(query, max_results=5, max_chars=200):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=H, json={'query': query, 'country_code': 'us'}).json()
    results = []
    query_terms = set(query.lower().split())
    for r in data.get('organic_results', []):
        domain = r.get('link', '').split('/')[2] if r.get('link') else ''
        if any(b in domain for b in BLOCKED):
            continue
        snippet = (r.get('snippet') or '')[:max_chars]
        text = f"{r.get('title', '')} {snippet}".lower()
        relevance = sum(1 for t in query_terms if t in text) / max(len(query_terms), 1)
        trust = 5 if any(t in domain for t in TRUSTED) else 0
        results.append({
            'title': r.get('title', ''),
            'url': r.get('link', ''),
            'snippet': snippet,
            'score': trust + relevance * 3
        })
    results.sort(key=lambda x: x['score'], reverse=True)
    return results[:max_results]

for r in curated_search('FastAPI deployment best practices 2026'):
    print(f"[{r['score']:.1f}] {r['title']}")
    print(f"  {r['url']}")

JavaScript 示例

JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const BLOCKED = ['pinterest.com', 'quora.com', 'facebook.com'];
const TRUSTED = ['docs.python.org', 'developer.mozilla.org', 'github.com', 'stackoverflow.com'];

async function curatedSearch(query, maxResults = 5, maxChars = 200) {
  const data = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST', headers: H,
    body: JSON.stringify({query, country_code: 'us'})
  }).then(r => r.json());
  const queryTerms = new Set(query.toLowerCase().split(' '));
  const results = (data.organic_results || []).map(r => {
    const domain = (r.link || '').split('/')[2] || '';
    if (BLOCKED.some(b => domain.includes(b))) return null;
    const snippet = (r.snippet || '').slice(0, maxChars);
    const text = \`\${r.title || ''} \${snippet}\`.toLowerCase();
    const relevance = [...queryTerms].filter(t => text.includes(t)).length / queryTerms.size;
    const trust = TRUSTED.some(t => domain.includes(t)) ? 5 : 0;
    return {title: r.title, url: r.link, snippet, score: trust + relevance * 3};
  }).filter(Boolean).sort((a, b) => b.score - a.score).slice(0, maxResults);
  return results;
}

curatedSearch('FastAPI deployment best practices 2026').then(results => {
  results.forEach(r => console.log(\`[\${r.score.toFixed(1)}] \${r.title}\`));
});

预期输出

JSON
[8.0] FastAPI Deployment Guide - Official Docs
  https://docs.python.org/fastapi-deploy
[5.5] Deploy FastAPI on AWS Lambda in 2026
  https://github.com/example/fastapi-lambda
[3.0] Production FastAPI Checklist
  https://example.com/fastapi-prod

相关教程

  • 如何审核 AI 代理中的搜索工具安全性
  • 如何通过结构化搜索奠定本地法学硕士的基础
  • 如何使用搜索 API 构建潜在客户发掘渠道

常见问题

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

Python 3.8+. 请求已安装库. 来自 scavio.dev 的 Scavio API 密钥. 代币计数的基本了解(tiktoken可选). Scavio API密钥注册即送50个免费积分。

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

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

相关资源

Best Of

2026年5月本地LLM个人知识库工具推荐

Read more
Best Of

2026年本地LLM接地最佳搜索API

Read more
Workflow

每日本地法学硕士搜索接地管道

Read more
Glossary

LLM 流量取代

Read more
Solution

用搜索检测和纠正LLM错误回答

Read more
Solution

用实时搜索数据支撑LLM回答

Read more

开始构建

构建一个搜索包装器,在将结果提供给人工智能代理之前对结果进行过滤、排名和压缩。降低 70% 的代币成本并减少幻觉。

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

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

产品

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

开发者

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

替代方案

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

工具

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

© 2026 Scavio. 保留所有权利。

Featured on TAAFT
服务条款隐私政策