基于 RAG(检索增强生成) 架构的抖音视频智能问答系统。用户可以用自然语言提问,系统从 4,554 条真实视频数据中检索相关内容,并生成准确回答。
非教程跟随项目,独立设计并开发。
| 能力 | 实现方式 |
|---|---|
| 混合检索 | FAISS 向量语义检索 (α=0.7) + jieba BM25 关键词检索 (α=0.3) 加权融合 |
| 重排序 | DashScope qwen3-rerank API 对候选结果精排 |
| 阈值门控 | 置信度 < 0.5 时拒绝回答,防止模型幻觉 |
| LLM 生成 | LangChain + 通义千问 qwen-plus 基于上下文生成答案 |
| 评估体系 | RAGAS 自动评估 + 手动 Faithfulness 双重量化 |
| Web 界面 | Streamlit 交互式问答页面 |
- Python 3.13
- FAISS(向量索引)
- LangChain(LLM 编排)
- 通义千问 Embedding API / qwen-plus / qwen3-rerank
- jieba(中文分词)+ rank_bm25
- Streamlit(Web UI)
- RAGAS(评估框架)
RAG_first/
├── extract_all.py # 数据提取:SQLite → pickle/txt
├── build_index_v2.py # 批量向量化 + FAISS 索引构建
├── embedding_engine.py # 通义 Embedding API 封装
├── retriever.py # 混合检索器核心(FAISS+BM25+Rerank)
├── generator.py # RAG 生成链 + 纯生成链
├── app.py # Streamlit Web 界面
├── main.py # 命令行入口(多轮测试)
├── evaluate.py # RAGAS + Faithfulness 评估
├── ragas_config.py # 评估配置
├── test_rerank.py # Rerank 单元测试
├── .env.example # 环境变量模板
└── README.md # 项目说明
pip install langchain langchain-community faiss-cpu dashscope streamlit jieba rank_bm25 ragascp .env.example .env
# 编辑 .env,填入你的 API Key:
# DASHSCOPE_API_KEY=sk-xxxxxpython build_index_v2.pystreamlit run app.pypython main.py使用 RAGAS 框架 + 手动 Faithfulness 进行双重评估:
| 指标 | 含义 | 初始值 | 优化后 |
|---|---|---|---|
| Answer Relevancy | 回答与问题的相关性 | 0.26 | 0.73 ⬆️ +181% |
| Context Precision | 检索上下文精确度 | 1.00 | 1.00 💯 满分 |
| Faithfulness | 回答忠实于上下文 | 0.40 | 1.00 ⬆️ +150% |
用户提问
↓
[标签过滤] 可选,按标签缩小候选范围
↓
[向量检索] FAISS IndexFlatIP + 通义 Embedding (1536维)
↓
[关键词检索] jieba 分词 + BM25Okapi
↓
[加权融合] α=0.7(向量) + α=0.3(BM25)
↓
[重排序] qwen3-rerank API 精排
↓
[阈值门控] score < 0.5 → 拒绝回答(防幻觉)
↓
[LLM 生成] 通义千问 qwen-plus → 输出回答
- 测试集仅 5 条,计划扩充至 20+
- 当前仅支持单轮对话,计划加入多轮记忆
- 文件级 FAISS 索引,未来可迁移至 Milvus / Qdrant
- 新数据需手动重建索引,计划支持增量更新
MIT