POST /v2/retrieve est le chemin principal. Il enchaîne, en un appel :
- query maker — qualifie ce que le dernier message apporte (nouvelle question, précision, fait patient) et le reformule ;
- retrieving deux voies — sémantique ‖ concepts + graphe, en parallèle ;
- contexte — les unités de connaissance retenues, leurs tables de décision, leurs documents ;
- rédaction — une réponse en Markdown, citée sur ces unités et rien d’autre.
deliberate ci-dessous).
Requête minimale
Les champs qui comptent
Les réglages de retrieving (
concept_k, chunk_k, mku_k, mku_weight,
table_k, use_cross_refs) sont exposés, mais leurs défauts sont le point de
fonctionnement mesuré. Les changer, c’est sortir de ce que les évaluations
couvrent. Le détail de chacun est dans l’onglet API Reference.
Ce que rend la réponse
Les unités logiques : score et arbre
Toutes les unités de connaissance ne sont pas des règles plates. Deux formes portent une logique exécutable :- un score — des questions cotées, un total, des paliers d’interprétation ;
- un arbre — des nœuds, des branches, des conduites terminales.
elicitations[].steps[]), le client les affiche, le praticien répond, et
le tour suivant repasse ses réponses dans logic_answers : le calcul est alors
fait par un moteur déterministe, et c’est son résultat (computed) qui entre
dans le contexte de rédaction.
mku_id (l’identité citable) ou par mku_key (la
clé lisible) : la seconde survit à une ré-extraction, ce qui compte quand un
formulaire reste ouvert entre deux tours. Selon la forme du score, on répond par
answers (question → modalité), checked (les cases retenues) ou level (un
palier d’échelle) ; un arbre répond par answers, du nœud vers la branche
choisie.
Chaque étape porte un kind : question, items, niveau (un palier à
choisir) ou branchement (une branche d’arbre). Un client qui ignore
elicitations reçoit la même réponse rédigée qu’avant — l’unité est alors citée
sans être exécutée.
Une seule unité est dépliée
Une réponse peut retrouver plusieurs unités logiques. Un praticien n’en remplit qu’une : celle qu’il est venu chercher. Une seule porte donc sessteps —
expanded: true — et c’est la mieux classée, ou celle que la question nomme
si elle en nomme une.
Les autres restent dans elicitations avec expanded: false et steps: [].
Elles gardent tout le reste : identité, titre, total_max, bands, graph.
De quoi les proposer sans les afficher, et les ouvrir soi-même sans un
second appel.
Une unité pour laquelle la requête portait des logic_answers est toujours
dépliée, quel que soit son rang : un formulaire ouvert ne se referme pas parce
qu’un autre score est mieux classé.
Un score porte son interprétation — bands
bands donne les paliers d’un score : ce que vaut un total, tel que la source
le publie à côté du barème. Le client peut donc afficher une conduite dès que le
praticien coche, sans aller-retour.
computed.outcome reste la seule conclusion opposable — elle vient du moteur.
bands sert à afficher le barème et à situer un total, pas à trancher.
Un arbre porte son graphe — graph
steps ne contient que les nœuds qui demandent une décision. Les nœuds de
passage et les conduites terminales n’en sont pas — or le moteur traverse les
premiers tout seul et conclut sur les seconds. graph rend l’arbre entier, et
lève l’asymétrie : ce que le moteur traverse, le client le voit.
Côté options,
to porte l’identifiant du nœud d’arrivée ; leads_to porte
son libellé. Naviguer par to : deux nœuds peuvent porter le même texte, et un
nœud de passage n’apparaît dans aucun steps[].key.
computed.path_ids donne le chemin parcouru en identifiants, computed.path
les mêmes nœuds en libellés — un pour un.
Calculer sans re-chercher
Pour les tours intermédiaires d’un formulaire ouvert — cocher une case, choisir une branche — utilisez/v2/logic/compute
plutôt que de rappeler /v2/retrieve. C’est plus rapide, et surtout c’est
déterministe : l’unité y est désignée par sa clé, pas re-classée.
Trois formats pour une même réponse
La négociation se fait surAccept, plutôt que par un ?format= : le client
déclare ce qu’il sait lire.
En JSON, les sauts de ligne d’
answer sont échappés en \n : lire avec
jq -r '.answer'.