用YouTube视频构建金融RAG

如果你曾经试图在一段很长的YouTube视频中找到特定的金融答案,你一定知道那种痛苦。

个人理财创作者通常发布数百小时的内容,涵盖房贷、投资策略、税务规划和退休建议。知识就在那里——但被埋没了。观众被迫拖动时间线、重新观看整个视频,或者干脆放弃。

这个问题对于房贷顾问等专业人士来说更为突出。

他们反复被问到同样的问题

  • 现在最好的房贷策略是什么?
  • 我应该再融资还是续贷?
  • 新移民应该如何在加拿大规划财务?

在这种情况下,像Grow with Nav这样的金融创作者已经在数百个YouTube视频中记录了答案——但客户没有时间去搜索,创作者也没有时间重复回答,除了逐案审查。

尽管拥有丰富的知识库,信息仍然是实际上无法访问的

1、想法:让视频按意义而非时间可搜索

我不想构建另一个假装给出金融建议的聊天机器人。

相反,我想解决一个更具体的问题:

如果你能提出一个问题,并立即获得直接来自现有YouTube视频的答案——而无需观看它们会怎样?

这促使我构建了一个检索增强生成(RAG)聊天机器人

  • 转录YouTube频道上的每个视频
  • 将内容转换为语义知识库
  • 仅使用视频中已有的信息回答问题
  • 当内容不存在时明确说"我不知道"

结果是AI驱动的金融问答系统,而不是金融顾问——它能在几秒钟内从真实内容中提取真实答案。

2、这个项目实际做什么(不吹嘘)

  • 📚 将400多个YouTube视频变成可搜索的知识库
  • 🔍 基于语义相似度而非关键词查找答案
  • 🧠 通过强制仅上下文响应防止幻觉
  • 💻 在16GB RAM机器上本地运行
  • 💸 总API成本:约5美元

过去需要30分钟视频搜索现在只需约3秒

3、技术栈

我选择了平衡功能和实用性的工具——一切都在16GB RAM的机器上本地运行:

  • yt-dlp:从YouTube视频下载音频(我们不需要视频本身,节省大量空间)
  • OpenAI Whisper:以惊人的准确性将音频转换为文本,本地运行
  • Sentence Transformers (all-MiniLM-L6-v2):生成嵌入(文本的数值表示)用于语义搜索
  • FAISS:Facebook的闪电般快速向量搜索库
  • GPT-4o-mini:OpenAI的经济型模型,用于生成对话式答案

4、工作原理:4步流水线

步骤1:获取数据

首先,我使用yt-dlp下载频道上每个视频的音频。由于我们只需要音频进行转录,与下载完整视频相比这节省了大量磁盘空间。

步骤2:用Whisper转录

接下来,我将音频文件输入OpenAI的Whisper模型生成转录文本。这里有个关键问题:你不能直接把1小时的转录文本丢给AI模型——它会达到token限制并崩溃。

解决方案?分块。我将每个转录文本分割成1000字符的重叠块,重叠200字符。重叠确保我们不会在块边界处丢失上下文。

def chunk_text(text, chunk_size=1000, overlap=200):
    """
    Memory-efficient text chunking using generator pattern.
    Yields chunks instead of building a list in memory.
    """
    L = len(text)
    start = 0
    
    while start < L:
        end = min(start + chunk_size, L)
        chunk = text[start:end].strip()
        if chunk:
            yield chunk
        
        start = end - overlap
        if start >= L or (end == L and start + overlap >= L):
            break

这种生成器模式以流方式处理文本,在处理数百个视频时避免内存过载。

步骤3:构建"大脑"(向量索引)

这里变得有趣了。我使用SentenceTransformer将每个文本块转换为384维向量。可以把它想象成将人类语言翻译成计算机可以比较的数学。

这些向量存储在FAISS索引中——本质上是一个用于概念而非关键词的超快速查找表。就像在书后创建索引,但不是按字母顺序,而是按意义组织。

# Generate embeddings with normalization for cosine similarity
embeddings = model.encode(
    texts,
    convert_to_numpy=True,
    normalize_embeddings=True  # Critical for accurate similarity
)
# Build FAISS index for fast search
index = faiss.IndexFlatIP(embedding_dim)  # IP = Inner Product
index.add(embeddings.astype('float32'))

IndexFlatIP使用内积相似度,配合归一化嵌入可以给我们余弦相似度——完美用于查找语义相关内容。

步骤4:聊天机器人界面

当用户提问时,发生以下步骤:

  1. 用户提问:"新移民最好的房贷策略是什么?"
  2. 检索:系统将问题转换为向量,在FAISS索引中搜索最相关的前5个块
  3. 上下文构建:这些块被组合成上下文字符串
  4. 生成:GPT-4o-mini接收上下文+问题,并严格基于该上下文生成答案
def generate_response(self, query: str, conversation_history: List[Dict] = None):
    # Retrieve relevant chunks
    relevant_chunks = self.retrieve_relevant_chunks(query)
    
    # Build context from chunks
    context = self.build_context(relevant_chunks)
    
    # Send to GPT with strict instructions
    messages = [
        {
            "role": "system",
            "content": """You are a helpful mortgage advisor. 
            Answer based ONLY on the provided context from video transcripts.
            If the context doesn't contain the answer, say so clearly."""
        },
        {
            "role": "user",
            "content": f"Context:\n{context}\n\nQuestion: {query}"
        }
    ]
    
    response = openai.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        temperature=0.7
    )
    
    return response.choices[0].message.content

系统提示词至关重要——它通过强制AI坚持提供的上下文来防止"幻觉"答案。

5、技术挑战

5.1 RAM瓶颈

我最大的挑战是在16GB RAM限制下处理一切。处理400多个视频的嵌入很容易让系统崩溃。

解决方案:批处理。我以10个为一组处理视频,批次之间进行垃圾回收:

for idx, video in enumerate(videos):
    # Process video chunks
    process_video_chunks_streaming(video)
    
    # Clean up memory every 10 videos
    if (idx + 1) % 10 == 0:
        gc.collect()

5.2 防止幻觉

AI模型喜欢编造东西。为防止这种情况,我:

  • 使用严格的系统提示词,要求仅上下文答案
  • 添加来源引用,让用户可以验证信息
  • temperature=0.7限制模型的创造力

聊天机器人现在会回复"知识库中没有该信息"而不是编造答案。

6、结束语

这个基于终端的聊天机器人运行良好,但我有更大的计划:

  • Web UI:构建React/Next.js界面以便于访问
  • 时间戳链接:添加直接跳转到视频中特定时刻的链接
  • 代理工具:让聊天机器人执行房贷计算或拉取实时利率数据
  • 可扩展存储:迁移到Pinecone或Weaviate用于生产级向量搜索

过去需要30分钟视频搜索现在只需3秒。我可以问"如果我是自雇人士应该如何规划房贷?"这样的复杂问题,并立即从Nav的专业知识中获得有来源的答案。

这个项目证明了,有了正确的工具和一些巧妙的工程,你可以将任何视频库变成交互式知识库。最棒的部分?一切都在本地运行,成本接近零。


原文链接: How I Turned 400+ YouTube Videos into an AI-Powered Financial Q&A Bot

汇智网翻译整理,转载请标明出处