HomeBlogTranscribePlansAPI Keys

LlamaIndex YouTube Transkriptiot: Kysy video-sarjalta

LlamaIndex-vektoriindeksi, joka rakennetaan useista YouTube-videon transkriptioista, jotka vastaavat kysymykseen

LlamaIndex YouTube-transkription putki on kolme vaihetta: hae transkriptiot Document-objekteiksi, rakenna VectorStoreIndex, kysy kysymyksiä kaikista videoista kerralla. Tässä on koko asia yhdessä skriptissä, sekä yksi chunking-sudenkuoppa, joka tuhoaa useimmat ensimmäiset yritykset.

Hae transkriptiot Document-objekteiksi

Ajon youtube2text.org, REST API, joka palauttaa YouTube transkriptiot JSON:na — ei kaavintaa omasta IP:stäsi, mikä on tärkeä, kun tämä ajaa missä tahansa muualla kuin kannettavallasi (katso miksi paikalliset kaavijat päätetään, jos olet utelias). Yksi 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"]},
    ))

Avainta varten, kirjaudu Googlella youtube2text.org/app/keys, tai vedä jaettu demonäppäin GET https://youtube2text.org/api/demo-key (5 videota/kuukausi per IP — kunnossa tälle kolme-video esimerkkiin, ei kanavalle).

Chunking sudenkuoppa: automaatti-kuvatekstit eivät ole välimerkeillä

LlamaIndex:n oletussolmun jäsentäjä on SentenceSplitter, joka löytää chunk-rajat lauseiden loppujen kohdalla. Manuaalisesti ladatut kuvatekstit ovat olemassa. Automaattisesti luodut kuvatekstit usein eivät — saat neljäkymmentä minuuttia pieniä kirjaimia teksti ilman pisteitä, SentenceSplitter ei löydä mitään jakaa, ja päädyt paksunksi, hankalaksi chunkkeiksi.

Token-pohjainen jakaminen sivuuttaa ongelman kokonaan:

from llama_index.core.node_parser import TokenTextSplitter

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

512 tunnistetta 64 päällekkäisyydellä on ollut makeapiste testauksessani: tarpeeksi iso, että chunk kantaa täydellinen ajatus, tarpeeksi pieni, että haku pysyy tarkka.

Rakenna indeksi ja kysy se

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"]})')

Koska jokainen Document kantaa videoId ja title metatieto, jokainen haettu chunk tietää mihin videoon se tuli — source_nodes antaa sinulle työskentelyn linkkejä takaisin lähteihin. Tämä käyttää mitä tahansa upotus-mallia ja LLM, jonka olet konfiguroinut Settings:ssä; OpenAI-oletusasennus toimii laatikoista, jos OPENAI_API_KEY on asetettu.

Rajoitus, jonka sinun tulisi tietää

API palauttaa transkriptiot tavallisena tekstinä ilman aikaleimoja, joten sitatäsi ratkeavat videoksi, ei hetken sisällä. "Tämä vaatimus tuli Q3-tulosten hajoitusvideoista" on saavutettavaa; "klo 14:32" ei. Useimmissa Q&A-käyttötapauksissa videon tason attribuutio on riittävä, ja rehellisesti, chunk-teksti sekä video linkki saa ihmisen oikeaan paikkaan minuutin alle.

Huomaa myös kaksi virhe-koodia, joiden arvoisesti käsitellä fetch-silmukassa: TRANSCRIPT_UNAVAILABLE (404, videolla ei ole kuvatekstejä — ohita se) ja RATE_LIMIT_EXCEEDED (429, tulee retryAfterSeconds virhe runko).

Skaalaus mennessä muutaman videon yli

Kolme videota on demo. Koko kanavalle haluat RSS-syötteen videohakemiseen, kiintiö-tietoiseen hakemiseen ja pysyvään vektorikauppaan — katso tämä putki kohdassa RAG YouTube-kanavan yli. LangChain-käyttäjä sen sijaan? Sama lataus-kuvio, eri kehys.

Ilmainen taso kattaa 5 videota kuukaudessa; pro-suunnitelma tekee 500:n 9,99 dollarilla, mikä indeksoi mukavasti useimmat kanavat. Avaimet youtube2text.org/app/keys.