静的なRAGは「今週何が起きたか」に答えられません。Google検索APIでライブのWeb検索ステップを追加すると、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トークンのチャンクに分割します。(既存のローダー/スプリッター、例えば trafilatura + テキストスプリッターを使ってください。)
ステップ3 — 埋め込み、取得、生成
チャンクを埋め込み、クエリに対して上位k件を取得し、ソースURLを引用するよう指示してモデルに渡します。ソースはライブのSERPから取得されているため、回答は権威あるページが現在述べている内容を反映します。
なぜここで安価なSERP APIが重要なのか
RAGはクエリごとに検索をファンアウトします。新規検索1回あたり $0.0006(キャッシュ時は半額)で、serp.cheap は回答ごとの取得コストを無視できる水準に抑えます。さらに、繰り返される同一クエリは自動的にキャッシュにヒットします。
スニペットのみの高速パス
軽量なグラウンディングであれば、ページのフェッチを省略して、SERPのタイトル + スニペットを直接モデルに渡せます。API呼び出し1回でクロール不要。より安価で、手早い事実回答にはこれで十分なことが多いです。