answers

Utilisation pour les réponses basées sur l'IA via `/chat/completions` compatible OpenAI. Deux modes : recherche unique (rapide) ou recherche approfondie (`enable_research=true`, multi-recherche complète). Streaming/blocage. Citations.

npx skills add https://github.com/brave/brave-search-skills --skill answers

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_url et api_key. Fonctionne avec les clients sync et async.
  • Réponses citées : Activez enable_citations=true en 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 messages doit contenir exactement 1 message utilisateur
  • Surveillance des coûts : Analysez la balise <usage> des réponses streaming pour suivre les coûts

Skills similaires