title: “LlamaIndex” sidebarTitle: “LlamaIndex” description: “Instrument workflows, steps, function agents, and retrievers.” icon: “/images/frameworks/llamaindex.svg”
התקנה
llama-index-core מגרסה 0.14.23 עד 0.15. 0.14.23 היא הגרסה בה stream זרימת workflows התחיל לשאת אירועי agent מסוגים שהמתאם קורא. מתחתיו, שמות מודלים ומבנה agent שניהם חסרים.
Instrument
async with וגם with ומייצר אירועים זהים.
instrument() מצרף event handler ו-span handler ל-global dispatcher של LlamaIndex. ביחד הם הופכים את agent loop לנראה, לא רק את קריאות המודל שלו.
ספירת Tokens
FunctionAgent קורא ל-astream_chat, ו-llama-index-llms-openai לא שולח stream_options={"include_usage": True} כשהוא משדר. ספק זה לכן לעולם לא שולח את usage chunk, ואין לשום instrumentation מה לקרוא.
זו התנהגות upstream של LlamaIndex. הצטרף לשימוש ב-LLM שלך:
קריאות ללא streaming (
llm.chat, llm.achat) דווחו על usage ללא תצורה. רק נתיב ה-streaming, שהוא נתיב ה-agent ברירת המחדל, זקוק לזה.
מה מתועד
agent_id הוא FunctionAgent.name כאשר אתה קובע אחד, ושם מחלקת workflow אחרת. תחת AgentWorkflow, כל agent שלוקח תור מקבל span nested משלו תחת workflow, כך handoff קורא כשני agents ולא אחד.
פלט retrieval מסוכם ולא מודפס. retriever מחזיר מסמכים, והשמירה שלהם ב-payload תשים את הקורפוס שלך בחנות ארועים פעם אחת לכל שאילתה. הספירה, טווח ציון וקטעי קוד קצוצים נשמרים במקום.
דוגמה
init_run, setup_agent, run_agent_step, parse_agent_output, call_tool, ו-aggregate_tool_results. הם הלולאה של הפריימוורק שלו, כך שהם hooks ולא agents, שמשמר את agent_id משמעותי.
שם את Spans שלך
agent_id הוא FunctionAgent.name כאשר אתה קובע אחד, ושם מחלקת workflow אחרת.
AgentWorkflow, שם זה הוא גם מה שכל handoff מתועד תחתיו:
agent_id אומר לך איזה agent עשה את העבודה ו-parent_id אומר לך איזה workflow הוא שייך. agent שהחזיר שליטה מאוחר יותר פותח תור שני ולא מפתח מחדש את הראשון שלו.
עטף את ההרצה כדי לעקוף זאת, או לקבץ כמה agents תחת parent אחד:
agent_id cardinality נמוכה. זה הפן הראשי על כל משטח dashboard, אז השתמש בתפקיד או שם workflow, לעולם לא UUID או per-run string.
שלוט בסשן
מתאם זה לא לוקח אפשרותsession_id. הסשן מגיע מ-scope המקיף, ואחרת generated uuid4().hex לכל workflow run:
אפשרויות
Human in the loop
מתועד כאשר ההמתנה קורית בתוך כלי:ctx.wait_for_event בשלב workflow רגיל לא מתועד. runtime תופס את הירידה לפני שהוא מגיע ל-dispatcher, כך שהשלב יוצא וריצה מחדש מאוחר יותר ללא אות לקבוע pause על. דפוס FunctionAgent, שלמי אינדקס תיעוד, מחכה בתוך כלי ומתועד במלואו.
בעיות נפוצות
כל ספירת tokens היא null
כל ספירת tokens היא null
הוסף
additional_kwargs={"stream_options": {"include_usage": True}} ל-LLM שלך. ראה Token counts.Usage מלא אבל עמודות tokens ריקות
Usage מלא אבל עמודות tokens ריקות
LlamaIndex אין שדה usage סטנדרטי. המתאם מנסה כמה צורות ידועות, ואינטגרציה שקוראת לדלפקים שלה משהו חדש לא תתאים לאחד מהם.dict גולמי תמיד משלח, אז בדוק
usage ב-payload כדי לראות מה הספק קרא להם.usage מלא לצד עמודות token ריקות הוא בכוונה — זה הביס מספר שגוי בטוח.ציר הזמן מלא setup_agent ו-parse_agent_output
ציר הזמן מלא setup_agent ו-parse_agent_output
זה הלולאה FunctionAgent, סט אחד לכל איטרציה. סנן לפי hook name בדשבורד. timings שלב אלה בדרך כלל הסיבה להשתמש במתאם זה ולא באחד רק-מודל.
כלום לא מתועד
כלום לא מתועד
בדוק בסדר זה:
instrument() רץ לפני ההרצה; יש async with failproofai_sdk.session(): סביב await; llama-index-core הוא 0.14.23 או יותר חדש; FAILPROOFAI_SDK_STRICT=1 מוגדר, אז hook משוער מעלה במקום להיבלע.הבא
How it works
Pairs, ids, session lifecycle, and delivery.
Read a trace
עקוב סיבתיות דרך הסשן שזה עתה תפסת.
Other frameworks
LangGraph, CrewAI, Pydantic AI, and custom agents.

