Développement

L'effort de raisonnement dans l'API DipoleML : quand laisser Raven réfléchir plus longtemps

L'icône de l'application Raven à côté d'une tuile où reasoning_effort est écrit en code au-dessus d'un curseur à deux positions : "low" à gauche avec une seule ligne courte dessous, et le bouton bleu sur "high" à droite avec quatre lignes dessous.

Dans l'API DipoleML, le champ reasoning_effort règle combien Raven Flash et Raven Max raisonnent avant de répondre : low pour un raisonnement court, sur les recherches et les gros volumes, high pour les problèmes difficiles en plusieurs étapes. Sans le champ, le niveau par défaut s'applique. Le raisonnement revient à côté de la réponse et se facture en sortie.

Faits saillants

  • reasoning_effort accepte "low" ou "high" dans un appel Chat Completions; sans le champ, le modèle raisonne à son niveau par défaut.
  • Low convient aux recherches, aux réécritures et aux gros volumes; high convient à l'analyse difficile et aux plans en plusieurs étapes.
  • Le raisonnement revient à côté de la réponse, dans un champ à part comme reasoning_content ou reasoning, jamais dans content.
  • Les jetons de raisonnement sont des jetons de sortie : 2,50 $ US par million sur Raven Flash et 6,25 $ US sur Raven Max.
  • Le raisonnement compte dans max_tokens, et un budget trop petit peut terminer la réponse avec finish_reason "length".

Raven Flash et Raven Max peuvent raisonner avant de répondre : ils examinent d'abord la question, puis ils écrivent. Dans l'API DipoleML, un seul champ de la requête, reasoning_effort, règle la part de ce travail. Cet article présente les deux niveaux, les tâches qui conviennent à chacun, l'endroit où revient le raisonnement, ce qu'il coûte et comment dimensionner max_tokens en conséquence. L'exemple utilise le SDK Python d'OpenAI, pointé vers notre URL de base.

Que fait reasoning_effort?

reasoning_effort est un champ de la requête Chat Completions, avec deux valeurs :

  • "low" : un peu de raisonnement. Plus rapide, et moins de jetons de sortie; bon pour les recherches, les réécritures et les gros volumes.
  • "high" : le plus de raisonnement, pour l'analyse difficile et les plans en plusieurs étapes.

Sans le champ, le modèle raisonne à son niveau par défaut. Chaque modèle accepte chaque valeur : le niveau et le modèle sont deux choix distincts. Voici une tâche difficile à "high" avec Raven Max :

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.dipoleml.com/v1",
    api_key=os.environ["RAVEN_API_KEY"],
)

resp = client.chat.completions.create(
    model="Raven Max",
    reasoning_effort="high",
    max_tokens=8000,
    messages=[{"role": "user",
               "content": "Planifie notre migration de facturation étape par étape."}],
)
msg = resp.choices[0].message
reasoning = (getattr(msg, "reasoning_content", None)
             or getattr(msg, "reasoning", None))
print(msg.content)
print(resp.usage.completion_tokens, "jetons de sortie, raisonnement compris")

Quel niveau choisir pour quelle tâche?

Partez de la tâche. Une réponse courte demande peu de raisonnement : "low" fait gagner du temps et des jetons de sortie, et sur de nombreux appels, cela s'additionne. L'analyse difficile et les plans en plusieurs étapes sont là où "high" vaut ses jetons. Quand une tâche n'est ni l'un ni l'autre, n'envoyez pas le champ :

La tâcheNiveau
Trouver un fait, classer un billet, extraire des champs d'un textelow
Réécrire, traduire ou raccourcir un textelow
Un pipeline qui fait de nombreux appelslow
Trouver la cause d'une défaillance répartie sur plusieurs fichiershigh
Planifier une migration ou un gros changement, étape par étapehigh
Vérifier un contrat ou une démonstration point par pointhigh
Le travail courant de toute sorteomis

Le niveau et le modèle vont ensemble. Raven Flash à "low" est la paire rapide et la moins chère pour le volume; Raven Max à "high" est la paire pour le travail le plus difficile. Notre article sur le choix entre Raven Max et Raven Flash traite du côté des modèles.

Où revient le raisonnement?

À côté de la réponse, jamais dans content. Il arrive dans un champ à part du message, comme reasoning_content ou reasoning, et l'exemple lit celui qui est présent. Dans un flux, il arrive dans les deltas, en général avant le premier morceau de la réponse; notre article sur la diffusion en continu dans l'API DipoleML montre comment lire un flux. Le raisonnement est du texte brut : affichez-le tel quel, pas en Markdown.

Combien coûte le raisonnement?

Les jetons de raisonnement sont des jetons de sortie, facturés au prix en sortie, qui vaut 5 fois le prix en entrée sur les deux modèles. Raven Flash coûte 2,50 $ US par million de jetons de sortie et Raven Max, 6,25 $ US. Il n'y a pas de frais à part : le raisonnement est compté dans les jetons de sortie de la réponse, que l'exemple affiche. 10 000 jetons de raisonnement coûtent 0,0250 $ US sur Raven Flash et 0,0625 $ US sur Raven Max.

Prix en entrée et en sortieDollars US par million de jetons

Raven Max, sortie, raisonnement compris
6,25
Raven Flash, sortie, raisonnement compris
2,50
Raven Max, entrée
1,25
Raven Flash, entrée
0,50
Prix en entrée et en sortie
Modèle et prixDollars US par million de jetons
Raven Max, sortie, raisonnement compris6,25
Raven Flash, sortie, raisonnement compris2,50
Raven Max, entrée1,25
Raven Flash, entrée0,50

Les jetons de raisonnement se facturent au prix en sortie (en bleu), 5 fois le prix en entrée sur les deux modèles.

Quelle taille donner à max_tokens?

Le raisonnement compte dans max_tokens. Si max_tokens est petit, le modèle peut tout dépenser à raisonner et s'arrêter avec finish_reason "length" et une réponse courte ou vide. Quand vous gardez max_tokens petit, réglez reasoning_effort sur "low"; quand vous demandez "high", laissez de la place au raisonnement et à la réponse. Chaque modèle peut écrire jusqu'à 128 K jetons de sortie en une réponse.

Et l'application Raven?

L'application Raven a son propre réglage de réflexion, avec trois choix. Dans l'API, vous choisissez le niveau à chaque requête.

Où aller ensuite?

La référence du raisonnement décrit le champ en entier. Pour ce que coûte une tâche complète, lisez ce que coûte une tâche d'IA, calculé au cent près; pour donner à chaque application sa propre clé avec un plafond de dépenses, lisez une clé par application. Tous les prix sont sur la page des tarifs.

Questions et réponses

Que se passe-t-il si je n'envoie pas reasoning_effort?

Le modèle raisonne à son niveau par défaut. Réglez low ou high seulement si vous voulez moins ou plus de raisonnement que cela.

Le raisonnement coûte-t-il plus cher?

Les jetons de raisonnement sont facturés comme jetons de sortie, au prix en sortie du modèle. Il n'y a pas de frais à part pour le raisonnement.

Pourquoi ai-je reçu une réponse vide avec finish_reason length?

Le modèle a dépensé max_tokens à raisonner avant de pouvoir écrire la réponse. Augmentez max_tokens, ou réglez reasoning_effort sur low.

Première publication le Dernière mise à jour le

Commencez à développer avec l'API DipoleML