无需 KYC — 无需身份证件、自拍或文件。用加密货币支付:BTC, USDT, USDC, ETH, SOL, LTC
语言: 简体中文
获取 API 密钥

用例 · 检索增强生成 · 新鲜来源

实时网络 RAG:用搜索检索,带引用作答

向量索引里存的还是你上个月加载的内容。有些问题需要知道网络今天怎么说。实时网络 RAG 在提问时检索:一次搜索,把排名靠前的页面读成 Markdown,取几块放入 prompt,并给出指向每页的引用。

最后更新:

快速回答

如何用实时网络搜索结果做 RAG?

提问时运行一次网络搜索,读取排名靠前的页面,把它们切分成块,保留最相关的若干块,再让模型带编号引用作答。LLMWebSearch 一次调用就完成前两步:返回排序后的结果,并把前 3 页读成 Markdown,消耗 1 个积分,US$1.20/千次搜索 起。无需 KYC;用加密货币支付。

什么是实时网络 RAG?

它是一种检索增强生成,其中检索步骤是一次网络搜索,而不是在自有索引里查找。问题发给搜索 API,API 返回页面,模型基于这些页面作答。

这种模式适合问会变化的事情:价格、发布、规则、日程和新闻。它也适合你自己的文档从未覆盖过的长尾问题。成本是每个问题一次搜索,第一次没找到时则两次。

什么时候该实时抓取,什么时候该存储?

稳定且属于你自己的内容就存储;会变化的内容就抓取。产品手册、内部政策和自有文档适合放进向量索引,按计划刷新。竞品价格、法规和新闻适合实时检索。

很多团队两者结合:先搜自己的索引,只有在索引里没有好的匹配,或问题提到近期日期时,才调用网络。

如果你决定保留检索到的页面,请注意我们的立场:我们不会用你的查询或 API 返回的内容训练任何模型,也不会自行添加任何禁止存储结果的规则;你读取的页面所属网站的权利仍然适用。在为其内容建立永久副本之前,请先查看每个网站的条款。

如何把搜索结果切成块?

按标题拆分每个页面,再把过长的段落切到固定长度。Markdown 让这件事很容易,因为标题就是以 # 开头的行。在每个块上保留来源 URL 和标题,这样切分后引用仍然有效。

下面的示例搜索、读取三个页面、对它们分块,并选出与问题共享最多词的六个块。生产环境里请把词数统计换成你的嵌入模型;结构保持不变。

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}"
    )

每个问题应该读多少页?

三页是个不错的起点,而且能让搜索保持在 1 个积分。大多数事实性问题都能在好查询的前两三个页面得到答案。

请求的页面可以比在聊天 agent 里更长,因为分块器反正会丢弃大部分文本。每页 max_chars 设为 10,000 到 15,000,能让排序器有足够内容可选。如果答案依赖某个已知站点,用 include_domains 把它加进来,而不是多读几页。

如何让模型引用来源?

在 prompt 里给来源编号,并在答案中要求给出编号。简短的指令就很有效:只使用上下文,每条论断引用为 [n],上下文未覆盖问题时说明。

把来源列表放在 prompt 末尾,每个编号对应一个 URL。然后在界面里把 [n] 渲染成链接。用户信任可以核对的答案,错误的引用在审阅时也很容易发现。

如果页面被拦截或是空的怎么办?

跳过它,使用其他页面。每个结果都带有 content_status;只有 ok 的结果才有文本。某页缺失可能是因为 我们的读取器遵守 robots.txt:它会以 LLMWebSearch 表明身份,遵守网站为它或为所有机器人写下的规则,并排除任何它无权读取的页面内容。

当一次搜索的所有页面都返回空时,用一个不同的查询重试一次,或为你知道是开放的站点添加 include_domains。当网站拒绝我们的读取器时,结果会不带内容返回,并附上该网站的状态:我们绝不破解 CAPTCHA、不登录账户,也不绕过封锁或付费墙。

实时网络 RAG 要花多少钱?

大多数情况下每个问题一次搜索。一个每月回答 5,000 个问题的客服助手,五分之一的问题需要第二次搜索,大约用 6,000 次搜索。25,000 次查询 起 US$41.25,可覆盖四个月这样的用量。

你的模型还要读取你发送的块。六个 1,200 字符的块,每个问题大约增加 2,000 个 token,这可通过块大小和数量来控制。

哪种套餐适合 RAG 工作负载?

对大多数流水线来说,每个问题消耗一个积分。查询积分永不过期:这个月没用完的,明年还在。

试用

5,000 次搜索

US$9.25

US$1.85/千次搜索

  • 接入一个智能体
  • 与最大积分包相同的 API
  • 积分永不过期
选择 5,000 次搜索

构建者

25,000 次查询

US$41.25

US$1.65/千次搜索

  • 编码智能体或研究助手
  • 支持 MCP、LangChain 和 n8n
  • 积分永不过期
选择 25,000 次查询

生产环境

100,000 次查询

US$145

US$1.45/千次搜索

  • 生产环境中的智能体
  • 可按需提高 rate limit
  • 积分永不过期
选择 100,000 次查询

所有套餐均包含: 前 3 个页面读取为 Markdown · 国家、语言、时间和域名筛选 · 调用失败不计费 · 积分永不过期

实时网页 RAG:常见问题

我可以使用 LangChain 或 LlamaIndex 吗?

可以。LangChain 和 LlamaIndex 页面 将搜索封装为 retriever 和工具。

我可以从已知 URL 中检索吗?

可以,使用 extract endpoint。读取你已持有 URL 的页面:每开始一组 3 个返回内容的页面计 1 积分,每次调用最多 20 个 URL;被拒绝或失败的 URL 不计入。

LLMWebSearch 会为我存储它读取的页面吗?

不会。每次调用留下一条日志:时间、账号、查询的前 60 个字符、返回的结果数和页面数,以及积分。日志 30 天后删除。我们读取的页面内容不保留。账号编号、订单、充值和积分总额在账户存在期间保留,之后仅在会计法律要求的时间内保留。只有在法律强制要求时,我们才会向当局提供记录。

我可以将检索限制为一种语言或一个国家吗?

可以。设置 language 和 country,例如 language=de 和 country=de 可获取来自德国的德语结果。

低至 US$1.20/千次搜索 · 无需 KYC

获取 API 密钥