Models

בחירת מודל: מחרוזת provider:model

הדרך הפשוטה ביותר לבחור מודל היא מחרוזת בפורמט provider:model, בדיוק כפי שראינו בדוגמת ה-createAgent בפרק הקודם ("anthropic:claude-sonnet-5") — LangChain מפענח את המחרוזת, יוצר ברקע instance של המודל המתאים, ומחבר אותו ל-agent.

הקיצור הזה מספיק לרוב המקרים: אין צורך לייבא SDK ספציפי לספק, ואין צורך לנהל בעצמכם client נפרד לכל ספק — LangChain עושה זאת עבורכם מאחורי הקלעים.

החלפת ספק בלי לשנות קוד

כיוון שה-agent מקבל רק את המחרוזת (או instance מודל), מעבר מספק אחד לאחר — למשל מ-Anthropic ל-OpenAI — הוא לרוב שינוי של שורה אחת, בלי לגעת בלוגיקת ה-agent, בכלים, או בקוד שמריץ אותו.

זה שימושי במיוחד בזמן פיתוח והשוואת מודלים: אפשר להריץ את אותו agent מול כמה ספקים ולהשוות תשובות, latency ועלות, בלי לשכתב את הקוד בכל פעם.

קונפיגורציה של מודל: temperature, max tokens ועוד

כשצריך שליטה מעבר לבחירת מודל בלבד — למשל temperature נמוך לתשובות עקביות, או הגבלת maxTokens — יוצרים instance מודל מפורש עם initChatModel, ומעבירים אותו ל-createAgent במקום מחרוזת.

TypeScript
import { initChatModel } from "langchain/chat_models";

const model = await initChatModel("anthropic:claude-sonnet-5", {
  temperature: 0.2,
  maxTokens: 1024,
});

const agent = createAgent({ model, tools: [getWeather] });

בחירת מודל דינמית בזמן ריצה

לפעמים רוצים agent שיבחר מודל שונה בהתאם להקשר — למשל מודל קל וזול לשאלות פשוטות, ומודל חזק יותר לשאלות מורכבות. LangChain תומך בהעברת פונקציה במקום ערך קבוע לשדה model, כך שהבחירה מתבצעת בזמן ריצה על סמך מצב השיחה.

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

TypeScript
const agent = createAgent({
  model: ({ messages }) => {
    const lastMessage = messages.at(-1)?.content ?? "";
    const isSimpleQuery = lastMessage.length < 100;

    return isSimpleQuery
      ? "anthropic:claude-haiku-4-5"
      : "anthropic:claude-sonnet-5";
  },
  tools: [getWeather],
});

סיכום: איך לבחור מודל בפרקטיקה

להתחלה ולפרוטוטייפ מהיר — מחרוזת provider:model מספיקה. כשצריך שליטה על פרמטרים — עוברים ל-instance מפורש עם initChatModel. וכשהעלות או ה-latency הופכים לשיקול משמעותי בהיקף production — שווה לשקול בחירה דינמית לפי סוג הבקשה.

בפרק הבא נעבור לצד השני של ה-createAgent — tools — ונראה איך להגדיר כלים איכותיים שהמודל, מכל ספק שנבחר, יידע להשתמש בהם נכון.

שאלות נפוצות

האם אותו prompt יעבוד אותו דבר אחרי שמחליפים ספק?

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

אפשר להגדיר מודל גיבוי למקרה שהספק לא זמין?

כן. זה בדיוק תפקיד ה-fault tolerance middleware שנראה בפרק 8: fallbacks שמעבירים את הקריאה למודל אחר כשהראשי נכשל. כדאי לבחור גיבוי שנבדק עם אותם כלים ואותם prompts, כי מודל שמתנהג אחרת לגמרי עלול לשבור את הזרימה דווקא ברגע של תקלה.

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

ההיסטוריה שייכת ל-thread ולא למודל, ולכן המודל שנבחר מקבל את כל ההודעות הקודמות גם אם הוא שונה מזה שענה קודם. צריך רק לוודא שכל מודל שהבחירה הדינמית עשויה להגיע אליו תומך בכלים שה-agent משתמש בהם, ושה-context window שלו גדול מספיק להיסטוריה.