指南
在 LangChain 中使用视频文稿
把 YouTube 和 TikTok 文稿加载为带时间戳的 LangChain Document,或者让 LangChain 智能体使用 Transcript Dock MCP 工具。
更新于
先说结论:有两种方式。做索引时,用一个小小的加载器把文稿转成 LangChain 的 Document 对象,每个字幕分段一个,并带上它的开始时间。做智能体时,Transcript Dock MCP 服务器通过 langchain-mcp-adapters 接入 LangChain,由智能体自己获取文稿。
一个文档加载器#
只需二十行,不需要额外的包。每个 Document 都保留视频 URL 和时间信息,所以检索结果可以引用它们出自的那个时刻。嵌入之前,请先把分段合并成更大的块,做法见用于 RAG 的视频文稿。
loader.py
# pip install langchain-core requestsimport requestsfrom langchain_core.documents import DocumentAPI = "https://www.transcriptdock.com"H = {"Authorization": "Bearer td_live_YOUR_KEY"}def load_video(url: str, mode: str = "captions_only") -> list[Document]:"""One Document per caption segment, with the video URL and start time as metadata."""job = requests.post(f"{API}/v1/jobs", headers={**H, "Idempotency-Key": f"lc-{url}"[:128]},json={"source": {"url": url}, "mode": mode}).json()while job["status"] not in ("succeeded", "failed", "cancelled"):job = requests.get(f"{API}/v1/jobs/{job['id']}", params={"wait": 25}, headers=H).json()if job["status"] != "succeeded":raise RuntimeError(job["error"]["code"])t = requests.get(f"{API}/v1/transcripts/{job['result_id']}", headers=H).json()meta = {"source": t["source"]["canonical_url"], "title": t["source"]["title"], "language": t["language"]}return [Document(page_content=s["text"], metadata={**meta, "start": s["start"], "end": s["end"]})for s in t["segments"]]docs = load_video("https://www.youtube.com/watch?v=dQw4w9WgXcQ")
通过 MCP 提供智能体工具#
MultiServerMCPClient 连接到远程服务器,并把它的工具转换成 LangChain 工具:get_video_transcript、YouTube 搜索、列出频道和播放列表的视频,以及列出 TikTok 主页的视频。
agent.py
# pip install langchain-mcp-adapters langgraph langchain-anthropicimport asynciofrom langchain_mcp_adapters.client import MultiServerMCPClientfrom langgraph.prebuilt import create_react_agentasync def main():client = MultiServerMCPClient({"transcriptdock": {"url": "https://www.transcriptdock.com/mcp","transport": "streamable_http","headers": {"Authorization": "Bearer td_live_YOUR_KEY"},}})tools = await client.get_tools()agent = create_react_agent("anthropic:claude-sonnet-5-5", tools)out = await agent.ainvoke({"messages": "Summarize https://www.youtube.com/watch?v=dQw4w9WgXcQ"})print(out["messages"][-1].content)asyncio.run(main())
工具名称、参数和点数消耗见 MCP 页面。LlamaIndex 以及其他支持 MCP 的框架,连接方式相同。