الأدلة
نصوص الفيديو لـ RAG ونماذج LLM
حوّل فيديوهات YouTube وTikTok إلى كتل يستطيع نموذج لغوي البحث فيها والاستشهاد بها: اجلب المقاطع الزمنية، وقسّمها حسب الزمن، واحتفظ بروابط الطوابع الزمنية.
آخر تحديث
باختصار: اجلب النص بصيغة JSON لا كنص عادي. تحمل المصفوفة segments وقتَي بداية ونهاية لكل سطر ترجمة، فيمكنك التقسيم حسب الزمن وتخزين وقت البداية كبيانات وصفية. وهكذا يمكن لكل إجابة يقدّمها نموذجك أن ترتبط باللحظة الدقيقة في الفيديو.
لماذا تتفوق المقاطع الزمنية على النص العادي#
- الاستشهاد: الكتلة التي تعرف أنها تبدأ عند 754 ثانية تتحول إلى رابط يقود إلى تلك اللحظة.
- حدود طبيعية: تنتهي أسطر الترجمة عند فترات التوقف، لذلك نادرًا ما تقطع الكتل جملة إلى نصفين.
- المصدر: يخبرك
source_originبما إذا كان النص من صانع المحتوى، أو من الترجمات التلقائية للمنصة، أو من التفريغ بالذكاء الاصطناعي، ويحدّدlanguageلغته.
الجلب والتقسيم#
يجلب هذا المثال نصًا واحدًا، ويجمع المقاطع في نوافذ بطول دقيقة تقريبًا. وتُوثَّق بنية JSON الخاصة بالنص في مرجع API.
rag_ingest.py
import requestsAPI = "https://www.transcriptdock.com"H = {"Authorization": "Bearer td_live_YOUR_KEY"}def transcript(url: str) -> dict:job = requests.post(f"{API}/v1/jobs", headers={**H, "Idempotency-Key": f"rag-{url}"[:128]},json={"source": {"url": url}, "mode": "captions_only"}).json()while job["status"] not in ("succeeded", "failed", "cancelled"):job = requests.get(f"{API}/v1/jobs/{job['id']}", params={"wait": 25}, headers=H).json()if job["status"] != "succeeded":raise RuntimeError(job["error"]["code"])return requests.get(f"{API}/v1/transcripts/{job['result_id']}", headers=H).json()def chunks(t: dict, seconds: float = 60.0):"""Group caption segments into windows of about `seconds`, never splitting a segment."""url = t["source"]["canonical_url"]buf, start = [], Nonefor seg in t["segments"]:if start is None:start = seg["start"]buf.append(seg["text"])if seg["end"] - start >= seconds:yield {"text": " ".join(buf), "start": start, "url": f"{url}&t={int(start)}s" if "youtube" in url else url}buf, start = [], Noneif buf:yield {"text": " ".join(buf), "start": start, "url": url}t = transcript("https://www.youtube.com/watch?v=dQw4w9WgXcQ")for c in chunks(t):print(c["start"], c["url"], c["text"][:80]) # embed c["text"], store start and url as metadata
فيديوهات كثيرة#
- اعثر على الفيديوهات عبر اكتشاف الفيديوهات: بحث في YouTube، أو قناة، أو قائمة تشغيل، أو ملف TikTok شخصي.
- أرسلها كـدفعة، ودع Webhook يُعلم أداة الإدخال لديك عند انتهاء كل مهمة، بدل الاستعلام المتكرر.
- إعادة قراءة النص وتصديره مجانية، وإرسال رابط سبق تفريغه يُعيد النتيجة المخزّنة، لذا لا تُحتسب إعادة تشغيل عملية الإدخال مرتين.
وكلاء يجلبون عند الطلب#
ليست كل خطوط المعالجة بحاجة إلى فهرس. يستطيع وكيل متصل بـخادم MCP الخاص بـ Transcript Dock أن يستدعي get_video_transcript عندما يذكر المستخدم فيديو، ثم يقرأ النص مباشرة داخل سياقه. وللأطر، انظر LangChain وn8n.