# ライブWebからのRAG：検索で取得し、引用付きで回答

> ライブWebからの検索拡張生成：検索し、上位ページをMarkdownで読み取り、チャンクに分割して、引用付きで回答します。Pythonコード。KYC不要、暗号資産で支払い。

- URL: https://llmwebsearch.com/ja/use-cases/rag/
- 最終更新: 2026-10-22
- 発行者: LLMWebSearch (https://llmwebsearch.com)

ベクトルインデックスには先月読み込んだものが入っています。今日のWebが語る内容が必要な質問もあります。ライブWeb RAGは質問時に取得します。検索を1回行い、上位ページをMarkdownで取得し、いくつかのチャンクをプロンプトに入れ、各ページへの引用を返します。

**クイック回答 — ライブWeb検索結果でRAGを行うにはどうすればよいですか？**

質問時にWeb検索を実行し、上位ページを読み取り、チャンクに分割し、最も関連性の高いものを保持して、番号付きの引用付きで回答するようモデルに指示します。**LLMWebSearch**が最初の2つのステップを1回の呼び出しで処理します。ランク付けされた結果と最初の3ページのMarkdownを、$1.20/1K検索から1クレジットで提供します。KYC不要、暗号資産で支払い。

## ライブWeb RAGとは何ですか？

検索拡張生成の取得ステップが、自分のインデックス内の検索ではなくWeb検索であるものです。質問は検索APIに送られ、APIがページを返し、モデルがそれらのページから回答します。

このパターンは、価格、リリース、ルール、スケジュール、ニュースなど変化する事柄に関する質問に適しています。自分のドキュメントがカバーしていなかったロングテールな質問にも適しています。コストは質問ごとに検索1回、最初の検索で外れた場合は2回です。

## いつ新しく取得し、いつ保存すべきですか？

安定していて自分のものであるものは保存し、変化するものは取得します。製品マニュアル、社内ポリシー、自分のドキュメントはベクトルインデックスに入れ、スケジュールに従って更新します。競合の価格、規制、ニュースはライブ取得に適しています。

多くのチームは両方を組み合わせています。まず自分のインデックスを検索し、良い一致がない場合や、質問に最近の日付が含まれる場合にのみWebを呼び出します。

取得したページを保持することにした場合、当社の立場を明記します：当社はあなたの検索クエリやAPIが返す内容でモデルを学習させることはなく、結果の保存を禁じる独自のルールも設けていません。ただし、あなたが読むページのサイトの権利は引き続き適用されます。コンテンツの恒久的なコピーを作成する前に、各サイトの利用規約を確認してください。

## 検索結果をチャンクに変換するにはどうすればよいですか？

各ページを見出しで分割し、長いセクションは固定長に切り詰めます。見出しは`#`で始まる行なので、Markdownなら簡単です。引用が分割後も残るよう、各チャンクに元のURLとタイトルを保持します。

以下の例は、検索し、3ページを読み取り、チャンクに分割し、質問と最も多くの単語を共有する6つのチャンクを選びます。本番環境では単語数の計算を埋め込みモデルに置き換えてください。構造は同じです。

*Python：チャンクと番号付きソースによるライブWeb取得*

```python
import os
import re

import requests

API = "https://llmwebsearch.com/api/v1/search"
HEADERS = {"Authorization": "Bearer " + os.environ["LLMWEBSEARCH_API_KEY"]}


def live_chunks(query, read=3, chunk_len=1200):
    """Search, then cut each page that was read into heading-based chunks tagged with its source."""
    body = {"q": query, "max_results": 5, "read": read, "max_chars": 12000}
    results = requests.post(API, headers=HEADERS, json=body, timeout=60).json()["results"]
    chunks = []
    for r in results:
        if r.get("content_status") != "ok":
            continue
        for section in re.split(r"\n(?=#{1,3} )", r["content"]):
            section = section.strip()
            for start in range(0, len(section), chunk_len):
                chunks.append({"url": r["url"], "title": r["title"], "text": section[start:start + chunk_len]})
    return chunks


def top_chunks(chunks, question, k=6):
    """A plain keyword score; swap in your embedding model for better ranking."""
    words = set(re.findall(r"\w{4,}", question.lower()))

    def score(chunk):
        return sum(1 for w in re.findall(r"\w{4,}", chunk["text"].lower()) if w in words)

    return sorted(chunks, key=score, reverse=True)[:k]


def build_prompt(question):
    picked = top_chunks(live_chunks(question), question)
    urls = list(dict.fromkeys(c["url"] for c in picked))
    blocks = [f"[{urls.index(c['url']) + 1}] {c['title']}\n{c['text']}" for c in picked]
    sources = "\n".join(f"[{i}] {u}" for i, u in enumerate(urls, 1))
    return (
        "Use only the context to answer and cite sources as [n].\n\n"
        + "\n\n".join(blocks)
        + f"\n\nSources:\n{sources}\n\nQuestion: {question}"
    )
```

## 各質問で何ページ読むべきですか？

3ページが良い出発点で、検索を1クレジットに抑えられます。事実に関する質問のほとんどは、良いクエリの最初の2〜3ページで回答できます。

チャンカーがテキストの大半を結局は捨てるため、チャットエージェントで使うより長いページを要求しましょう。1ページあたり`max_chars`を10,000〜15,000にすると、ランカーが選ぶのに十分な情報が得られます。回答が既知の1つのサイトに依存する場合は、ページを増やすのではなく`include_domains`でそのサイトを追加します。

## モデルに情報源を引用させるにはどうすればよいですか？

プロンプト内の情報源に番号を付け、回答にその番号を含めるよう指示します。短い指示でうまく機能します。コンテキストのみを使い、各主張を[n]として引用し、コンテキストが質問をカバーしていない場合はその旨を述べるよう指示します。

情報源リストはプロンプトの最後に置き、番号ごとに1つのURLを記載します。その後、インターフェースで[n]をリンクとして表示します。ユーザーは確認できる回答を信頼し、誤った引用はレビューで簡単に見つけられます。

## ページがブロックされている、または空の場合はどうなりますか？

そのページをスキップし、他のページを使います。各結果には`content_status`が付き、テキストがあるのは`ok`の結果のみです。ページが欠けているのは当社のリーダーはrobots.txtを尊重します。LLMWebSearchとして名乗り、サイトが自身またはすべてのロボット向けに定めたルールに従い、読み取りを許可されていないページのコンテンツは除外しますためです。

検索のすべてのページが空で返ってきた場合は、別のクエリで1回再試行するか、開いていることがわかっているサイトに対して`include_domains`を追加します。サイトが当社のリーダーを拒否した場合、結果はコンテンツなしで、サイトのステータスとともに返されます。当社がCAPTCHAを解いたり、アカウントにサインインしたり、ブロックやペイウォールを回避したりすることは一切ありません。

## ライブWeb RAGにはいくらかかりますか？

ほとんどの場合、質問ごとに検索1回です。月に5,000件の質問に回答するサポートアシスタントで、5件に1件の質問で2回目の検索を行う場合、約6,000回の検索を使用します。$41.25の25,000検索で、その4か月分をまかなえます。

モデルは送信したチャンクも読み取ります。1,200文字のチャンク6つで質問ごとに約2,000トークンが追加され、これはチャンクのサイズと数で制御できます。

## RAGのワークロードにはどのパックが適していますか？

ほとんどのパイプラインでは1質問あたり1クレジットです。検索クレジットに有効期限はありません。今月使わなかった分は来年も残ります。

| プラン | 数量 | 価格 | 単価 |
| --- | --- | --- | --- |
| 試す | 5,000検索 | $9.25 | $1.85/1K検索 |
| 開発者 | 25,000検索 | $41.25 | $1.65/1K検索 |
| Production | 100,000検索 | $145 | $1.45/1K検索 |

全プラン共通: 上位3ページをMarkdownとして読み取り · 国、言語、時間、ドメインのフィルター · 失敗した呼び出しは課金なし · クレジットの有効期限なし

**お支払いの前に**

- 最低チャージ額$25。 暗号資産で一度チャージすれば、残高から任意のプランを購入できます。
- 残高は有効期限がなく、いつでも検索クレジットの購入に使えます。パックの価格が最低入金額を下回る場合、その最低入金額に達するためだけに支払った分は、お支払いから30日以内にご請求いただければ、未使用であることを条件にUSDTまたはUSDCで返金されます。残高のその他の部分は、法律で求められる場合を除き返金されません.
- お支払いがブロックチェーン上で確認され次第、残高に反映されます。 ネットワーク承認の目安時間: BTC 約20分 · USDT TRC-20 約1分 · USDT ERC-20 約5分 · USDC ERC-20 約5分 · ETH 約5分 · SOL 約1分 · LTC 約15分

## ライブWeb RAG：よくある質問

### LangChainやLlamaIndexは使えますか？

はい。[LangChainとLlamaIndexのページ](https://llmwebsearch.com/ja/docs/langchain/)では、検索をretrieverとして、またツールとしてラップしています。

### 既に知っているURLから取得できますか？

はい、[extractエンドポイント](https://llmwebsearch.com/ja/docs/extract/)で可能です。URLをすでに持っているページを読む場合は、コンテンツ付きで返される3ページごとの開始グループにつき1クレジットで、1回の呼び出しにつき最大20 URLです。拒否されたURLや失敗したURLはカウントされません。

### LLMWebSearchは読み取ったページを保存してくれますか？

いいえ。各呼び出しは1行のログを残します。時刻、アカウント、検索クエリの先頭60文字、返された結果数とページ数、クレジットです。行は30日後に削除されます。読み取ったページのコンテンツは保存されません。アカウント番号、注文、入金、クレジット合計はアカウントが存在する間、その後は会計法が求める期間のみ保持されます。当局への記録提供は法律が当社に義務付ける場合に限られます。

### 取得対象を1つの言語や国に限定できますか？

はい。`language`と`country`を設定します。例えばドイツからのドイツ語の結果には`language=de`と`country=de`を指定します。

---

LLMWebSearch: LLMWebSearchは、AIエージェント向けのWeb検索APIです。ランキング済みの検索結果を、上位ページの本文をMarkdownに変換した内容とともに返し、暗号資産で支払えます。本人確認書類のアップロードは不要です。プリペイドのクレジットは$1.20/1K検索から購入でき、有効期限はありません。KYC不要 — 身分証も自撮りも書類も不要。暗号資産で支払い。
