HomeBlogTranscribePlansAPI Keys

Transkrip YouTube LlamaIndex: Tanyakan Serangkaian Video

Indeks vektor LlamaIndex yang dibangun dari beberapa transkrip video YouTube menjawab pertanyaan

Pipeline transkrip YouTube LlamaIndex adalah tiga langkah: ambil transkrip sebagai objek Document, bangun VectorStoreIndex, tanyakan pertanyaan di semua video sekaligus. Berikut adalah seluruh hal dalam satu skrip, ditambah satu gotcha chunking yang merusak sebagian besar upaya pertama.

Ambil transkrip sebagai Dokumen

Saya menjalankan youtube2text.org, REST API yang mengembalikan transkrip YouTube sebagai JSON — tidak ada scraping dari IP Anda sendiri, yang penting saat ini berjalan di mana pun selain laptop Anda (lihat mengapa scraper lokal diblokir jika Anda penasaran). Satu GET per video:

import requests
from llama_index.core import Document, VectorStoreIndex

API_KEY = "yt_your_key_here"

VIDEOS = [
    "https://www.youtube.com/watch?v=VIDEO_ID_1",
    "https://www.youtube.com/watch?v=VIDEO_ID_2",
    "https://www.youtube.com/watch?v=VIDEO_ID_3",
]

def fetch_transcript(url: str) -> dict:
    resp = requests.get(
        "https://youtube2text.org/api/transcribe",
        params={"url": url},
        headers={"x-api-key": API_KEY},
        timeout=90,
    )
    resp.raise_for_status()
    return resp.json()["result"]

docs = []
for url in VIDEOS:
    r = fetch_transcript(url)
    docs.append(Document(
        text=r["content"],
        metadata={"videoId": r["videoId"], "title": r["title"]},
    ))

Untuk kunci, masuk dengan Google di youtube2text.org/app/keys, atau tarik kunci demo bersama dari GET https://youtube2text.org/api/demo-key (5 video/bulan per IP — baik untuk contoh tiga video ini, tidak untuk channel).

Gotcha chunking: caption otomatis tidak memiliki tanda baca

Parser node default LlamaIndex adalah SentenceSplitter, yang menemukan batas chunk di akhir kalimat. Caption yang diunggah secara manual memiliki itu. Caption yang dihasilkan otomatis sering tidak — Anda mendapat empat puluh menit teks huruf kecil tanpa periode, SentenceSplitter menemukan tidak ada yang dipisahkan, dan Anda berakhir dengan chunk membengkak, canggung.

Pemisahan berbasis token menghindari masalah sepenuhnya:

from llama_index.core.node_parser import TokenTextSplitter

splitter = TokenTextSplitter(chunk_size=512, chunk_overlap=64)

512 token dengan 64 overlap telah menjadi sweet spot dalam pengujian saya: cukup besar sehingga chunk membawa pemikiran lengkap, cukup kecil sehingga pengambilan tetap presisi.

Bangun indeks dan kueri

index = VectorStoreIndex.from_documents(docs, transformations=[splitter])
query_engine = index.as_query_engine(similarity_top_k=4)

response = query_engine.query("What did they say about pricing changes?")
print(response)

for node in response.source_nodes:
    meta = node.metadata
    print(f'- {meta["title"]} (https://www.youtube.com/watch?v={meta["videoId"]})')

Karena setiap Document membawa videoId dan title dalam metadata, setiap chunk yang diambil mengetahui video mana itu berasal — source_nodes memberi Anda tautan kerja kembali ke sumber. Ini menggunakan model embedding dan LLM apa pun yang telah Anda konfigurasi di Settings; setup OpenAI default berfungsi langsung jika OPENAI_API_KEY diatur.

Batasan yang harus Anda ketahui

API mengembalikan transkrip sebagai teks biasa tanpa timestamp, jadi kutipan Anda menyelesaikan ke video, bukan saat di dalamnya. "Klaim ini berasal dari video breakdown Q3 earnings" dapat dicapai; "pada 14:32" tidak. Untuk sebagian besar kasus penggunaan Q&A atribusi tingkat video sudah cukup, dan jujur, teks chunk ditambah tautan video membawa manusia ke tempat yang tepat dalam waktu kurang dari satu menit.

Perhatikan juga dua kode kesalahan yang layak ditangani dalam loop fetch: TRANSCRIPT_UNAVAILABLE (404, video tidak memiliki caption — lewati) dan RATE_LIMIT_EXCEEDED (429, dilengkapi dengan retryAfterSeconds dalam badan kesalahan).

Penskalaan melampaui segelintir video

Tiga video adalah demo. Untuk seluruh channel Anda ingin feed RSS untuk penemuan video, pengambilan sadar kuota, dan toko vektor persisten — saya mencakup pipa itu dalam RAG di atas channel YouTube. Pengguna LangChain alih-alih? Pola pemuat yang sama, kerangka kerja berbeda.

Tingkat gratis mencakup 5 video per bulan; paket pro melakukan 500 untuk $9,99, yang dengan nyaman mengindeks sebagian besar channel. Kunci di youtube2text.org/app/keys.