• בלוג
  • יום 17 - לוג בקשות ותשובות

יום 17 - לוג בקשות ותשובות

16/10/2025

מודלי שפה גדולים אלופים בלהפתיע, במיוחד כשמשלבים אותם עם משתמשים. בכתיבת מערכת AI אנחנו חייבים להיות מסוגלים לראות איזה בקשות נשלחו למודל ואיזה תשובות חזרו כדי שנוכל לשפר את הפרומפטים שלנו ואת הקוד שמטפל בתשובות. הרבה פעמים מנהלי מוצר ואנשים פחות טכניים יהיו מעורבים בכתיבת הפרומפטים ולכן אנחנו צריכים Dashboard ידידותי שיכול להציג את כל השיחות עם המודלים. חברות AI הבינו את זה די מהר ומנגנוני המעקב מובנים היום בכל API של עבודה מול סוכנים. בואו נראה איך זה עובד עם OpenAI Agents.

1. צפייה בלוג ברירת המחדל

כל שיחה עם AI של OpenAI דרך OpenAI Agents SDK בברירת מחדל מוקלטת ושמורה בחשבון שלכם. אתם יכולים למצוא כאן היסטוריה של כל השיחות:

https://platform.openai.com/logs?api=traces

כל שיחה ברשימה מכילה את ההודעות עצמן ובנוסף איזה מודל כתב את התשובה, כמה זמן לקח לו לענות וכמה טוקנים זה לקח. המידע הזה יעזור לכם לעשות אופטימיזציה לעלויות וזמני תגובה של התוכניות שלכם ולזהות שיחות שלא התנהלו לפי התוכנית.

ניתן לבטל את השמירה האוטומטית למערכת של OpenAI באמצעות שמירת הערך True במשתנה הגלובאלי agents.run.RunConfig.tracing_disabled או העברת הערך 1 למשתנה הסביבה OPENAI_AGENTS_DISABLE_TRACING.

2. שליטה על ה trace-ים שנוצרים

אם הפעלתם את תוכניות הדוגמה בשבועיים האחרונים ותיכנסו ללינק לצפיה בכל ההקלטות תגלו שכל הקלטה נקראת פשוט Agent workflow. אנחנו יכולים לשלוט בשם הזה, וגם לשלב מספר קריאות ל run לאותו trace באמצעות הפונקציה trace.

ניזכר בתוכנית שכתבנו אתמול:

async def main():
    session = SQLiteSession("info")
    ctx = UserContext(name=None, favorite_programming_language=None)

    next_message = "Start the conversation with the student."
    while True:
        result = await Runner.run(agent, next_message, session=session, context=ctx)
        print(result.final_output)
        if ctx.name is not None and ctx.favorite_programming_language is not None:
            break

        next_message = input()

    print(ctx)

אחרי שאני מפעיל אותה ונכנס למסך הלוג אני מוצא שם שלוש שורות trace חדשות שנוצרו:

  1. השורה הראשונה קיבלה את הודעת המערכת של ההוראות של הסוכן ואת הודעת הפתיחה והחזירה את הודעת הפתיחה שהבוט יצר.

  2. השורה השניה מורכבת מ-3 קטעים - הראשון הוא פקודת Generation שקיבלה את התשובה שלי (שם המשתמש) והחזירה tool call, קריאה לכלי set_name. הקטע הבא הוא פקודת set_name עצמה שהחזירה את הטקסט User name set to ynon וקטע שלישי הוא שוב פניה לסוכן שמבקש הפעם לדעת מה שפת התכנות האהובה עליי.

  3. אחרי שאני כותב פייתון מופעל run פעם נוספת ולכן תיווצר שורה שלישית בלוג ששוב מורכבת מ-3 קטעים, בקטע הראשון הסוכן עונה עם בקשה להפעלת כלי, הקטע השני הוא הפלט של הכלי והקטע השלישי הוא ההודעה האחרונה של הסוכן.

בעולם האמיתי אני רוצה לחבר את שלושת השורות האלה לשורה אחת שתופיע בלוג ולתת לה שם שיעזור לי לזהות אותה. אני מעדכן את הקוד וכותב:

async def main():
    session = SQLiteSession("info")
    ctx = UserContext(name=None, favorite_programming_language=None)

    with trace(workflow_name="GetUserDetails"):
        next_message = "Start the conversation with the student."
        while True:
            result = await Runner.run(agent, next_message, session=session, context=ctx)
            print(result.final_output)
            if ctx.name is not None and ctx.favorite_programming_language is not None:
                break

            next_message = input()

    print(ctx)

אחרי השינוי אני רואה רק שורה אחת חדשה בלוג בשם GetUserDetails. כניסה אליה מציגה את שלושת השורות שראינו קודם, כל שורה בתור "אקורדיון" ובתוכה המקטעים של אותו run.

3. שמירת הלוג ל Langsmith

לא רוצים לשמור את הלוגים על השרתים של openai? אין בעיה. יש הרבה חברות אחרות שמציעות מוצרים דומים, אחת המובילות נקראת Langsmith.

הכנסו לאתר שלהם:

https://www.langchain.com/langsmith

הירשמו בחינם כדי לקבל מפתח במסלול ה Developers שלהם ושמרו את המפתח במשתנה סביבה בשם LANGSMITH_API_KEY.

לאחר מכן עדכנו את התוכנית לגירסה הבאה:

if __name__ == "__main__":
    set_trace_processors([OpenAIAgentsTracingProcessor()])
    asyncio.run(main())

תצטרכו גם להתקין את החבילה של langsmith עם:

pip install "langsmith[openai-agents]"

ולהוסיף את ה import-ים:

from agents import Agent, Runner, set_trace_processors
from langsmith.wrappers import OpenAIAgentsTracingProcessor

ואתם מסודרים. הפעילו את התוכנית שוב ותוכלו לראות את כל זרימת ההודעות במסך ה Dashboard של Langsmith.