Answers — AI Grounding
Requiert une clé API : Obtenez-en une sur https://api.search.brave.com
Plan : Inclus dans le plan Answers. Voir https://api-dashboard.search.brave.com/app/subscriptions/subscribe
Quand utiliser
| Cas d'usage | Skill | Pourquoi |
|---|---|---|
| Réponse factuelle rapide (contexte brut) | llm-context |
Une seule recherche, retourne le contexte brut pour VOTRE LLM |
| Réponse IA rapide avec citations | answers (recherche unique) |
streaming, citations |
| Recherche approfondie multi-recherche | answers (mode recherche) |
Recherche itérative approfondie, réponse citée synthétisée |
Cet endpoint (/res/v1/chat/completions) supporte deux modes :
- Recherche unique (par défaut) : Réponse IA rapide ancrée dans une seule recherche. Supporte
enable_citations. - Recherche (
enable_research=true) : Recherche approfondie multi-itération avec événements de progression et réponse citée synthétisée.
Démarrage rapide (cURL)
Bloquant (Recherche unique)
curl -X POST "https://api.search.brave.com/res/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-d '{
"messages": [{"role": "user", "content": "How does the James Webb Space Telescope work?"}],
"model": "brave",
"stream": false
}'
Streaming avec citations (Recherche unique)
curl -X POST "https://api.search.brave.com/res/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-d '{
"messages": [{"role": "user", "content": "What are recent breakthroughs in fusion energy?"}],
"model": "brave",
"stream": true,
"enable_citations": true
}'
Mode recherche
curl -X POST "https://api.search.brave.com/res/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "X-Subscription-Token: ${BRAVE_SEARCH_API_KEY}" \
-d '{
"messages": [{"role": "user", "content": "Compare quantum computing approaches"}],
"model": "brave",
"stream": true,
"enable_research": true,
"research_maximum_number_of_iterations": 3,
"research_maximum_number_of_seconds": 120
}'
Endpoint
POST https://api.search.brave.com/res/v1/chat/completions
Authentification : En-tête X-Subscription-Token: <API_KEY> (ou Authorization: Bearer <API_KEY>)
Compatible SDK : Fonctionne avec le SDK OpenAI via base_url="https://api.search.brave.com/res/v1"
Deux modes
| Fonctionnalité | Recherche unique (par défaut) | Recherche (enable_research=true) |
|---|---|---|
| Vitesse | Rapide | Lente |
| Recherches | 1 | Multiples (itératives) |
| Streaming | Optionnel (stream=true/false) |
Requis (stream=true) |
| Citations | enable_citations=true (streaming uniquement) |
Intégrées (dans la balise <answer>) |
| Événements de progression | Non | Oui (balises <progress>) |
| Réponse bloquante | Oui (stream=false) |
Non |
Paramètres
Paramètres standards
| Paramètre | Type | Requis | Par défaut | Description |
|---|---|---|---|---|
messages |
array | Oui | - | Message utilisateur unique (exactement 1 message) |
model |
string | Oui | - | Utilisez "brave" |
stream |
bool | Non | true | Activer le streaming SSE |
country |
string | Non | "US" | Pays de recherche (code pays à 2 lettres ou ALL) |
language |
string | Non | "en" | Langue de réponse |
safesearch |
string | Non | "moderate" | Niveau de sécurité de recherche (off, moderate, strict) |
max_completion_tokens |
int | Non | null | Limite supérieure de tokens de complétion |
enable_citations |
bool | Non | false | Inclure les balises de citation intégrées (recherche unique streaming uniquement) |
web_search_options |
object | Non | null | Compatible OpenAI ; search_context_size : low, medium, high |
Paramètres de recherche
| Paramètre | Type | Requis | Par défaut | Description |
|---|---|---|---|---|
enable_research |
bool | Non | false |
Activer le mode recherche |
research_allow_thinking |
bool | Non | true |
Activer la réflexion étendue |
research_maximum_number_of_tokens_per_query |
int | Non | 8192 |
Tokens max par requête (1024-16384) |
research_maximum_number_of_queries |
int | Non | 20 |
Nombre maximum total de requêtes de recherche (1-50) |
research_maximum_number_of_iterations |
int | Non | 4 |
Itérations max de recherche (1-5) |
research_maximum_number_of_seconds |
int | Non | 180 |
Budget de temps en secondes (1-300) |
research_maximum_number_of_results_per_query |
int | Non | 60 |
Résultats par requête de recherche (1-60) |
Contraintes (IMPORTANT)
| Contrainte | Erreur |
|---|---|
enable_research=true requiert stream=true |
"Blocking response doesn't support 'enable_research' option" |
enable_research=true incompatible avec enable_citations=true |
"Research mode doesn't support 'enable_citations' option" |
enable_citations=true requiert stream=true |
"Blocking response doesn't support 'enable_citations' option" |
Utilisation du SDK OpenAI
Bloquant (Recherche unique)
from openai import OpenAI
client = OpenAI(
base_url="https://api.search.brave.com/res/v1",
api_key="your-brave-api-key",
)
response = client.chat.completions.create(
model="brave",
messages=[{"role": "user", "content": "How does the James Webb Space Telescope work?"}],
stream=False,
)
print(response.choices[0].message.content)
Streaming avec citations (Recherche unique)
from openai import OpenAI
client = OpenAI(
base_url="https://api.search.brave.com/res/v1",
api_key="your-brave-api-key",
)
stream = client.chat.completions.create(
model="brave",
messages=[{"role": "user", "content": "What are the current trends in renewable energy?"}],
stream=True,
extra_body={"enable_citations": True}
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
Mode recherche
from openai import AsyncOpenAI
client = AsyncOpenAI(
base_url="https://api.search.brave.com/res/v1",
api_key="your-brave-api-key",
)
stream = await client.chat.completions.create(
model="brave",
messages=[{"role": "user", "content": "Compare quantum computing approaches"}],
stream=True,
extra_body={
"enable_research": True,
"research_maximum_number_of_iterations": 3,
"research_maximum_number_of_seconds": 120
}
)
async for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
Format de réponse
Réponse bloquante (stream=false, recherche unique uniquement)
JSON compatible OpenAI standard :
{
"id": "chatcmpl-...",
"object": "chat.completion",
"choices": [{"message": {"role": "assistant", "content": "The James Webb Space Telescope works by..."}, "index": 0, "finish_reason": "stop"}],
"usage": {"prompt_tokens": 10, "completion_tokens": 50, "total_tokens": 60}
}
Réponse streaming
Réponse SSE avec chunks compatibles OpenAI :
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":"Based on"},"index":0}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","choices":[{"delta":{"content":" recent research"},"index":0}]}
data: [DONE]
Balises de streaming par mode
Recherche unique (avec enable_citations=true)
| Balise | Objectif |
|---|---|
<citation> |
Références de citations intégrées |
<usage> |
Données de coût/facturation JSON |
Mode recherche
| Balise | Objectif | À conserver ? |
|---|---|---|
<queries> |
Requêtes de recherche générées | Débogage |
<analyzing> |
Décompte des URLs (verbeux) | Débogage |
<thinking> |
Raisonnement de sélection d'URL | Débogage |
<progress> |
Statistiques : temps, itérations, requêtes, URLs analysées, tokens | Surveiller |
<blindspots> |
Lacunes de connaissances identifiées | Oui |
<answer> |
Réponse synthétisée finale (seule la réponse finale est émise ; les brouillons intermédiaires sont abandonnés) | Oui |
<usage> |
Données de coût/facturation JSON (incluses à la fin de la réponse streaming) | Oui |
Format de la balise d'utilisation
La balise <usage> contient des données de coût et de tokens en JSON stringifié :
<usage>{"X-Request-Requests":1,"X-Request-Queries":8,"X-Request-Tokens-In":15000,"X-Request-Tokens-Out":2000,"X-Request-Requests-Cost":0.005,"X-Request-Queries-Cost":0.032,"X-Request-Tokens-In-Cost":0.075,"X-Request-Tokens-Out-Cost":0.01,"X-Request-Total-Cost":0.122}</usage>
Cas d'usage
- Intégration d'interface de chat : Remplacement SDK OpenAI clé en main avec réponses ancrées dans le web. Définissez
base_url="https://api.search.brave.com/res/v1". - Recherche approfondie / recherche thématique exhaustive : Utilisez le mode recherche (
enable_research=true) pour les questions complexes nécessitant une synthèse multi-source (par exemple, « Compare approaches to nuclear fusion »). - SDK OpenAI clé en main : Même SDK, même format streaming — changez simplement
base_urletapi_key. Fonctionne avec les clients sync et async. - Réponses citées : Activez
enable_citations=trueen mode recherche unique pour les balises de citation intégrées, ou utilisez le mode recherche qui inclut automatiquement les citations dans sa réponse.
Notes
- Timeout : Définissez le délai d'expiration du client à au moins 30 s pour recherche unique, 300 s (5 min) pour recherche
- Message unique : Le tableau
messagesdoit contenir exactement 1 message utilisateur - Surveillance des coûts : Analysez la balise
<usage>des réponses streaming pour suivre les coûts