通过将 HTTP 调用从 Brave Search API 端点交换到 Scavio API 端点来替换 OpenClaw 代理中的 Brave Search。迁移需要更改 URL、从 Brave API 密钥标头切换到 Scavio x-api-key 标头,并更新响应解析器以处理 Scavio 的 JSON 结构。交换过程只需不到 10 分钟,您的代理即可通过同一端点访问 Google、Amazon、YouTube、Reddit 和 Walmart,而 Brave Search 仅返回 Web 结果。
前置条件
- 已安装 Python 3.8+
- 请求已安装库
- 来自 scavio.dev 的 Scavio API 密钥
- 使用 Brave Search 的现有 OpenClaw 代理
操作指南
步骤 1: 识别勇敢搜索调用
查找并记录代理代码中需要迁移的所有 Brave Search API 调用。
import os, requests
# BEFORE: Brave Search API call
# resp = requests.get('https://api.search.brave.com/res/v1/web/search',
# headers={'X-Subscription-Token': os.environ['BRAVE_API_KEY']},
# params={'q': query})
# results = resp.json().get('web', {}).get('results', [])
# AFTER: Scavio API call
API_KEY = os.environ['SCAVIO_API_KEY']
def search(query: str, platform: str = 'google') -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': platform, 'query': query}, timeout=15)
return resp.json().get('organic_results', [])
results = search('test query')
print(f'Results: {len(results)}')步骤 2: 映射响应字段
将 Brave Search 响应字段映射到代理解析器的 Scavio 响应字段。
def brave_to_scavio(brave_result: dict) -> dict:
"""Map a Brave result to Scavio format for reference."""
# Brave fields -> Scavio fields:
# brave.title -> scavio.title (same)
# brave.url -> scavio.link
# brave.description -> scavio.snippet
# brave.age -> not directly available
# brave.extra_snippets -> not available
return {
'title': brave_result.get('title', ''),
'link': brave_result.get('url', ''),
'snippet': brave_result.get('description', ''),
}
def parse_scavio_results(results: list) -> list:
"""Parse Scavio results into agent-friendly format."""
parsed = []
for r in results:
parsed.append({
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
'source': r.get('source', ''),
})
return parsed
results = search('best python frameworks 2026')
parsed = parse_scavio_results(results)
for p in parsed[:3]:
print(f"{p['title'][:50]}: {p['snippet'][:60]}")步骤 3: 更新代理工具定义
将代理中的 Brave 搜索工具定义替换为 Scavio 搜索工具。
class ScavioSearchTool:
"""Drop-in replacement for Brave Search tool in OpenClaw agents."""
def __init__(self):
self.api_key = os.environ['SCAVIO_API_KEY']
self.base_url = 'https://api.scavio.dev/api/v1/search'
def search(self, query: str, platform: str = 'google') -> list:
resp = requests.post(self.base_url,
headers={'x-api-key': self.api_key},
json={'platform': platform, 'query': query}, timeout=15)
resp.raise_for_status()
results = resp.json().get('organic_results', [])
return [{
'title': r.get('title', ''),
'url': r.get('link', ''),
'snippet': r.get('snippet', ''),
} for r in results[:10]]
def search_multi(self, query: str, platforms: list = None) -> dict:
platforms = platforms or ['google']
all_results = {}
for p in platforms:
all_results[p] = self.search(query, p)
return all_results
tool = ScavioSearchTool()
results = tool.search('test query')
print(f'Results: {len(results)}')步骤 4: 添加多平台功能
使用 Brave 不支持的特定于平台的搜索来扩展代理。
def agent_search(query: str, intent: str = 'general') -> list:
"""Route search to the best platform based on query intent."""
tool = ScavioSearchTool()
platform_map = {
'general': 'google',
'product': 'amazon',
'video': 'youtube',
'community': 'reddit',
'shopping': 'walmart',
}
platform = platform_map.get(intent, 'google')
results = tool.search(query, platform)
return results
# Agent can now route queries:
for intent, query in [
('general', 'best CRM 2026'),
('product', 'wireless earbuds under 100'),
('community', 'best IDE for Python'),
]:
results = agent_search(query, intent)
print(f'[{intent}] {query}: {len(results)} results')步骤 5: 测试迁移
验证迁移的代理产生与 Brave Search 相同或更好的结果。
def test_migration():
tool = ScavioSearchTool()
test_queries = [
'Python web frameworks comparison',
'how to deploy docker containers',
'best database for small projects',
]
for query in test_queries:
results = tool.search(query)
print(f'Query: {query}')
print(f' Results: {len(results)}')
if results:
print(f' Top: {results[0]["title"][:50]}')
print(f' URL: {results[0]["url"][:60]}')
print()
# Test multi-platform (not possible with Brave)
multi = tool.search_multi('best laptop 2026', ['google', 'amazon'])
for p, r in multi.items():
print(f'{p}: {len(r)} results')
print('\nMigration test passed')
test_migration()Python 示例
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
# Drop-in Brave Search replacement:
def search(query, platform='google'):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': platform, 'query': query}).json()
return [{'title': r['title'], 'url': r.get('link', ''), 'snippet': r.get('snippet', '')}
for r in data.get('organic_results', [])[:5]]
print(search('test query'))JavaScript 示例
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
// Drop-in Brave Search replacement:
async function search(query, platform = 'google') {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform, query})
});
return ((await r.json()).organic_results || []).slice(0, 5)
.map(r => ({title: r.title, url: r.link, snippet: r.snippet}));
}
search('test query').then(console.log);预期输出
A fully migrated OpenClaw agent using Scavio instead of Brave Search, with multi-platform search capability and identical result parsing.