RAG 智能问答系统
基于 ChromaDB + DeepSeek-V3 的检索增强生成系统。博客内容即知识库,右下角 AI 按钮随时提问。
技术架构
用户提问 → Nginx 反向代理 → RAG API (端口8080)
│
┌──────────┴──────────┐
│ │
ChromaDB 检索 DeepSeek-V3 生成
(384维向量) (Silicon Flow API)
│ │
all-MiniLM-L6-v2 上下文 + 问题
(本地嵌入模型) │
生成回答技术栈
| 组件 | 技术 | 作用 |
|---|---|---|
| 嵌入模型 | all-MiniLM-L6-v2 | 本地运行,384维向量 |
| 向量数据库 | ChromaDB 0.4.24 | 文档检索 |
| 生成模型 | DeepSeek-V3 | Silicon Flow API 调用 |
| Web 框架 | Python + aiohttp | RAG API 服务 |
| 前端 | 原生 JS | 聊天 widget |
| 部署 | Docker + Nginx | 反向代理 + 静态托管 |
核心功能
1. 文档索引
- 5 篇博客文档 → 38 个文本块
- 每个块通过 all-MiniLM-L6-v2 生成 384 维向量
- 存入 ChromaDB,支持语义检索
2. 检索生成流程
- 用户提问 → 嵌入模型将问题向量化
- ChromaDB 检索最相关的 Top-3 文档块
- 将检索结果 + 用户问题拼接,发送给 DeepSeek-V3
- 返回生成的回答
3. API Key 安全防护
- API Key 存储在服务器
.env文件,不进入代码 - Nginx 反向代理层注入
X-API-Keyheader - 前端 JS 不接触 API Key
踩过的坑
| 坑 | 原因 | 解法 |
|---|---|---|
| numpy 2.0 与 chromadb 0.4.24 不兼容 | numpy 2.0 移除了 float_ 属性 | Dockerfile 强制 pip install "numpy<2.0.0" |
| sentence-transformers 5.6.0 模型格式变化 | 1_Pooling/config.json 参数名变了 | embedding_dimension 不是 word_embedding_dimension |
| Nginx proxy_pass 路径问题 | proxy_pass :8080/query 会剥离 /api 前缀 | 直接写 proxy_pass http://rag-blog:8080/query |
| Chat widget 在 head 中执行报错 | document.body 还不存在 | 用 DOMContentLoaded 包裹所有 DOM 操作 |
体验
点击本页面右下角的 AI 按钮,可以直接提问关于博客内容的问题。