Trin-for-trin: Bygning af en YouTube Research Agent med Claude Code
Hvis du nogensinde har brugt en eftermiddag på at fare vild i YouTube, kun for at glemme hvilke videoer der var værd at gemme, er du ikke alene. Forestil dig nu en utrættelig assistent, der hurtigt kan finde de bedste videoer, udtrække opsummeringer, hente vigtige citater, tidsstemplede indsigter og returnere kilder på forespørgsel. Det er præcis, hvad en YouTube research agent kan gøre. I denne trin-for-trin-guide vil vi bygge en praktisk YouTube research agent med Claude Code, designet til creators, analytikere, studerende og besatte studerende, der ønsker signal over støj.
Vi vil tage en praktisk og direkte rute: arkitektur, kode, prompts og sikkerhedsforanstaltninger. Undervejs vil vi træffe velovervejede valg, som du kan ændre senere. Til sidst vil du have en fungerende agent, der kan søge på YouTube, indsamle transskriptioner, ræsonnere på tværs af flere videoer og producere rene research briefs.
Hvad vi bygger (og hvorfor det er vigtigt)
- Mål: En YouTube research agent, der kan:
- Søge på YouTube efter forespørgsel
- Rangkere resultater efter relevans/engagement
- Hente transskriptioner (automatiske undertekster eller tredjeparts)
- Opdele og indlejre indhold til hentning
- Bruge Claude Code til at syntetisere indsigter fra flere videoer
- Output strukturerede noter: opsummering, påstande, tidsstempler, citater og kilder
- Primært nøgleord: "Building a YouTube research agent with Claude Code"
- Format: Trin-for-trin tutorial med eksekverbar kode og prompts
- Outputs: Markdown research brief + JSON til programmatisk brug
Hvorfor det er vigtigt: YouTube er den største offentlige vidensbase af foredrag, lektioner, demoer og debatter. Men det larmer. At bygge en YouTube research agent med Claude Code giver dig en fordel: du kan samle indsigter på tværs af snesevis af videoer på få minutter, ikke timer.
Arkitektur i et overblik
Vi holder den første version enkel og robust.
- Inputs: en research-forespørgsel (f.eks. "LLM agent architectures 2025"), valgfrie begrænsninger (datointerval, kanal, varighed)
- YouTube Search: YouTube Data API v3 (eller SerpAPI fallback)
- Transskriptioner: YouTube Transcript API; fallback til ASR (f.eks. Whisper), når det ikke er tilgængeligt
- Chunking: Sætningsbevidst segmentering (ca. 800–1.200 tokens)
- Embeddings: Brug en lokal eller hosted embedding model (f.eks.
text-embedding-3-large, nomic-embed-text eller bge-large)
- Vector Store: Lokal
FAISS for hastighed; kan skiftes til Pinecone, Weaviate eller Qdrant
- Reasoning: Claude Code til orkestrering, værktøjsbrug, syntese og kodeudførelse inde i en kontrolleret loop
- Outputs: Markdown rapport + JSON indeks med citater, tidsstempler og scores
Data flow: Query → Search → Fetch metadata → Transcript → Chunk → Embed → Retrieve top‑K → Claude Code synthesis → Report.
Forudsætninger og opsætning
- API keys:
YOUTUBE_API_KEY, ANTHROPIC_API_KEY (for Claude Code)
- Optional:
OPENAI_API_KEY eller lokale embeddings
google-api-python-client, youtube-transcript-api
faiss-cpu, numpy, pandas, tiktoken (eller sentencepiece)
requests, pydantic, tenacity
pip install google-api-python-client youtube-transcript-api faiss-cpu numpy pandas requests pydantic tenacity anthropic tiktoken
Environment variables:
export YOUTUBE_API_KEY=YOUR_YT_KEY
export ANTHROPIC_API_KEY=YOUR_ANTHROPIC_KEY
Trin 1: YouTube-søgning med filtre
Vi søger på YouTube og returnerer strukturerede metadata: titel, kanal, udgivelsesdato, varighed, visninger (hvis tilgængelig) og videoId.
# file: yt_search.py
from googleapiclient.discovery import build
import os
YOUTUBE_API_KEY = os.environ — channel, date\n\n"
"---\n"
"JSON schema: {\"claims\":[{\"claim\":str,\"support\":[{\"video_id\":str,\"start\":float,\"end\":float}]}]}\n"
)
def call_claude(goal: str, passages: list[dict]):
passages_str = "\n\n".join(
f"[rank {p['rank']} | score {p['score']:.3f}] (vID={p.get('video_id','?')}, {p.get('start',0):.1f}-{p.get('end',0):.1f})\n{p['text']}"
for p in passages
)
msg = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=1800,
temperature=0.2,
system=SYSTEM_PROMPT,
messages=[
{"role": "user", "content": USER_TEMPLATE.format(goal=goal, passages=passages_str)}
])
return msg.content[0].text
Prompt tips når du bygger en YouTube research agent med Claude Code:
- Bed om strukturerede outputs i både menneskeligt læsbare og maskinelt læsbare formater
- Gennemtving tidsstemplede citater
- Tilskynd til usikkerhedsdisclosures og modsigelser
Trin 6: Sætter det hele sammen
Lad os forbinde query → search → transcripts → chunks → embeddings → retrieve → synthesize.
# file: run_agent.py
from yt_search import search_youtube
from transcripts import fetch_transcript
from chunking import transcript_to_docs
from embeddings import VectorStore
from orchestrator import call_claude
from datetime import datetime
def build_corpus(query: str, max_videos=8):
results = search_youtube(query, max_results=max_videos)
corpus_docs = []
for r in results:
tx = fetch_transcript(r["video_id"]) or []
if not tx:
continue
docs = transcript_to_docs(tx)
for d in docs:
d.update({
"video_id": r["video_id"],
"title": r["title"],
"channel": r["channel"],
"url": r["url"],
})
corpus_docs.extend(docs)
return corpus_docs
def research(query: str, k=12):
corpus = build_corpus(query)
if not corpus:
return "No transcripts available."
vs = VectorStore
vs.add(corpus)
passages = vs.search(query, k=k)
md = call_claude(query, passages)
timestamp = datetime.utcnow.isoformat
return f"<!-- generated {timestamp} UTC -->\n\n" + md
if __name__ == "__main__":
print(research("LLM agents for YouTube research"))
Denne baseline-version af en YouTube research agent med Claude Code vil søge, hente og syntetisere indsigter fra flere videoer med citater. Opgrader embeddings og tilføj caching for at gøre den klar til produktion.
Syv opgraderinger for at gøre den fantastisk
- Bedre embeddings og hybrid søgning
- Udskift med embeddings af høj kvalitet, og tilføj BM25-nøgleordssøgning. Hybrid giver mere recall på nichetermer og bedre præcision på abstrakte emner.
- Udvid værktøjer for rigere metadata
- Hent kommentarer, likes/dislikes ratio og kanalautoritet. Tilføj en re-ranker (cross-encoder) for top 100 kandidater.
- Multi-turn research planning
- Brug Claude Code til at foreslå en research-plan: underspørgsmål, hypoteser og dækningskontroller. Udfør iterativt, indtil dækningstærsklerne er opfyldt.
- Evidence tracking og counter-evidence
- Log understøttende og modstridende uddrag for hver påstand. Præsenter begge i rapporter; tilføj confidence scores.
- Brug scenedetektering via undertekster eller Whisper word timings. Opsummer pr. sektion før global syntese for at undgå kontekstfortynding.
- Gem transskriptioner, embeddings og rapporter pr. forespørgsel. Genbrug, når brugerne justerer filtre. Tilføj deduplikering efter video-ID.
- Eksportformater og levering
- Eksporter Markdown, PDF og JSON. E-mail eller Slack levering. Gengiv tidsstempler som klikbare
?t=mmss links.
Prompts du kan genbruge
Brug disse skabeloner, mens du bygger en YouTube research agent med Claude Code.
System: Du er en omhyggelig research agent. Syntetiser på tværs af flere YouTube-transskriptioner. Citer inline med [vID @ mm:ss], og inkluder en Sources-sektion med URL'er. Returner både en Markdown brief og en JSON payload af påstande med tidsstemplet support.
User: Research goal: {topic}
Constraints: focus on {audience or scope}; prefer sources within {date range}; include disagreements.
Candidate passages (ranked):
{retrieved_passages}
Output: Summary → Key Insights (bullets) → Notable Quotes (with timestamps) → Contradictions & Gaps → Sources. Then JSON {"claims": ...}
Guardrails og etik
- Respekter creators rettigheder: Link til de originale videoer, og undgå at offentliggøre store ordrette transskriptioner.
- Vær gennemsigtig: Vis, hvor påstande kommer fra ved hjælp af tidsstempler og video-ID'er.
- Undgå over-summarisering: Bevar nuance; flag, når billedtekster er automatisk genereret og sandsynligvis støjende.
- Håndter følsomme emner omhyggeligt: Fremhæv usikkerhed, og søg forskellige kilder.
Fejlfinding: Almindelige problemer og rettelser
- "Ingen transskription fundet"
- Fallback til Whisper; prøv forskellige sprog; tjek om videoen er region-blokeret.
- Opgrader embeddings; tilføj BM25; øg chunk overlap; parameter-tune top-K.
- Gennemtving strengt citationsskema; straf ikke-understøttede påstande; kræv nøjagtige tidsstempler til stede i hentede chunks.
- Cache aggressivt; reducer
max_results; batch requests; tilføj back-off med tenacity.
- Opsummer pr. sektion; begræns max tokens; brug planlægningsprompts med eksplicit oversigt.
Måling af kvalitet
- Precision@K af hentede chunks vs. et mærket sæt
- Faithfulness rate: andel af påstande med verificerbar tidsstemplet support
- Coverage: antal unikke relevante videoer citeret
- Latency: tid fra query til report
Eksempel: Researching "Vector Databases Explained"
- Query: "vector databases explained for developers 2025"
- Filters: videos after 2023, duration 6–30 minutes
- Outcome: Agent cites 6 videos, highlights trade‑offs of HNSW vs. IVF‑PQ, discusses cost/recall, and links to benchmarks. Contradictions section compares vendor claims vs. open‑source results.
By the Way: Automating This Inside Your Workflow
If you work across docs and code, it’s worth automating the last mile. A small CLI can run nightly queries and drop Markdown briefs into your knowledge base. You can also wire it into issue templates for sprint research.
Værd at bemærke: hvis dit workflow allerede findes i en browser sidebar eller AI assistent, kan værktøjer som Sider.AI strømline research-løkken - vælg et emne, kør en søgning, fang transskriptioner, og udkast til en Claude-drevet opsummering lige der, hvor du arbejder. Dette kan spare kontekstskift og gøre det at bygge en YouTube research agent med Claude Code endnu mere praktisk for teams. Vigtigste pointer
- At bygge en YouTube research agent med Claude Code er en højeffektiv måde at omdanne videoer til handlingsrettede briefs.
- Den minimale stack: YouTube API + transskriptioner + chunking + embeddings + FAISS + Claude syntese.
- Opgraderingsveje: hybrid søgning, re-ranking, planlægningsloops og streng citeringstracking.
- Start simpelt, mål faithfulness, og iterer mod pålidelighed.
Næste trin
- Implementer en rigtig embedding model og hybrid retrieval
- Tilføj et re-ranking trin og kvalitetsmetrics
- Opret et planlagt job til at opdatere emner ugentligt
- Pak som en CLI og en let web UI
FAQ
Q1:How do I start building a YouTube research agent with Claude Code?
Begin with YouTube search, fetch transcripts, chunk content, embed into a vector store, and use Claude Code to synthesize results. The guide above provides step-by-step code to assemble a working pipeline.
Q2:What libraries are best for a YouTube research agent?
Use the YouTube Data API for search, youtube-transcript-api for captions, FAISS for vector search, and the Anthropic SDK to call Claude Code. You can swap embeddings with OpenAI, Nomic, or BGE.
Q3:How do I ensure accurate citations and timestamps?
Keep start/end timestamps during chunking and require Claude Code to cite [video_id @ mm:ss]. Validate that cited timestamps exist in retrieved chunks before publishing.
Q4:Can I use this agent for private or unlisted videos?
Yes, if you have access and can fetch transcripts or run local ASR (e.g., Whisper). Always respect permissions and avoid distributing copyrighted content.
Q5:How can I scale this YouTube research agent for teams?
Add caching, a shared vector store, job queues, and scheduled runs. Integrate with Slack or a wiki, and consider a browser-based assistant like Sider.AI to streamline researcher workflows.