Przejdź do głównej zawartości

Tool Calls & Slash Commands

Każdy krok typu function_call zawiera:

  • name - nazwa narzędzia
  • arguments - argumenty (JSON string)
  • call_id - unikalny identyfikator (np. toolu_01...)

Model oczekuje odpowiedzi z function_call_output i dopasowanym call_id:

{
"type": "function_call_output",
"call_id": "toolu_01...",
"output": "{\"status\":\"ok\",\"data\":...}"
}
SurfaceNazwa narzędziaOutputUwagi
Slash /summaryvista.command.summaryJSON z subjective/objective/assessment/planLista w responses-tools.json
Slash /order labvista.command.order_labPayload zgodny z tasksService.createTaskcall_id koreluje task → tool output
@Patient mentionvista.context.lookup_patientJSON z patient_id, visit_idbuildToolContextId generuje context_id
AI Suggestions SOAPvista.soap.generate_sectionTekst + metadane (section: "assessment")sessionArchiveService zapisuje call_id
Wizardy diagnostycznevista.command.start_workflow::<name>workflow_id, context_idAutomations używają tej samej ścieżki

Własny identyfikator przechowywany w metadata lub argumentach narzędzia:

SurfaceFormat context_id
Slash commandsslash:summary:vis_123
@ mentionsmention:patient:pat_456

Backend echo-uje metadata w response.output[].content[].annotations i w eventach.

sequenceDiagram
participant UI
participant TR as toolRegistry
participant AI as UnifiedAI
participant Model
UI->>AI: input + tools
AI->>Model: /v1/responses
Model-->>AI: function_call (call_id)
AI-->>UI: render placeholder
alt Natychmiastowe (lookup_patient)
UI->>UI: execute locally
else Backend (SOAP, tasks)
UI->>AI: create job
AI-->>UI: job result
end
UI->>AI: function_call_output (call_id)
AI->>Model: continue

responses-tools.json + toolRegistry.ts:

  • Sortowanie, walidacja ToolId
  • Ta sama lista trafia do metadata.tools w /v1/responses

Gdy model zwróci function_call:

  • Zapisujemy call_id w conversationHostSync + sessionArchiveService
  • Renderujemy placeholder w UI („Model wzywa narzędzie X”)
TypPrzykładWykonanie
Natychmiastowelookup_patientFrontend (useAssistantToolCommands)
BackendSOAP, tasksJob w Tauri (voiceJobSync, tasksService)
{
"type": "function_call_output",
"call_id": "toolu_01...",
"output": "{\"status\":\"ok\",\"data\":...}"
}

Jeżeli wykonanie narzędzia się nie powiedzie:

{
"type": "function_call_output",
"call_id": "toolu_01...",
"output": "{\"error\":{\"code\":\"...\",\"message\":\"...\"}}"
}

secure_logger loguje tool_call.failed wraz z call_id.

NarzędzieOpis
secure_loggerLogi tool_call.started/completed/failed
pnpm test:invokeTesty conversationSync / voiceJobSync
aiTestsPanel.tsxPanel diagnostyczny - aktywne call_id + surface
  • code_interpreter - mechanizm identyczny (call_id wskazuje kontener CI)
  • web_search - ten sam flow z call_id