• בלוג
  • יום 6 - ארגון הקוד ובחירת מודלים

יום 6 - ארגון הקוד ובחירת מודלים

05/10/2025

הפוסט היום מסיים את החלק הראשון של סידרת הפוסטים על פיתוח משולב AI. בסידרה עד עכשיו למדנו איך להתקין את ספריית OpenAI Agents SDK, למדנו על שני סוגי מערכות משולבות AI (סקריפט שרץ ברקע וסוכן אינטרקטיבי) ואנחנו אפילו כבר יודעים איך לכתוב תוכניות פשוטות משני הסוגים.

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

1. מבנה קוד

ניזכר איך כתבנו סוכן בתוכניות הדוגמה עד עכשיו:

market_research_agent = Agent(
    name="MarketResearcher",
    model=LitellmModel(model="github/gpt-4.1", api_key=os.environ["GITHUB_TOKEN"]),
    output_type=list[BlogPostIdea],
    instructions="""
    You are a market researcher and your job is to suggest cool ideas for blog posts.
    I will send you ideas and you will help me turn them into engaging posts,
    Or I will send you topics and you will help to focus me on the best viral ideas in these niches.
    """
)

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

כדאי להתיחס לפרומפטים בתור חלק עצמאי מהקוד ולכן אני אוהב לשמור פרומפט בקובץ נפרד. הרבה פעמים אני גם אוהב לשתול משתנים לתוך הפרומפט וכך אני יכול לשנות "פרמטרים" בסוכן שלי בהתאם לנסיבות. לכן בפרויקט אמיתי תהיה לנו תיקיה בשם agents, בתוכה תיקייה לכל סוכן ובתוכה קובץ סוכן וקובץ הוראות:

agents/
├── researcher/
│   ├── agent.py
│   └── prompt.md

בשביל לשלב משתנים כדאי להשתמש בספריית jinja2 וכך קוד הסוכן יהיה:

from agents import Agent, Runner
from pydantic import BaseModel, Field
from jinja2 import Environment, FileSystemLoader

class BlogPostIdea(BaseModel):
    title: str = Field(..., title="Title", description="The title of the blog post"),
    main_concepts: list[str] = Field(..., title="Main Concepts", description="Main concepts for the post")

env = Environment(loader=FileSystemLoader("agents/researcher"))
template = env.get_template("instructions.md")

market_research_agent = Agent(
    name="MarketResearcher",
    output_type=list[BlogPostIdea],
    instructions=template.render()
)

2. מודלים

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

  1. ג'מיני פלאש מאוד זול, מהיר וטוב. אם הוא מצליח לפתור את הבעיה שלכם הרווחתם.
  2. מודל Deepseek הסיני גם מאוד זול ומהיר. שווה לנסות גם את גירסת ה Chat וגם את גירסת ה Reasoning שלהם.
  3. קלוד יקר אבל קלוד סונט מהיר. במשימות תרגום או משימות שדורשות יצירתיות אפשר לקבל ממנו תוצאה טובה ולפעמים זה שווה את המחיר.
  4. מודלי ה Reasoning המפורסמים (ג'מיני פרו, o3, אופוס) מאוד יקרים ואיטיים. כדאי להשתמש בהם ב Workflows שרצים ברקע וגם זה רק בחלק קטן מהתהליך.
  5. אפשר לקבל גישה למודלי קוד פתוח דרך https://openrouter.ai/models.

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

3. עכשיו אתם

הירשמו ל OpenRouter, השקיעו 2$ בקרדיטים ושלחו משימה למספר מודלי קוד פתוח כדי לראות את ההבדל בין התשובות ומי נותן לכם את התשובה הטובה ביותר. לאחר מכן השתמשו בדף התיעוד כאן:

https://docs.litellm.ai/docs/providers/openrouter

כדי לחבר את OpenRouter לקוד סוכן שתכתבו עם OpenAI Agents SDK ותנו למודל קוד פתוח לבצע את המשימות.