静态 RAG 无法回答”本周发生了什么”。用 Google 搜索 API 添加一个实时网络搜索步骤,能让你的 LLM 立足于当前、可引用的来源。下面是这个模式,使用 serp.cheap。
架构
user query
→ SERP API search (top N results) ← live, fresh
→ fetch the result pages
→ chunk + embed on the fly
→ retrieve most relevant chunks
→ LLM answers, citing the source URLs
第 1 步 — 检索最新来源
import requests
def web_sources(query, n=5, gl="us"):
data = requests.post(
"https://api.serp.cheap/v1/search",
headers={"X-API-Key": "YOUR_KEY"},
json={"q": query, "gl": gl},
timeout=30,
).json()
return [
{"title": r["title"], "url": r["link"], "snippet": r.get("snippet", "")}
for r in data["organic"][:n]
]
第 2 步 — 抓取并分块
抓取每个 url,提取正文,分割成约 500 个 token 的块。(使用你现有的加载器/分割器——例如 trafilatura 加一个文本分割器。)
第 3 步 — 嵌入、检索、生成
嵌入这些块,为查询检索 top-k,并将它们连同一条引用来源 URL 的指令传给模型。由于这些来源来自实时 SERP,答案反映的就是权威页面当前所说的内容。
为什么便宜的 SERP API 在这里很重要
RAG 在每次查询时都会扇出一次搜索。在每次全新搜索 $0.0006(缓存为一半)的价格下,serp.cheap 让每个答案的检索成本几乎可以忽略不计——而且重复出现的相同查询会自动命中缓存。
仅用摘要的快速路径
对于轻量级的事实立足,你可以跳过抓取页面,直接把 SERP 的标题 + 摘要喂给模型——一次 API 调用,无需爬取。它更便宜,而且对于快速的事实性回答通常已经足够。