Models
בחירת מודל: מחרוזת provider:model
הדרך הפשוטה ביותר לבחור מודל היא מחרוזת בפורמט provider:model, בדיוק כפי שראינו בדוגמת ה-createAgent בפרק הקודם ("anthropic:claude-sonnet-5") — LangChainפריימוורק בקוד פתוח לבניית אפליקציות מבוססות LLM ו-agents, שעוטף רכיבים חוזרים בממשק אחיד. מתוך LangChain, מבוא ל-LangChain. מפענח את המחרוזת, יוצר ברקע instance של המודל המתאים, ומחבר אותו ל-agentLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית..
הקיצור הזה מספיק לרוב המקרים: אין צורך לייבא SDK ספציפי לספק, ואין צורך לנהל בעצמכם client נפרד לכל ספק — LangChain עושה זאת עבורכם מאחורי הקלעים.
החלפת ספק בלי לשנות קוד
כיוון שה-agentLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית. מקבל רק את המחרוזת (או instance מודל), מעבר מספק אחד לאחר — למשל מ-Anthropic ל-OpenAI — הוא לרוב שינוי של שורה אחת, בלי לגעת בלוגיקת ה-agent, בכלים, או בקוד שמריץ אותו.
זה שימושי במיוחד בזמן פיתוח והשוואת מודלים: אפשר להריץ את אותו agent מול כמה ספקים ולהשוות תשובות, latency ועלות, בלי לשכתב את הקוד בכל פעם.
קונפיגורציה של מודל: temperature, max tokens ועוד
כשצריך שליטה מעבר לבחירת מודל בלבד — למשל temperature נמוך לתשובות עקביות, או הגבלת maxTokens — יוצרים instance מודל מפורש עם initChatModel, ומעבירים אותו ל-createAgent במקום מחרוזת.
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] });בחירת מודל דינמית בזמן ריצה
לפעמים רוצים agentLLM שמופעל בלולאה, עם מטרה וסט כלים, ובכל סיבוב מחליט אם להפעיל כלי נוסף או לסיים ולהחזיר תשובה. מתוך AI Agents, Agents והלולאה האגנטית. שיבחר מודל שונה בהתאם להקשר — למשל מודל קל וזול לשאלות פשוטות, ומודל חזק יותר לשאלות מורכבות. LangChainפריימוורק בקוד פתוח לבניית אפליקציות מבוססות LLM ו-agents, שעוטף רכיבים חוזרים בממשק אחיד. מתוך LangChain, מבוא ל-LangChain. תומך בהעברת פונקציה במקום ערך קבוע לשדה model, כך שהבחירה מתבצעת בזמן ריצה על סמך מצב השיחה.
טכניקה כזו מאזנת בין עלות, מהירות ואיכות: לא כל שאלה זקוקה למודל היקר ביותר, ובחירה דינמית חוסכת עלות מבלי לפגוע בחוויית המשתמש בשאלות המורכבות שבאמת דורשות אותה.
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 שלו גדול מספיק להיסטוריה.