Profile
איך בניתי AI לבלוג בלי ללמוד את כל התחום מאפס
Published on

איך בניתי AI לבלוג בלי ללמוד את כל התחום מאפס

Authors
תמונה מייצגת של הצ׳אט

מה זה RAG?

כשחושבים על AI Chat, הרבה פעמים מגיעים למושג RAG, שבגדול מאפשר לנו לקחת את ChatGPT הכללי, שיודע לענות לנו תשובות ממרחבי האינטרנט, ולמקד אותו בתוכן מסוים. דוגמא טובה היא שירות לקוחות או תיעוד, למשל בשרת הדיסקורד של n8n יש בוט שעונה על שאלות טכניות, כי הזינו אליו את התוכן המקצועי של n8n, וזה מאוד נוח. אז אם אני רוצה בוט שייצג אותי ו/או את הבלוג שלי, נראה שRAG זה מה שאני צריך.

מה זה n8n

את n8n הזכרתי בפוסטים קודמים (פוסט על self hosted), מדובר בכלי ממש טוב לפיתוח אוטומציות No Code, פשוט תראו בתמונה, אני מחבר כל מיני כלים אחד לשני, לוקח פלט מאחד ומשתמש בו כקלט לשני, הכל בקלות ובממשק נוח מאוד. הכלי הזה נהיה עכשיו מדובר מאוד בגלל שהם הוסיפו רכיבים שממש ממש מאפשרים להתממשק עם AI מאוד בקלות, זה מדהים.

תמונה של n8n workflow

אז מה בעצם עשיתי?

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

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

אז גם עבור RAG, לקחתי תבנית שיחסית קרובה למה שאני מחפש (זאת למשל פשוטה וטובה), והתחלתי לשפר אותה. מהפסקה הקודמת אני יודע שצריך ״מסד נתונים וקטורי״. אלו מילים, הכל בסדר. בתבנית הנוכחית משתמשים במונגו אטלס. עולה כסף נראה לי, והוא גם בענן, נראה רגע מה יש, הנה יש פה אלטרנטיבה בשם Qdrant, בודק, הם נותנים docker compose שמכיל שירות אחד בלבד שפשוט צריך להעתיק ולהדביק, אז למה לא.

צריך גם להגדיר גודל וקטור, שאלתי את ג׳מיני, הוא אמר שזה תלוי במודל, אז אמרתי לו באיזה מודל אני משתמש והוא אמר לי מה גודל הוקטור. האם זה אופטימלי? לא יודע.

מכאן, משכתי את הפוסטים של הבלוג, ששמורים בסופו של דבר בGitHub (יש קישור למקור בתחתית של כל פוסט). (ניסיתי לחלץ מהם את המידע שמופיע בפורמט frontmatter, וזה התחיל להסתבך כי בגלל שזה No Code הייתי צריך להשתמש בAI כדי לחלץ מידע, ובסוף הבנתי שאני עושה אופטימיזציות כשבכלל אני לא יודע אם זה עובד ואם זה נדרש).

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

אבטחה

אז הצ׳אט עובד, אבל אני לא רוצה לפרסם אותו. כל המערכת הזאת רצה אצלי, כלומר, אני משלם על הפנייה לOpen AI, ואני לא רוצה לשים את הממשק הזה במקום ציבורי שבו כל אחד פשוט יכול לדבר עם Open AI על חשבוני. כתבתי על זה פוסט בלינקדאין כדי לפתוח את המחשבה ולקבל רעיונות, והבנתי שלהגיע ל100% שליטה יהיה לי מאוד קשה, אבל עם כמה טריקים פשוטים אני יכול להגביל את השימוש בצורה מספיק טובה כדי להפחית את הסיכוי לשימוש זדוני או זליגת כסף.

  1. הוראות הגבלה. מתברר שהוספה של משפט אחד בהוראות של המנוע שלא להמשיך את השיחה אם היא לא קשורה לנושא הבלוג, עובד ברוב המקרים.
  2. זכרון קצר. מכיוון שאני לא מצפה לניהול שיחה עם הצ׳אט, אלא לבקשות מידע קצרות, אני נותן לצ׳אט היסטוריה מאוד קצרה של השיחה.
  3. הגבלת אורך הקלט ואורך הפלט כדי לחסוך בתשלום.
  4. (רציתי גם לממש rate limit אבל החלטתי לעצור)

מה בהמשך?

זה מאוד מגניב אז כמובן שהמוח משתולל, למשל:

  • להוסיף את הREADME של הפרויקטים שאני מתחזק, כדי לתת גם אותם למי שמתעניין
  • להוסיף עוד מידע על עצמי שיכול לעזור בשיחה ולהכווין יצירת קשרים
  • לשאול את המבקרים שאלות ולאסוף מידע על תחומי העניין שלהם
  • לאפשר להמשיך את השיחה באופן ידני, הייתי מאוד רוצה להתכתב עם אורחים בבלוג.
  • ממשק נוח לראות את השיחות שהיו, ו/או לנתח אותם ו/או לסכם אותם ו/או ללמוד איך לשפר את המנוע.
  • וכמובן, לעצב את הn8n chat הזה בצורה יותר נורמלית