Installation
llama-index-core 0.14.23 bis 0.15. Ab 0.14.23 überträgt der Workflow-Stream die typisierten Agent-Events, die dieser Adapter liest. Darunter fehlen sowohl Modellnamen als auch die Agent-Struktur.
Instrumentierung
async with als auch mit with und erzeugt identische Events.
instrument() hängt einen Event-Handler und einen Span-Handler an den globalen Dispatcher von LlamaIndex. Gemeinsam machen sie die Agent-Schleife sichtbar – nicht nur deren Modellaufrufe.
Token-Anzahlen
FunctionAgent ruft astream_chat auf, und llama-index-llms-openai sendet beim Streamen kein stream_options={"include_usage": True}. Der Provider sendet daher niemals den Usage-Chunk, und es gibt nichts, das eine Instrumentierung lesen könnte.
Dies ist ein vorgelagertes LlamaIndex-Verhalten. Aktivieren Sie es an Ihrem LLM:
Nicht-Streaming-Aufrufe (
llm.chat, llm.achat) melden die Nutzung ohne Konfiguration. Nur der Streaming-Pfad – der Standard-Agent-Pfad – benötigt dies.
Was aufgezeichnet wird
agent_id ist der FunctionAgent.name, wenn Sie einen gesetzt haben, andernfalls der Workflow-Klassenname. Unter einem AgentWorkflow erhält jeder Agent, der an die Reihe kommt, seinen eigenen verschachtelten Span unter dem Workflow – ein Handoff erscheint daher als zwei Agenten statt als einer.
Die Retrieval-Ausgabe wird zusammengefasst statt vollständig ausgegeben. Ein Retriever gibt Dokumente zurück, und deren vollständige Speicherung im Payload würde Ihr Korpus bei jeder Anfrage einmal im Event-Store ablegen. Stattdessen werden Anzahl, Score-Bereich und gekürzte Ausschnitte gespeichert.
Beispiel
init_run, setup_agent, run_agent_step, parse_agent_output, call_tool und aggregate_tool_results. Da es sich um die eigene Schleife des Frameworks handelt, sind sie Hooks statt Agents – das hält agent_id aussagekräftig.
Spans benennen
agent_id ist der FunctionAgent.name, wenn Sie einen gesetzt haben, andernfalls der Workflow-Klassenname.
AgentWorkflow ist dieser Name auch der, unter dem jeder Handoff aufgezeichnet wird:
agent_id zeigt also welcher Agent die Arbeit erledigt hat, und parent_id zeigt welchem Workflow er angehörte. Ein Agent, der die Kontrolle später zurückgibt, öffnet einen zweiten Turn statt seinen ersten wieder aufzunehmen.
Umschließen Sie den Run, um dies zu überschreiben oder mehrere Agenten unter einem gemeinsamen Parent zu gruppieren:
agent_id mit niedriger Kardinalität. Es ist die primäre Facette auf jeder Dashboard-Oberfläche – verwenden Sie also einen Rollen- oder Workflow-Namen, niemals eine UUID oder einen pro-Run-generierten String.
Session steuern
Dieser Adapter hat keinesession_id-Option. Die Session kommt aus dem umschließenden Scope, andernfalls wird pro Workflow-Run ein uuid4().hex generiert:
Optionen
Human in the Loop
Wird erfasst, wenn das Warten innerhalb eines Tools stattfindet:ctx.wait_for_event in einem gewöhnlichen Workflow-Step wird nicht erfasst. Die Runtime fängt den Drop ab, bevor er den Dispatcher erreicht – der Step beendet sich und läuft später erneut, ohne ein Signal, auf das eine Pause gestützt werden könnte. Das FunctionAgent-Muster, das LlamaIndex dokumentiert, wartet innerhalb eines Tools und wird vollständig erfasst.
Häufige Probleme
Alle Token-Anzahlen sind null
Alle Token-Anzahlen sind null
Fügen Sie
additional_kwargs={"stream_options": {"include_usage": True}} zu Ihrem LLM hinzu. Siehe Token-Anzahlen.Usage ist befüllt, aber die Token-Spalten sind leer
Usage ist befüllt, aber die Token-Spalten sind leer
LlamaIndex hat kein standardisiertes Usage-Feld. Der Adapter versucht mehrere bekannte Strukturen, und eine Integration, die ihre Zähler anders benennt, passt zu keiner davon.Das rohe Dict wird immer mitgeschickt – prüfen Sie
usage im Payload, um zu sehen, wie Ihr Provider sie nennt.Ein befülltes usage bei gleichzeitig leeren Token-Spalten ist beabsichtigt – das ist besser als eine sichere, aber falsche Zahl.Die Timeline ist voll mit setup_agent und parse_agent_output
Die Timeline ist voll mit setup_agent und parse_agent_output
Das ist die FunctionAgent-Schleife, ein Satz pro Iteration. Filtern Sie nach Hook-Namen im Dashboard. Diese Step-Timings sind meist der Grund, diesen Adapter statt eines reinen Modell-Adapters zu verwenden.
Es wird nichts aufgezeichnet
Es wird nichts aufgezeichnet
Prüfen Sie in dieser Reihenfolge:
instrument() wurde vor dem Run aufgerufen; ein async with failproofai_sdk.session(): umschließt das await; llama-index-core ist 0.14.23 oder neuer; FAILPROOFAI_SDK_STRICT=1 ist gesetzt, damit ein fehlerhafter Hook eine Exception wirft statt verschluckt zu werden.Weiter
So funktioniert es
Paare, IDs, Session-Lebenszyklus und Zustellung.
Einen Trace lesen
Die Kausalität durch die soeben erfasste Session verfolgen.
Andere Frameworks
LangGraph, CrewAI, Pydantic AI und eigene Agenten.

