תוכן
הפכו סרטון YouTube למאמר שאפשר לפרסם
קחו תמלול עם חותמות זמן, עצבו אותו לבלוקים קריאים, הכינו שלד וטיוטה עם מודל שאתם שולטים בו והשאירו את התוצאה ב-LiveDoc לבדיקה.
העתיקו את הפרומפט
החליפו את השדות בסוגריים מרובעים והדביקו ב-Claude Code, Codex או AI עם גישה לטרמינל. הוא מתקין את סקיל Felo, שואל לפני שריפת קרדיטים ומריץ את תהליך העבודה.
הפוך את הסרטון הזה למאמר שניתן לפרסם: [URL של YouTube או מזהה סרטון]. קהל: [קוראים]. טון: [סגנון פרסום]. אורך יעד: [800–1200 מילים] ב[שפה]. טיפול במקורות: שמור את כותרת הסרטון, הערוץ וה-URL. צטט לכל היותר קטעים קצרים, עם חותמות זמן. הפק: 1. כותרת עבודה. 2. פסקת פתיחה. 3. פרקים עם פסקאות קצרות. 4. שניים או שלושה ציטוטים עם חותמות זמן. 5. מה הסרטון לא כיסה. 6. רשימת מקורות עם הסרטון והעמודים המקושרים. כללים: - אל תשחזר את התמלול המלא. סכם וצטט בקצרה. - כל טענה עובדתית מהסרטון צריכה חותמת זמן; טענות מעמודים מקושרים צריכות URL. - סמן כ„לא מאומת” כל מה שלא ניתן לבדוק. - שאל לפני שימוש בקרדיטים בתמלול או בחילוץ עמודים. - אל תפרסם, תזמן או תשלח דבר. - כתוב את התוצאה ל-./video-article.md וסכם אותה בצ׳אט.
ההעתקה כוללת גם שלבי התקנה וכללי בטיחות.
מה מקבלים
פלט לדוגמה של ריצה אחת. לא יצירה חיה.
מה באמת אמר הרצאה של 40 דקות על סוכנים
פסקת פתיחה
הדמו היה מרשים; החלק השימושי היה טיפול בכשלים.
הטענה שכולם ציטטו
> „הסוכן לא נעשה חכם יותר. רק הפסקנו לתת לו לנסות שוב בלי תקציב.” — [12:40]
מה הווידאו לא כיסה
עלות לכל משימה מוצלחת, ומה קורה כשהמקור שאוחזר שגוי.
מקורות
- וידאו: https://www.youtube.com/watch?v=...
- בנצ'מרק מקושר: https://example.com/benchmark
הקריאות המדויקות
למפתחים: אותו תהליך עבודה כקוד, לפי סדר ההרצה.
הצג קריאות API אמיתיות
קחו תמלול עם חותמות זמן
השתמשו ב-YouTube Subtitling לכתוביות בשפת היעד ושמרו התחלה ומשך לכל שורה.
article.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type Transcript = { data: { title: string; contents: { text: string; start: number; duration: number }[]; }; }; export async function fetchTranscript(videoId: string, language = "en") { const query = new URLSearchParams({ video_code: videoId, language, with_time: "true", }); const { data } = await felo<Transcript>(`/v2/youtube/subtitling?${query}`); if (data.contents.length === 0) throw new Error("This video has no subtitles"); return data; }פלט לדוגמה
{ "title": "How we rebuilt onboarding", "contents": [ { "text": "Welcome back to the channel.", "start": 0.32, "duration": 4.1 } ] }עצבו לבלוקים קריאים
חלקו לפי נושא, הסירו מילות מילוי ושמרו חותמות זמן.
article.ts const toClock = (seconds: number) => { const minutes = Math.floor(seconds / 60); const rest = Math.floor(seconds % 60); return `${String(minutes).padStart(2, "0")}:${String(rest).padStart(2, "0")}`; }; export function toBlocks( contents: Transcript["data"]["contents"], window = 60, ) { const grouped = new Map<number, string[]>(); for (const line of contents) { const bucket = Math.floor(line.start / window) * window; grouped.set(bucket, [...(grouped.get(bucket) ?? []), line.text.trim()]); } return [...grouped] .map(([start, lines]) => `[${toClock(start)}] ${lines.join(" ")}`) .join("\n\n"); }פלט לדוגמה
[00:00] Welcome back to the channel. Today we are talking about onboarding. [01:00] The first thing we changed was the welcome screen.
השיגו את המקורות המצוטטים
עם Web Fetch קראו את העמודים הנזכרים בסרטון והוסיפו קישורים ועובדות.
article.ts type ExtractData = { data: { content: string } }; export async function fetchSources(urls: string[]) { return Promise.all( urls.slice(0, 5).map(async (url) => { const page = await felo<ExtractData>("/v2/web/extract", { url, output_format: "markdown", with_readability: true, }); return { url, content: page.data.content }; }), ); }פלט לדוגמה
[ { "url": "https://example.com/reference", "content": "# Reference\n\nExtracted page text…" } ]שלד ואז טיוטה
בקשו קודם שלד מ-Model API ואז כתבו את המאמר לפי השלד עם ציטוטים קצרים וחותמות זמן.
article.ts const MODEL_API = "https://openapi.felo.ai/api/v1"; type Completion = { choices: { message: { content: string } }[]; usage: { prompt_tokens: number; completion_tokens: number; total_tokens: number }; }; async function complete(model: string, prompt: string): Promise<Completion> { const res = await fetch(`${MODEL_API}/chat/completions`, { method: "POST", headers, body: JSON.stringify({ model, messages: [{ role: "user", content: prompt }] }), }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<Completion>; } export async function draftArticle(title: string, transcript: string) { const outline = await complete( "claude-haiku-5-5", "Outline a short article from this transcript. Return only headings.\n\n" + transcript, ); const article = await complete( "claude-sonnet-5-5", `Write the article "${title}" from the transcript. Follow the outline and keep [mm:ss] on direct quotes.\n\nOutline:\n${outline.choices[0].message.content}\n\nTranscript:\n${transcript}`, ); return { outline: outline.choices[0].message.content, article: article.choices[0].message.content, usage: article.usage, }; }פלט לדוגמה
{ "outline": "1. The problem\n2. What changed\n3. What we learned", "article": "## The problem\n\nWhen we…", "usage": { "prompt_tokens": 4120, "completion_tokens": 640, "total_tokens": 4760 } }השאירו ב-LiveDoc לבדיקה
שמרו טיוטה וציטוטים ב-LiveDoc ומסרו לעורך לתיקון ואישור.
article.ts type LiveDocData = { data: { short_id: string } }; type ResourceData = { data: { id: string } }; export async function saveDraft( title: string, result: { outline: string; article: string }, ) { const doc = await felo<LiveDocData>("/v2/livedocs", { name: `Article draft: ${title}`, description: "Draft generated from a video transcript", }); await felo<ResourceData>(`/v2/livedocs/${doc.data.short_id}/resources/doc`, { title: "Draft", content: result.article, }); await felo<ResourceData>(`/v2/livedocs/${doc.data.short_id}/resources/doc`, { title: "Outline", content: result.outline, }); return doc.data.short_id; }פלט לדוגמה
{ "short_id": "PvyKouzJirXjFdst4uKRK3" }
מה כלול
- תמלול YouTube עם חותמות זמן
- העמודים שהסרטון מצטט כ-Markdown
- שלד וטיוטה מ-Model API
- LiveDoc עם הטיוטה לבדיקה
מה זה לא עושה
- בלי להעתיק את כל התמלול; רק ציטוטים קצרים וניסוח מחדש
- הסרטון חייב כתוביות
- בדקו זכויות ומגבלת ציטוט לפני פרסום
- המודל עושה שלד וטיוטה; ההחלטה הסופית לעורך
- לא מפרסם או מתרגם אוטומטית
שאלות
האם הסרטון חייב כתוביות?
כן. התהליך מתחיל בכתוביות; אם אין, הוא עוצר במקום לנחש מה נאמר.
אפשר להפוך פודקאסט למאמר?
התהליך הזה ל-YouTube. לפודקאסט הכינו קודם תמלול והשתמשו באותם כללי כתיבה.
אפשר לכתוב בשפה אחרת?
כן. ציינו את שפת היעד; הציטוטים נשארים בשפת המקור עם תרגום כשצריך.
מי כותב את המאמר?
סוכן ה-AI שאתם מדביקים בו את הפרומפט כותב את הטיוטה; Felo מספק תמלול, עמודים ומקום בדיקה.
אפשר לפרסם שוב את כל התמלול?
לא. התהליך יוצר מאמר חדש עם ציטוטים קצרים ולא מעתיק את כל התמלול.
כמה עולה ריצה אחת?
תמלול וחילוץ עמודים מחויבים לפי שימוש; התעריפים העדכניים בעמוד המחירים והפרומפט מבקש אישור לפני הוצאה.
תהליכי עבודה קשורים
פרסמו סיכום חדשות AI יומי שהצוות באמת קורא
קבלו סיכום עם מקורות, הוסיפו דיוני מתרגלים ב-X, קחו תמלול וידאו, הרכיבו מהדורה ב-Markdown וארכבו ב-LiveDoc.
פתח תהליך עבודהמשרדהפכו עמוד מחקר למצגת
חלצו את העמוד, שמרו כהקשר LiveDoc, תנו ל-PPT Task API לבנות את המצגת ושאלו עד שהקישור מוכן.
פתח תהליך עבודהתמיכהענו על שאלות תמיכה מהתיעוד שלכם
צרו LiveDoc, טענו מרכז עזרה ו-runbook פנימי, אחזרו את הקטעים שעונים לפנייה ותנו למודל לענות רק מהראיות האלה.
פתח תהליך עבודההתאימו
אותו מתכון, מותאם לאיך שאתם באמת מספקים.
רק ציטוטים עם חותמות זמן
אל תכתבו מאמר; מסרו רשימת ציטוטים ניתנים לבדיקה לשימוש חוזר.
קודם גרסת ניוזלטר
קצרו את המאמר והפכו אותו ליותר שיחתי לניוזלטר.
עבדו ערוץ בקבוצה
חזרו על השלבים לכל סרטון ושמרו LiveDocs נפרדים.
המשיכו
עמודי העזר שמאחורי המתכון והשלבים הבאים.