HomeBlogTranscribePlansAPI Keys

LangChain YouTube Transkription Latausohjelma, joka selviytyy tuotannosta

LangChain-putki, joka muuttaa YouTube-videon Document-objekteiksi ja yhteenveto-ketjuksi

Jokainen LangChain YouTube-transkriptio-opetusohjelma näyttää samat kolme riviä: YoutubeLoader.from_youtube_url(), lataa, valmis. Sitten otat sen pilvipalvelimelle ja se hiljan palauttaa mitään. Alla on latausohjelma, joka palauttaa oikeat Document-objektit isännöidystä API:sta — noin 20 riviä, sekä yhteenveto-ketju sen todistamiseksi, että se toimii pää päähän.

Miksi sisäänrakennettu YoutubeLoader kuolee palvelimissa

YoutubeLoader ei kutsua virallista API:ta. Se kaavitsee YouTuben sisäisiä kuvateksti-päätepisteitä mistä tahansa koneesta, jolla koodisi ajaa. Asuntoverkon IP:sta se enimmäkseen toimii. AWS:n, GCP:n tai Hetznerin IP:sta se estetään tai saa tyhjiä vastauksia, koska YouTube käsittelee datakeskus-liikennettä botti-liikenteenä. Kirjoitin yksityiskohtaiset tiedot kohdassa miksi YouTube-transkription kaavinta rikkoutuu pilvi-IP:issa — lyhyt versio on, että vika on ympäristö, joten se läpäisee jokaisen paikallisen testin ja kuolee tarkalleen siihen paikkaan, joissa se on tärkeä.

youtube2text.org tekee hakemisen sen puolella ja antaa sinulle JSON:n, mikä muuttaa latausohjelmalasi tavalliseksi HTTP-kutsuksi.

Latausohjelma

import requests
from langchain_core.documents import Document

API_KEY = "yt_your_key_here"

def load_youtube_transcript(url: str, max_chars: int = 150000) -> Document:
    resp = requests.get(
        "https://youtube2text.org/api/transcribe",
        params={"url": url, "maxChars": max_chars},
        headers={"x-api-key": API_KEY},
        timeout=90,
    )
    resp.raise_for_status()
    r = resp.json()["result"]
    return Document(
        page_content=r["content"],
        metadata={
            "videoId": r["videoId"],
            "title": r["title"],
            "pubDate": r["pubDate"],
            "source": url,
        },
    )

API palauttaa videoId, title, pubDate, content, contentSize ja truncated lipun. Transkriptio teksti menee page_content:iin, kaikki muu metatieto — tarkalleen muoto, jonka alavirtaan ketjut ja vektorikaupat odottavat.

Ei vielä avainta? Hanki jaettu demonäppäin:

curl https://youtube2text.org/api/demo-key

Se on rajoitettu 5 videoon kuukaudessa per IP, mikä riittää latausohjelman testaamiseen.

Yhteenveto-ketju

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain

llm = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template(
    "Summarize this video transcript in five bullet points:\n\n{context}"
)
chain = create_stuff_documents_chain(llm, prompt)

doc = load_youtube_transcript("https://www.youtube.com/watch?v=dQw4w9WgXcQ")
print(chain.invoke({"context": [doc]}))

create_stuff_documents_chain pakkaa koko transkription yhdeksi kehotteeksi, mikä toimii, koska maxChars kattaa kuorman 150 000 merkillä oletuksena. Tunnitunteiden podcast-ohjelmille pienemmillä konteksti-malleilla, välitä pienempi maxChars latausohjelmaasi tai vaihda kartta-vähennys-kuvioon.

Mitä käsitellä todellisessa koodissa

Kaksi vikaantumistilaa ovat arvokkaita saada selvästi. Video, jolla kuvatekstit ovat poistetaan käytöstä, palauttaa HTTP 404 virheellä TRANSCRIPT_UNAVAILABLE — mikään uudelleenyritys tai kirjasto vaihto korjaa sitä, teksti yksinkertaisesti ei ole olemassa. Ja RATE_LIMIT_EXCEEDED (429) sisältää retryAfterSeconds virhe JSON:ssa, joten lue se ja taakse pois sen sijaan, että vasaraa:

if resp.status_code == 429:
    wait = resp.json()["error"].get("retryAfterSeconds", 60)

Yksi rehellinen rajoitus: content on tavallinen teksti ilman aikaleimiä. Se on kunnossa yhteenvedolle ja hakemiselle, mutta jos tarvitset "hyppää 12:34" syvät linkit, sinun on oltava tyytyväinen videon tason attribuutioon videoId:n kautta metatieto.

Mihin mennä täältä

Samat Document-objektit pudottavat suoraan vektorikauppaan — käyn läpi täydellisen putken kohdassa RAG koko YouTube-kanavan yli. Jos pinoosi on LlamaIndex kuin LangChain, vastaava asennus on yhtä lyhyt.

Kun demonäppäimen 5 videota lakkaa olemasta riittävä, hanki oma avaimesi — ilmainen taso sisältyy, maksulliset paketit 5,99 dollarista 50 videolla kuukaudessa.