Ollama Structured Outputs In Practice
הרצת LLMs מקומיים מובילה לעיתים קרובות לשגיאות parsing של JSON. אתם אומרים למודל להחזיר JSON בלבד, אך הוא עדיין מוסיף markdown fences או טקסט נוסף. זה שובר את הקוד שלכם.
החל מגרסה Ollama 0.3.0, ניתן לתקן זאת באמצעות הפרמטר format. זה מאלץ את המודל לעקוב אחר JSON schema. זה הופך את ההוספה של טקסט נוסף או markdown לבלתי אפשרית עבור המודל.
בדקתי זאת עם Gemma4 ו-Ollama 0.30.7. להלן התוצאות.
The Problem with Natural Text
מודלים מאומנים לשיחה. הם רוצים לומר "הנה ה-JSON שלך". גם עם prompts קשיחים, הם מרבים לעטוף את התשובות בבלוקי קוד. הפונקציה json.loads() של Python נכשלת כשהיא נתקלת בבלוקים הללו.
The Speed Advantage
שימוש בפרמטר format מהיר הרבה יותר.
- ללא structured output: 32 שניות
- עם structured output: 5 שניות
זהו שיפור מהירות של פי 6.4. המודל אינו מבזבז זמן על החלטה כיצד לעצב את הטקסט. הוא מייצר רק tokens שמתאימים ל-schema שלכם.
Using Pydantic for Type Safety אין צורך לכתוב JSON schemas ידנית. השתמשו במודלים של Pydantic כדי ליצור אותם באופן אוטומטי.
- הגדירו את מודל ה-Pydantic שלכם.
- השתמשו ב-
model_json_schema()כדי ליצור את ה-schema. - העבירו את ה-schema הזה ל-Ollama.
- השתמשו ב-
model_validate_json()כדי לבצע parsing ו-validation לנתונים בבת אחת.
הגישה הזו מושלמת עבור AI agents. ניתן להשתמש בה כדי להחליט באיזה כלי (tool) הסוכן צריך להשתמש בשלב הבא. אם המודל ינסה להמציא שם של כלי שלא קיים, Pydantic יתפוס זאת מיד.
Current Limitations
- schemas עם קינון עמוק עלולים לעיתים להחזיר מערכים ריקים במודלים קטנים יותר.
- שדות אופציונליים עלולים להחזיר מחרוזות ריקות במקום null.
- schemas גדולים צורכים יותר מה-context window שלכם.
Best Practices
- השתמשו ב-extraction פשוט עבור מודלים קטנים.
- השתמשו ב-Pydantic עבור validation ובבחירת כלים עבור agents.
- השתמשו במודלים גדולים יותר עבור נתונים מורכבים ומקוננים.
- הוסיפו לוגיקת retry כאשר Pydantic זורק שגיאת validation.
הפסיקו לקוות שה-prompts שלכם יעבדו. השתמשו ב-structured outputs כדי להפוך את ה-pipelines של ה-LLM המקומי שלכם לאמינים.
Optional learning community: https://t.me/GyaanSetuAi