Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > agorum core Module und Plugins > ALBERT | AI Suite > ALBERT | AI KI-Handler einrichten


Usage Protocol/Nutzungsstatistiken protokollieren

Technischer Name: agorum.ai.usage_protocol

Anzeigename: Nutzungsstatistiken protokollieren

Hinweis: Dieser Handler ist standardmäßig nicht aktiviert und erfordert ein zentrales agorum core pro System mit entsprechendem REST-Service zum Sammeln der Nutzungsprotokolle. Bei Interesse wenden Sie sich bitte an agorum®.

Was macht der Handler?

Der Handler agorum_ai_usage_protocol protokolliert die Nutzung des KI-Assistenten und sendet Nutzungsstatistiken als JSON per HTTP POST an einen externen Endpunkt.

Voraussetzungen

Wann wird gesendet?

Sub-Agent-Erkennung / Tracing

Aufrufe, die als Sub-Agent laufen (z. B. über das Tool call_preset oder interne Sub-Chats wie Titel-Generierung, Fehlerübersetzung oder History-Compaction), werden erkannt. Beide POST-Varianten enthalten zusätzlich Felder, um einen Tracing-Baum über mehrere Chats rekonstruieren zu können:

Provider/Modell, Fallback und Kosten

Erfasste Daten

Chat-Titel

Beide POST-Varianten enthalten den chat_title. Der Wert wird aus der Information in der Chat-Historie gelesen, die bei der Titelgenerierung angelegt wird. Im Before-Hook liegt dieser Eintrag typischerweise noch nicht vor,  dann ist chat_title null

chat_kind

Beide POST-Varianten enthalten chat_kind, um die Art des Chat-Aufrufs zu unterscheiden. Mögliche Werte:

Einzelpreise im Final-POST (prices)

Der Final-POST enthält zusätzlich das Objekt prices mit den in der KI-Voreinstellung eingestellten Einzelpreisen. So kann der empfangende Endpunkt eigene Kostenberechnungen anstellen und die bereits gelieferte Summe cost nachvollziehen.

Das Objekt prices enthält folgende Felder:

Feld Beschreibung
input Preis pro 1 Million Input-Tokens (Tokens, die an das Modell gesendet werden).
output Preis pro 1 Million Output-Tokens (Tokens, die vom Modell generiert werden).
cacheRead Preis pro 1 Million Tokens beim Lesen aus dem Cache.
cacheWrite Preis pro 1 Million Tokens beim Schreiben in den Cache.
albertOutput Preis pro 1 Million ALBERT-Output-Tokens (sichtbarer KI-Output auf Basis von result.text inkl. Tool-Calls; ohne reasoningText).
toolCalls Preis pro 1.000 Tool-Aufrufe.
conversionFactor Umrechnungsfaktor, falls die Preise in eine andere Währung umgerechnet werden sollen. Entspricht dem Feld cost_conversion_factor.
currency Währung, in der die Preise angegeben sind (z. B. EUR, USD).

Hinweise:

  • Bei aktivem Sticky-Fallback werden automatisch die Preise des tatsächlich verwendeten Fallback-Presets übermittelt.
  • Sind in der KI-Voreinstellung keine Preise konfiguriert, wird prices als null gesendet. Damit unterscheidet der Endpunkt, ob „keine Preise“ gesetzt sind oder ob alle Preise auf 0 stehen.
  • Der Running-Ping (Chat-Start/Resume) enthält weiterhin keine Preis- oder Kosteninformationen.
  • Die Änderung ist vollständig abwärtskompatibel: Alle bisherigen Felder (cost, currency, cost_conversion_factor, Token- und Tool-Felder) bleiben unverändert erhalten.

Empfohlener Einsatzzweck

Der Handler eignet sich ideal für:

Einstellungen

Parameter Beschreibung
url
(Pflicht)
Die Endpunkt-URL, an die die Nutzungsdaten per HTTP POST gesendet werden.

Beispiel: https://api.example.com/usage
apiKey
(Optional)
API-Key (Bearer Token) zur Authentifizierung gegenüber dem Endpunkt. Falls angegeben, wird der Header Authorization: Bearer <apiKey> mitgesendet.

Das Feld wird verschlüsselt gespeichert.
identifier
(Optional)
String-Identifikator, der in beiden POSTs mitgesendet wird. Kann zur Kategorisierung oder Kennzeichnung der Protokolleinträge verwendet werden.

Beispiele: Abteilung-Vertrieb oder Projekt-X
initialTextLength
(Optional)
Maximale Anzahl an Zeichen, die vom ersten Benutzertext erfasst und mitgesendet werden sollen. Längere Texte werden abgeschnitten und mit "..." gekennzeichnet.

Standard: 100

Gesendete Datenstruktur

Der Handler sendet folgende JSON-Struktur an den konfigurierten Endpunkt.

Running-Ping (Chat-Start/Resume)

Beispielhafte Struktur (kompakt, ohne Token-/Kosten-Aggregate):

{
  "running": true,
  "chat_id": "UUID des Chats",
  "chat_title": null,
  "chat_kind": "mainAgent",
  "sub_agent": false,
  "parent_chat_id": null,
  "parent_preset": null,
  "used_preset": "Name der verwendeten KI-Voreinstellung (Preset)",
  "model_preset": "Name des aufgelösten Modell-Presets (inkl. Fallback)",
  "provider": "Provider-Name (tatsächlich verwendet)",
  "model": "Modellname (tatsächlich verwendet)",
  "identifier": "Konfigurierter Identifikator",
  "initial_text": "Anfang der Benutzeranfrage...",
  "start": "2026-02-12T10:00:00.000Z",
  "user_name": "benutzername",
  "user_id": "UUID des Benutzers"
}
  

Final-POST (Chat-Ende oder Fehlerfall)

Der Final-POST enthält die aggregierten Nutzungsdaten. Bei Fehlern kommen zusätzlich error_type und error_text hinzu.

{
  "running": false,
  "protocol_id": "(optional) Protokoll-ID, falls im Verlauf gesetzt",
  "used_preset": "Name der verwendeten KI-Voreinstellung (Preset)",
  "model_preset": "Name des aufgelösten, tatsächlich verwendeten Modell-Presets (inkl. Fallback)",
  "provider": "Provider-Name (tatsächlich verwendet)",
  "model": "Modellname (tatsächlich verwendet)",
  "tokens_input": 1234,
  "tokens_output": 567,
  "tokens_albert_output": 890,
  "tokens_cache_read": 100,
  "tokens_cache_write": 50,
  "tool_call_count": 3,
  "cost": 0.0045,
  "currency": "EUR",
  "cost_conversion_factor": 1,
  "prices": {
    "input": 3.00,
    "output": 15.00,
    "cacheRead": 0.30,
    "cacheWrite": 3.75,
    "albertOutput": 0,
    "toolCalls": 0,
    "conversionFactor": 1,
    "currency": "EUR"
  },
  "identifier": "Konfigurierter Identifikator",
  "initial_text": "Anfang der Benutzeranfrage...",
  "id": "Eindeutige ID des Nutzungsprotokolls",
  "start": "2026-02-12T10:00:00.000Z",
  "end": "2026-02-12T10:01:30.000Z",
  "user_name": "benutzername",
  "user_id": "UUID des Benutzers",
  "chat_id": "UUID des Chats",
  "chat_title": "Generierter Chat-Titel",
  "chat_kind": "mainAgent",
  "sub_agent": false,
  "parent_chat_id": null,
  "parent_preset": null,
  "error_type": "(optional) result.error.type",
  "error_text": "(optional) result.error.text"
}