Skip to content

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-V3Silicon Flow API 调用
Web 框架Python + aiohttpRAG API 服务
前端原生 JS聊天 widget
部署Docker + Nginx反向代理 + 静态托管

核心功能

1. 文档索引

  • 5 篇博客文档 → 38 个文本块
  • 每个块通过 all-MiniLM-L6-v2 生成 384 维向量
  • 存入 ChromaDB,支持语义检索

2. 检索生成流程

  1. 用户提问 → 嵌入模型将问题向量化
  2. ChromaDB 检索最相关的 Top-3 文档块
  3. 将检索结果 + 用户问题拼接,发送给 DeepSeek-V3
  4. 返回生成的回答

3. API Key 安全防护

  • API Key 存储在服务器 .env 文件,不进入代码
  • Nginx 反向代理层注入 X-API-Key header
  • 前端 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 按钮,可以直接提问关于博客内容的问题。

Powered by VitePress + Docker + Nginx