Skip to main content

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

ממשק ה-agent של LlamaIndex הוא async. כל scope עובד תחת async with וגם with ומייצר אירועים זהים. instrument() מצרף event handler ו-span handler ל-global dispatcher של LlamaIndex. ביחד הם הופכים את agent loop לנראה, לא רק את קריאות המודל שלו.
ללא ארגומנט נוסף אחד ב-LLM שלך, כל ספירת tokens בעקבות שלך היא null. ראה Token counts למטה.

ספירת 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 תשים את הקורפוס שלך בחנות ארועים פעם אחת לכל שאילתה. הספירה, טווח ציון וקטעי קוד קצוצים נשמרים במקום.

דוגמה

agent loop מופיע ב-trace כזוגות hook: 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, שלמי אינדקס תיעוד, מחכה בתוך כלי ומתועד במלואו.

בעיות נפוצות

הוסף additional_kwargs={"stream_options": {"include_usage": True}} ל-LLM שלך. ראה Token counts.
LlamaIndex אין שדה usage סטנדרטי. המתאם מנסה כמה צורות ידועות, ואינטגרציה שקוראת לדלפקים שלה משהו חדש לא תתאים לאחד מהם.dict גולמי תמיד משלח, אז בדוק usage ב-payload כדי לראות מה הספק קרא להם.usage מלא לצד עמודות token ריקות הוא בכוונה — זה הביס מספר שגוי בטוח.
זה הלולאה 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.