逐步指南:使用 Claude Code 建立 YouTube 研究代理
如果你曾花一個下午漫無目的地瀏覽 YouTube,卻忘記哪些影片值得收藏,你並不孤單。現在想像有一個不知疲倦的助手,可以快速找到最佳影片、提取摘要、提取關鍵引言、標記時間戳見解,並按需返回來源。這正是 YouTube 研究代理可以做到的。在這份逐步指南中,我們將使用 Claude Code 建立一個實用的 YouTube 研究代理,專為創作者、分析師、學生和痴迷的學習者設計,他們想要從噪音中找到訊號。
我們將採取實用且直接的途徑:架構、程式碼、提示和防護措施。在此過程中,我們將做出你稍後可以替換的武斷選擇。到最後,你將擁有一個可以搜尋 YouTube、收集文字稿、跨多個影片進行推理並產生清晰研究簡報的工作代理。
我們要建構什麼(以及為什麼重要)
- 目標:一個可以執行以下操作的 YouTube 研究代理:
- 主要關鍵字:「使用 Claude Code 建立 YouTube 研究代理」
- 輸出:Markdown 研究簡報 + JSON 用於程式化使用
為什麼重要:YouTube 是講座、課程、演示和辯論的最大公共知識庫。但它很嘈雜。使用 Claude Code 建立 YouTube 研究代理為你帶來優勢:你可以在幾分鐘內(而不是幾小時)彙總數十個影片的見解。
架構概覽
我們將保持第一個版本簡單而強大。
- 輸入:研究查詢(例如,「2025 年的 LLM 代理架構」),可選約束(日期範圍、頻道、持續時間)
- YouTube 搜尋:YouTube Data API v3(或 SerpAPI 後備方案)
- 文字稿:YouTube Transcript API;在不可用時回復到 ASR(例如,Whisper)
- 分塊:感知句子的分段(約 800–1,200 個 token)
- 嵌入:使用本地或託管的嵌入模型(例如,
text-embedding-3-large、nomic-embed-text 或 bge-large)
- 向量儲存:本地
FAISS 以提高速度;可以交換為 Pinecone、Weaviate 或 Qdrant
- 推理:Claude Code 用於協調、工具使用、合成和在受控迴圈內執行程式碼
- 輸出:Markdown 報告 + 帶有引用、時間戳和分數的 JSON 索引
資料流:查詢 → 搜尋 → 獲取元資料 → 文字稿 → 分塊 → 嵌入 → 檢索前 K 個 → Claude Code 合成 → 報告。
先決條件和設定
- API 金鑰:
YOUTUBE_API_KEY、ANTHROPIC_API_KEY(適用於 Claude Code)
google-api-python-client、youtube-transcript-api
faiss-cpu、numpy、pandas、tiktoken(或 sentencepiece)
requests、pydantic、tenacity
pip install google-api-python-client youtube-transcript-api faiss-cpu numpy pandas requests pydantic tenacity anthropic tiktoken
環境變數:
export YOUTUBE_API_KEY=YOUR_YT_KEY
export ANTHROPIC_API_KEY=YOUR_ANTHROPIC_KEY
步驟 1:使用篩選器搜尋 YouTube
我們將搜尋 YouTube 並傳回結構化元資料:標題、頻道、發布日期、持續時間、觀看次數(如果可用)和 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
使用 Claude Code 建立 YouTube 研究代理時的提示:
步驟 6:將所有內容整合在一起
讓我們連接查詢 → 搜尋 → 文字稿 → 分塊 → 嵌入 → 檢索 → 合成。
# 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"))
這個使用 Claude Code 建立 YouTube 研究代理的基準版本將搜尋、檢索和合成帶有引用的多影片見解。升級嵌入並新增快取使其可供生產。
使其更出色的七項升級
- 換入高品質的嵌入並新增 BM25 關鍵字搜尋。混合搜尋可在利基術語上提供更多召回率,並在抽象主題上提供更好的精確度。
- 提取評論、讚/不讚比率和頻道權限。為前 100 名候選人新增一個重新排名器(交叉編碼器)。
- 使用 Claude Code 提出研究計畫:子問題、假設和覆蓋範圍檢查。迭代執行,直到達到覆蓋範圍閾值。
- 對於每項聲明,記錄支持和反駁的片段。在報告中同時呈現兩者;新增信心分數。
- 使用透過字幕或 Whisper 單字時間標記進行的場景偵測。在全局合成之前總結每個章節,以避免上下文稀釋。
- 儲存每個查詢的文字稿、嵌入和報告。在使用者調整篩選器時重複使用。按影片 ID 新增重複資料刪除。
- 匯出 Markdown、PDF 和 JSON。電子郵件或 Slack 交付。將時間戳呈現為可點擊的
?t=mmss 連結。
你可以重複使用的提示
在使用 Claude Code 建立 YouTube 研究代理時,請使用這些範本。
系統:你是一個一絲不苟的研究代理。跨多個 YouTube 文字稿進行合成。使用 [vID @ mm:ss] 進行內嵌引用,並包含一個帶有 URL 的「來源」部分。傳回 Markdown 簡報和帶有時間戳支持的聲明 JSON 酬載。
使用者:研究目標:{topic}
約束:專注於 {audience or scope};首選 {date range} 內的來源;包括分歧。
候選段落(排名):
{retrieved_passages}
輸出:摘要 → 關鍵見解(要點)→ 值得注意的引言(帶有時間戳)→ 矛盾與差距 → 來源。然後是 JSON {"claims": ...}
防護措施和倫理
- 尊重創作者權利:連結到原始影片,並避免發布大型逐字文字稿。
- 避免過度總結:保留細微差別;標記字幕何時自動產生且可能嘈雜。
- 小心處理敏感主題:強調不確定性並尋求多樣化的來源。
疑難排解:常見問題和修復
- 回復到 Whisper;嘗試不同的語言;檢查影片是否受到區域封鎖。
- 升級嵌入;新增 BM25;增加區塊重疊;參數調整前 K 個。
- 強制執行嚴格的引用架構;懲罰不受支持的聲明;要求檢索到的區塊中存在確切的時間戳。
- 積極快取;減少
max_results;批次請求;使用 tenacity 新增退避。
- 總結每個章節;約束最大 token;使用帶有明確大綱的計畫提示。
衡量品質
- 檢索到的區塊的 Precision@K 與標記集相比
範例:研究「向量資料庫說明」
- 查詢:「2025 年面向開發人員說明的向量資料庫」
- 篩選器:2023 年之後的影片,持續時間 6–30 分鐘
- 結果:代理引用 6 個影片,重點介紹 HNSW 與 IVF-PQ 的權衡、討論成本/召回率,並連結到基準。矛盾部分比較了供應商聲明與開放原始碼結果。
順便說一句:在你的工作流程中自動執行此操作
如果你跨文件和程式碼工作,則值得自動化最後一英里。一個小的 CLI 可以執行每晚查詢,並將 Markdown 簡報放入你的知識庫中。你也可以將其連接到 sprint 研究的問題範本中。
值得注意的是:如果你的工作流程已經存在於瀏覽器側邊欄或 AI 助手中,像 Sider.AI 這樣的工具可以簡化研究迴圈——選擇一個主題、執行搜尋、捕獲文字稿,並在你工作的地方草擬一個由 Claude 驅動的摘要。這可以節省上下文切換,並使使用 Claude Code 建立 YouTube 研究代理對於團隊來說更加實用。 主要要點
- 使用 Claude Code 建立 YouTube 研究代理是一種將影片轉化為可操作簡報的高槓桿方式。
- 最小堆疊:YouTube API + 文字稿 + 分塊 + 嵌入 + FAISS + Claude 合成。
- 升級路徑:混合搜尋、重新排名、計畫迴圈和嚴格的引用追蹤。
下一步
常見問題
Q1:如何開始使用 Claude Code 建立 YouTube 研究代理?
從 YouTube 搜尋開始,獲取文字稿、分塊內容、嵌入到向量儲存中,並使用 Claude Code 來合成結果。上面的指南提供了逐步程式碼來組裝一個工作管線。
Q2:哪些程式庫最適合 YouTube 研究代理?
使用 YouTube Data API 進行搜尋、youtube-transcript-api 進行字幕、FAISS 進行向量搜尋,以及 Anthropic SDK 來呼叫 Claude Code。你可以使用 OpenAI、Nomic 或 BGE 交換嵌入。
Q3:如何確保準確的引用和時間戳?
在分塊期間保留開始/結束時間戳,並要求 Claude Code 引用 [video_id @ mm:ss]。在發布之前,驗證檢索到的區塊中是否存在引用的時間戳。
Q4:我可以將此代理用於私人或未列出的影片嗎?
是的,如果你有權限並可以獲取文字稿或執行本地 ASR(例如,Whisper)。始終尊重權限並避免分發受版權保護的內容。
Q5:如何為團隊擴展此 YouTube 研究代理?
新增快取、共用向量儲存、工作佇列和排定的執行。與 Slack 或 wiki 整合,並考慮使用像 Sider.AI 這樣的基於瀏覽器的助手來簡化研究人員的工作流程。