NIA One · Docs
Intégration SDK

Sessions & traçage distribué

Deux besoins fréquents : relier les tours d'une même conversation, et continuer une trace à travers plusieurs services.

Conversations multi-tours

Pour un SIA conversationnel, attachez le même session_id à chaque tour (un flow par tour), et un actor_id pour identifier l'utilisateur. Le cockpit regroupe alors les tours en une session.

session_idconversation multi-tours — relie plusieurs flowsactor_id
trace_id
flow_id
span_id
span_id
span_id

trace_id contient un ou plusieurs flow_id, chacun contenant des span_id (steps).

Un session_id relie plusieurs flows (tours) ; actor_id identifie l'utilisateur.
def handle_turn(user_message: str):  with flow(client, flow_definition_id="support_bot", name="support_bot_main",            session_id="conv_8421", actor_id="user_42") as f:      with step(f, asset=llm_asset, flow=Flow(name="support_bot_main", phase=FlowPhase.ANALYSIS, step="answer")) as s:          answer = generate(user_message)          payload(s, "output", Data(role=DataRole.OUTPUT, kind=DataKind.COMPLETION, format=DataFormat.TEXT), answer)          return answer

Traçage distribué (multi-services)

Quand un service appelle un autre, sérialisez le contexte dans un carrier (en-têtes HTTP) côté émetteur, puis reprenez-le côté récepteur avec resume_flow : la même trace continue, le span du service B se rattache au step du service A.

# --- Service A : injecter le carrier dans les headers sortants ---with flow(client, flow_definition_id="orchestrator", name="orchestrator_main") as f:  with step(f, asset=api_asset, flow=Flow(name="orchestrator_main", step="call_b")) as s:      headers = f.to_carrier(s)              # dict prêt à mettre dans les headers HTTP      requests.post("https://service-b/infer", headers=headers, json=payload_body)# --- Service B : reprendre la trace ---def handler(request):  f = resume_flow(client, dict(request.headers))  with step(f, asset=model_asset, flow=Flow(name="orchestrator_main", step="infer")) as s:      ...  # rattaché au step "call_b" du service A
CarrierKey (header)Requis
niaone-flow-definition-idoui
niaone-flow-idoui
niaone-trace-idoui
niaone-flow-nameoui
niaone-parent-span-idrecommandé (rattachement)
niaone-session-id / niaone-actor-idsi présents

Reprise après erreur

En safe_mode, si un carrier est incomplet, resume_flow n'échoue pas : il démarre un flow neuf et route l'erreur vers on_error. Vos services aval continuent d'émettre.

On this page