• בלוג
  • ai
  • הרצת סוכן AI מקומי עם Docker

הרצת סוכן AI מקומי עם Docker

20/05/2025
ai

בניסוי היום אני רוצה להראות איך להריץ סוכן AI מקומי עם דוקר. הסוכן הוא בסך הכל קוד TypeScript שמשתמש בספריית ה ai של ורסל והמודל איתו הוא מתקשר זה מודל מקומי.

אפשר לראות את קוד הדוגמה בגיטהאב: https://github.com/ynonp/docker-model-runner-demo

1. ארכיטקטורה

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

נכון, כל אחד יודע היום להריץ טייפסקריפט ו openai זמינים דרך API כך שאפשר להתחבר אליהם כמעט מכל מקום, אבל המפתח פה הוא ה"כמעט". בשביל לשלוט בסקייל של הסוכנים שלנו יש ייתרון להרצה מתוך דוקר, ואם אנחנו רוצים שהסוכנים גם ישתמשו במידע ארגוני רגיש או ירוצו On Prem אז יש ייתרון בשימוש ב LLM מקומי.

גירסאות חדשות של דוקר יודעות להריץ LLM מקומי ולחבר אותו לכל קונטיינר שרץ בתוך אותו compose, וזה מה שנראה בדוגמה היום.

2. קוד הסוכן

הלב של הדוגמה הוא הדוקר ולכן הסוכן עושה מעט מאוד, הוא צריך רק להתחבר למודל LLM מקומי ולשאול אותו שאלה. בעולם האמיתי כנראה תרצו שהסוכן ימשיך לרוץ ויתעורר פעם בכמה זמן עם cron או יטפל בבקשות HTTP. זה הקוד ב main.ts:

import { createOpenAICompatible } from "npm:@ai-sdk/openai-compatible";
import { generateText } from "npm:ai";
const aiRunner = createOpenAICompatible({
  name:  "ai",
  baseURL: Deno.env.get("AI_RUNNER_URL")!,
});

const model = aiRunner(Deno.env.get("AI_RUNNER_MODEL")!);

export const askLocalLLMQuestion = async (
  input: string,
) => {
  const { text } = await generateText({
    model,
    prompt: input,
    maxRetries: 0,
  });

  return text;
};

const input = `Tell me a story about your grandmother.`;

const localLLMResult =
  await askLocalLLMQuestion(input);

console.log(localLLMResult);

שימו לב לשני משתני סביבה חשובים: המשתנה AI_RUNNER_MODEL מחזיק את המודל והמשתנה AI_RUNNER_URL מחזיק את ה URL לגישה למערכת ה LLM. שניהם הגיעו מדוקר מהקובץ docker-compose.yml.

3. הקובץ docker-compose.yml

תחנה אחרונה בדוגמה היא הקובץ docker-compose.yml וזה תוכנו:

services:
  chat:
    build: ./agent
    depends_on:
      - ai_runner

  ai_runner:
    provider:
      type: model
      options:
        model: ai/smollm2

מאוד קצר ולדעתי קסום:

  1. הקובץ מגדיר את הסוכן ואת ה LLM המקומי ומחבר ביניהם.

  2. כל מה שצריך בשביל לבחור LLM אחר זה לשנות את שם המודל. כל השאר מגיע ליישום אוטומטית דרך משתני הסביבה.

  3. דוקר דואג לבד להריץ את המודל ולשתף אותו בין היישומים שצריכים גישה.

  4. ה LLM נגיש רק מתוך דוקר.

  5. כאן אפשר למצוא רשימה של מודלים שנתמכים ב Docker ותוכלו להריץ:

https://hub.docker.com/u/ai