> ## Content Index
> Fetch the complete content index at: https://www.hubwiz.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 用YouTube视频构建金融RAG
- URL: https://www.hubwiz.com/blog/financial-rag-from-youtube-videos/
- Published: 2026-04-19T11:05:26.000Z
- Updated: 2026-04-19T11:05:26.000Z
- Description: 基于RAG的聊天机器人，利用YouTube频道作为知识库。
- Author: admin
- Tags: RAG, #Import 2026-10-14 14:41

如果你曾经试图在一段很长的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字符。重叠确保我们不会在块边界处丢失上下文。

```python
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索引中——本质上是一个用于概念而非关键词的超快速查找表。就像在书后创建索引，但不是按字母顺序，而是按*意义*组织。

```python
# 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接收上下文+问题，并*严格基于该上下文*生成答案

```python
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个为一组处理视频，批次之间进行垃圾回收：

```python
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](https://medium.com/learning-data/how-i-turned-400-youtube-videos-into-an-ai-powered-financial-q-a-bot-fa23c1719a1f?ref=hubwiz.com)

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