Essayez
5 000 requêtes
9,25 $US
1,85 $US/1K requêtes
- Branchez-le sur un agent
- La même API que le plus grand pack
- Les crédits n'expirent jamais
Cas d'usage · retrieval-augmented generation · sources fraîches
Un index vectoriel contient ce que vous avez chargé le mois dernier. Certaines questions exigent ce que dit le web aujourd'hui. Le RAG sur le web en direct fait le retrieval au moment de la question : une recherche, les meilleures pages en Markdown, quelques chunks dans le prompt, et des citations renvoyant à chaque page.
Réponse rapide
Comment faire du RAG avec des résultats de recherche web en direct ?
Lancez une recherche web au moment de la question, lisez les meilleures pages, découpez-les en chunks, gardez les plus pertinents et demandez au modèle de répondre avec des citations numérotées. LLMWebSearch gère les deux premières étapes en un seul appel : résultats classés avec les 3 premières pages en Markdown, pour un crédit, à partir de 1,20 $US/1K requêtes. Sans KYC ; paiement en crypto.
C'est du retrieval-augmented generation où l'étape de retrieval est une recherche web plutôt qu'une recherche dans votre propre index. La question part vers une API de recherche, l'API renvoie des pages, et le modèle répond à partir de ces pages.
Le schéma convient aux questions sur ce qui change : prix, sorties, règles, calendriers et actualités. Il convient aussi aux questions de longue traîne que vos propres documents n'ont jamais couvertes. Le coût est d'une recherche par question, ou deux quand la première échoue.
Stockez ce qui est stable et vous appartient ; récupérez ce qui change. Les manuels produit, les politiques internes et vos propres documents ont leur place dans un index vectoriel, rafraîchi selon un calendrier. Les prix des concurrents, les réglementations et l'actualité relèvent du retrieval en direct.
De nombreuses équipes combinent les deux. Elles interrogent d'abord leur propre index et n'appellent le web que lorsque l'index n'a pas de bonne correspondance, ou lorsque la question mentionne une date récente.
Si vous décidez de conserver les pages récupérées, notez notre position : Nous n'entraînons aucun modèle sur vos requêtes ni sur ce que renvoie l'API, et nous n'ajoutons aucune règle de notre cru contre la conservation des résultats ; les droits des sites dont vous lisez les pages s'appliquent toujours. Vérifiez les conditions de chaque site avant de constituer une copie permanente de son contenu.
Découpez chaque page sur ses titres, puis ramenez les longues sections à une longueur fixe. Le Markdown facilite cela, car les titres sont des lignes qui commencent par #. Conservez l'URL source et le titre sur chaque chunk pour que les citations survivent au découpage.
L'exemple ci-dessous effectue une recherche, lit trois pages, les découpe en chunks et retient les six chunks qui partagent le plus de mots avec la question. Remplacez le comptage de mots par votre modèle d'embedding en production ; la structure reste identique.
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}"
)Trois est un bon départ, et cela maintient la recherche à un crédit. La plupart des questions factuelles trouvent leur réponse dans les deux ou trois premières pages d'une bonne requête.
Demandez des pages plus longues que dans un agent de chat, car le chunker écartera de toute façon l'essentiel du texte. Un max_chars de 10 000 à 15 000 par page donne au ranker de quoi choisir. Si la réponse dépend d'un site connu, ajoutez-le avec include_domains plutôt que de lire plus de pages.
Numérotez les sources dans le prompt et demandez les numéros dans la réponse. Une instruction courte suffit : utilisez uniquement le contexte, citez chaque affirmation sous la forme [n] et signalez quand le contexte ne couvre pas la question.
Placez la liste des sources à la fin du prompt, avec une URL par numéro. Affichez ensuite [n] comme lien dans votre interface. Les utilisateurs font confiance aux réponses qu'ils peuvent vérifier, et les citations erronées se repèrent facilement en relecture.
Ignorez-la et utilisez les autres. Chaque résultat porte un content_status ; seuls les résultats ok ont du texte. Une page peut manquer parce que Notre lecteur respecte robots.txt : il s'annonce comme LLMWebSearch, suit les règles qu'un site écrit pour lui ou pour tous les robots, et laisse de côté le contenu de toute page qu'il n'est pas autorisé à lire.
Quand toutes les pages d'une recherche reviennent vides, réessayez une fois avec une autre requête ou ajoutez include_domains pour un site dont vous savez qu'il est ouvert. Quand un site refuse notre lecteur, le résultat revient sans contenu et avec le statut du site : nous ne résolvons jamais de CAPTCHA, ne nous connectons pas à des comptes et ne contournons ni un blocage ni un paywall.
Une recherche par question dans la plupart des cas. Un assistant de support qui répond à 5 000 questions par mois, avec une seconde recherche pour une question sur cinq, utilise environ 6 000 recherches. 25 000 requêtes à 41,25 $US couvre quatre mois de ce type.
Votre modèle lit aussi les chunks que vous lui envoyez. Six chunks de 1 200 caractères ajoutent environ 2 000 tokens par question, ce que vous maîtrisez via la taille et le nombre de chunks.
Un crédit par question pour la plupart des pipelines. Les crédits de recherche n'ont pas de date d'expiration : ce que vous n'utilisez pas ce mois-ci est toujours là l'année prochaine.
5 000 requêtes
9,25 $US
1,85 $US/1K requêtes
25 000 requêtes
41,25 $US
1,65 $US/1K requêtes
100 000 requêtes
145 $US
1,45 $US/1K requêtes
Dans chaque formule: 3 meilleures pages lues en Markdown · Filtres par pays, langue, heure et domaine · Appels échoués non facturés · Les crédits n'expirent jamais
Oui. La page LangChain et LlamaIndex intègre la recherche comme retriever et comme outil.
Oui, avec l'endpoint extract. Lire des pages dont vous avez déjà les URLs coûte 1 crédit par groupe de 3 pages entamé, renvoyées avec leur contenu, jusqu'à 20 URLs par appel ; les URLs refusées ou en échec ne sont pas comptées.
Non. Chaque appel laisse une ligne de log : l'heure, le compte, les 60 premiers caractères de la requête, le nombre de résultats et de pages renvoyés, et les crédits. Les lignes sont supprimées au bout de 30 jours. Le contenu des pages que nous lisons n'est pas conservé. Le numéro de compte, les commandes, les recharges et les totaux de crédits restent tant que le compte existe, puis seulement le temps que la loi comptable l'exige. Les autorités ne reçoivent des données que lorsqu'une loi nous y oblige.
Oui. Définissez language et country, par exemple language=de et country=de pour des résultats en allemand depuis l'Allemagne.
À partir de 1,20 $US/1K requêtes · sans KYC
Obtenir une clé API