הבעיה שזה פותר
מאמנים ומחנכים עונים כל יום על אותן שאלות בתגובות ובהודעות פרטיות, למרות שכבר כיסו אותן בסרטונים. הקהל לא מוצא את הסרטון הנכון, והיוצר לא יכול לתת תשובות אישיות בהיקף גדול. צ'אטבוט של הערוץ עונה בקול של היוצר ומחזיר צופים לתוכן המקורי.
מה לכלול בגרסה הראשונה
- תשובות שמבוססות רק על הסרטונים של היוצר עצמו
- ציטוטים שמקשרים לסרטון ולחותמת הזמן המדויקת
- עדכון אוטומטי כשסרטונים חדשים מתפרסמים
- מסלול חינמי עם מגבלת שאלות ומסלול בתשלום לחברים
- וידג'ט להטמעה באתר או בקהילה של היוצר
איך לבנות את זה, שלב אחר שלב
- 01
קלטו את הערוץ
המירו את הערוץ או פלייליסט נבחר ושלחו את כל מזהי הסרטונים ל-/batch עם format.paragraphs ו-format.timestamp.
- 02
חלקו וצרו embeddings
שמרו כל פסקה עם כותרת הסרטון, הכתובת וזמן ההתחלה שלה, וצרו embeddings במסד נתונים וקטורי.
- 03
שלפו וענו
לכל שאלה, שלפו את הפסקאות הרלוונטיות ביותר ובקשו מ-LLM לענות רק על סמך הן, עם ציטוט של הסרטון וחותמת הזמן.
- 04
הישארו מעודכנים
בדקו לפי לוח זמנים אם עלו לערוץ סרטונים חדשים והוסיפו לאינדקס רק את התמלולים החדשים.
קוד התחלתי
הרעיון הזה מבוסס על התבנית "מתכון 3: טעינת פלייליסט שלם למאגר ידע". החליפו בערוצים, בפרומפטים ובאחסון שלכם.
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DBאיך זה מרוויח כסף
גבו מהיוצר תשלום חודשי על הצ'אטבוט המתארח, או חלקו הכנסות ממסלול בתשלום שהוא מוכר לקהל שלו. קהילות מנויים ומוכרי קורסים יכולים לצרף אותו כהטבת פרימיום.
טעויות שכדאי להימנע מהן
- לתת למודל לענות מתוך ידע כללי: הגבילו אותו לקטעי התמלול שנשלפו כדי שיישמע כמו היוצר.
- שימוש בנתחים בגודל קבוע שחותכים משפטים באמצע: קיבוץ לפי פסקאות שומר על ההקשר.
- השקה בלי אישור היוצר: בנו את זה יחד עם היוצר, כי זה הקול והתוכן שלו.
שאלות על הרעיון הזה
אפשר לאמן צ'אטבוט על ערוץ YouTube?
כן. במקום לאמן מודל, שולפים קטעי תמלול רלוונטיים ונותנים ל-LLM לענות על סמך הם. השיטה הזו נקראת RAG, יצירה מועשרת באחזור.
איך גורמים לצ'אטבוט לצטט את המקורות שלו?
שמרו את כתובת הסרטון וזמן ההתחלה עם כל נתח תמלול, והנחו את המודל לכלול אותם בכל תשובה.
כמה עולה לאנדקס ערוץ שלם?
סרטונים עם כתוביות מקוריות עולים קרדיט אחד כל אחד. אינדוקס חד-פעמי של ערוץ עם 300 סרטונים עולה בערך 300 קרדיטים, ומשם והלאה רק ההעלאות החדשות.