自主研究代理接受一个主题,执行多次网络搜索,收集和删除重复的来源,然后将研究结果综合成结构化报告——所有这些都无需人工干预。这种模式对于市场情报、学术文献摘要和竞争分析很有价值。本教程使用纯 Python 和 Scavio API 构建这样的代理,而不依赖于完整的代理框架。代理发出连续的搜索查询,从 SERP 片段中提取关键事实,并将其格式化为 Markdown 报告。
前置条件
- Python 3.10 或更高版本
- 请求已安装库
- Scavio API 密钥
- 用于合成步骤的 OpenAI API 密钥(可选)
操作指南
步骤 1: 确定研究计划
将研究主题分解为搜索查询列表。一个好的研究代理会生成 3-5 个涵盖主题不同方面的查询。
def make_queries(topic: str) -> list[str]:
return [
topic,
f"{topic} latest developments 2026",
f"{topic} key players market",
f"{topic} challenges limitations",
]步骤 2: 收集每个查询的搜索结果
为每个查询调用 Scavio API,并将自然结果合并到由 URL 键入的单个去重列表中。
def collect_results(queries: list[str]) -> dict:
seen = {}
for query in queries:
data = search_google(query)
for r in data.get("organic_results", []):
seen[r["link"]] = r
return seen步骤 3: 从片段中提取事实
从重复数据删除结果中构建(标题、片段、url)元组的平面列表,以用于报告生成。
def extract_facts(results: dict) -> list[tuple]:
facts = []
for url, r in results.items():
if r.get("snippet"):
facts.append((r["title"], r["snippet"], url))
return facts步骤 4: 写报告
将收集到的事实格式化为简单的 Markdown 报告。可选择将事实传递给法学硕士进行综合。
def write_report(topic: str, facts: list[tuple]) -> str:
lines = [f"# Research Report: {topic}\n"]
for title, snippet, url in facts[:10]:
lines.append(f"## {title}")
lines.append(snippet)
lines.append(f"Source: {url}\n")
return "\n".join(lines)Python 示例
import os
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search_google(query: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": query, "country_code": "us"})
r.raise_for_status()
return r.json()
def research(topic: str) -> str:
queries = [topic, f"{topic} 2026 trends", f"{topic} challenges"]
seen = {}
for q in queries:
for r in search_google(q).get("organic_results", []):
seen[r["link"]] = r
lines = [f"# {topic}\n"]
for r in list(seen.values())[:10]:
lines.append(f"## {r['title']}")
lines.append(r.get("snippet", ""))
lines.append(f"{r['link']}\n")
return "\n".join(lines)
if __name__ == "__main__":
report = research("large language model inference optimization")
print(report)JavaScript 示例
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
async function searchGoogle(query) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query, country_code: "us" })
});
return res.json();
}
async function research(topic) {
const queries = [topic, `${topic} 2026 trends`, `${topic} challenges`];
const seen = new Map();
for (const q of queries) {
const data = await searchGoogle(q);
for (const r of data.organic_results || []) {
seen.set(r.link, r);
}
}
const results = [...seen.values()].slice(0, 10);
return results.map(r => `## ${r.title}\n${r.snippet || ""}\n${r.link}`).join("\n\n");
}
research("AI inference optimization").then(console.log).catch(console.error);预期输出
# Research Report: AI inference optimization
## Faster LLM Inference Techniques in 2026
Quantization, speculative decoding, and model distillation have reduced...
Source: https://example.com/llm-inference
## Key Players in AI Inference Hardware
NVIDIA, AMD, and Groq continue to dominate...
Source: https://example.com/inference-hardware