Recipes

エージェント Read-URL ツール

LLM エージェントループにそのまま組み込める「この URL を読む」ツール

エージェントに、任意の URL をクリーンな Markdown に変換する単一のツールを与えましょう。エージェントはページを調査する必要があるたびにこのツールを呼び出します —— Thunderbit が JS、ボット対策、コンテンツのクリーニングを処理するため、エージェントのコンテキストはシグナル密度の高い状態を保てます。

ツール定義(Python)

import httpx

API = "https://openapi.thunderbit.com/openapi/v1"
H = {"Authorization": "Bearer YOUR_API_KEY"}

def read_url(url: str) -> str:
    """Fetch a URL and return clean Markdown.

    Use for any web research task: docs, articles, search results, product pages.
    Returns the page as Markdown with metadata stripped.
    """
    resp = httpx.post(f"{API}/distill",
                      headers=H,
                      json={"url": url, "renderMode": "basic"},
                      timeout=60.0)
    resp.raise_for_status()
    return resp.json()["data"]["markdown"]

OpenAI function-calling の例

tools = [{
    "type": "function",
    "function": {
        "name": "read_url",
        "description": "Fetch a URL and return clean Markdown for the agent to read.",
        "parameters": {
            "type": "object",
            "properties": {
                "url": {"type": "string", "description": "The URL to fetch"}
            },
            "required": ["url"],
        },
    },
}]

モデルが read_url を呼び出したら、上記の関数にディスパッチし、結果を tool message としてモデルに返します。

ヒント

  • エージェント用には renderModebasic のままにしておくとよいでしょう —— コストとカバレッジのバランスがちょうど良いデフォルトです
  • 返される Markdown の長さに上限(例:8k トークン)を設けてからモデルに渡しましょう
  • 大量調査には /batch/distill が向いています —— RAG ナレッジベース を参照

関連

このレシピは現在 LangChain / LlamaIndex / CrewAI バリアントを追加して拡張中です —— 近日中にご確認ください。