פיתוח צ'אטבוט מקומי שפועל אופליין באמצעות Prompt API

תאריך פרסום: 13 בינואר 2025

זהו החלק האחרון בסדרה בת שלושה חלקים על צ'אטבוטים של LLM. במאמרים הקודמים הסברנו על היכולות של מודלים גדולים של שפה (LLM) בצד הלקוח והראינו איך מוסיפים צ'אטבוט מבוסס WebLLM לאפליקציה של רשימת מטלות.

חלק מהמכשירים החדשים יותר מגיעים עם מודלים גדולים של שפה ומודלים אחרים של AI ישירות במכשיר. ‫Chrome הציע לשלב ממשקי API מובנים של AI בדפדפן, עם מספר ממשקי API בשלבי פיתוח שונים. רבים מממשקי ה-API האלה עוברים את תהליך התקנים, כדי שאתרים יוכלו להשתמש באותו יישום ובאותו מודל כדי להשיג את ביצועי ההסקה המקסימליים.

‫Prompt API הוא דוגמה ל-API מבוסס-AI. כדי להשתמש בו, מומלץ למפתחים להירשם לתוכנית ההפצה המקדימה. אחרי שהבקשה תאושר, תקבלו הוראות להפעלת Prompt API בדפדפנים. ‫Prompt API זמין בגרסת מקור לניסיון לתוספי Chrome, כך שתוכלו לבדוק את ה-API הזה אצל משתמשים אמיתיים של תוספים.

גישה משותפת למודל

התנהגות ה-Prompt API דומה לזו של WebLLM. עם זאת, הפעם אין אפשרות לבחור מודל (צריך להשתמש במודל ה-LLM שמגיע עם הדפדפן). כשמפעילים את ה-AI המובנה, Chrome מוריד את Gemini Nano לדפדפן. אחר כך אפשר לשתף את המודל הזה בכמה מקורות ולהפעיל אותו עם ביצועים מקסימליים. יש בעיה ב-GitHub שבה מפתח ביקש להוסיף תכונה לבחירת מודל.

הגדרת השיחה

אפשר להתחיל את השיחה בדיוק באותו אופן, אבל Prompt API מציע גם תחביר מקוצר לציון הנחיית המערכת. מתחילים את הסשן של מודל השפה באמצעות השיטה create() בממשק LanguageModel:

const session = await LanguageModel.create({
  initialPrompt: [
    {
      type: 'system',
      content: `You are a helpful assistant. You will answer questions related
        to the user's to-do list. Decline all other requests not related to the
         user's todos. This is the to-do list in JSON: ${JSON.stringify(todos)}`,
    },
  ],
});

מענה על השאלה הראשונה

במקום להשתמש באובייקט הגדרה כדי להגדיר סטרימינג, Prompt API מציע שתי שיטות נפרדות:

  • prompt() מחזירה את המחרוזת המלאה
  • promptStreaming() מחזירה איטרטור אסינכרוני. בניגוד ל-WebLLM, ‏ Prompt API מגיב עם מחרוזת התגובה המלאה, כך שלא צריך לשלב את התוצאות בעצמכם.

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

const stream = session.promptStreaming("How many open todos do I have?");
for await (const reply of stream) {
  console.log(reply);
}

הדגמה (דמו)

סיכום

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