前言前段时间接到一个需求为公司开发一款微信小程序用户输入设备故障现象系统能够自动匹配知识库并给出对应的原因分析和解决办法。简单说就是做一个 AI 智能问答助手。经过一个多月的开发项目终于成功部署上线了。这篇文章记录了从本地开发到阿里云部署的完整过程希望能给有类似需求的朋友一些参考。技术选型模块技术选型理由后端框架FastAPI异步高性能自动生成 API 文档向量数据库ChromaDB轻量级本地部署无需额外服务Embedding阿里 DashScope中文效果好API 稳定LLMDeepSeek API性价比高推理能力强部署阿里云轻量应用服务器 Nginx HTTPS简单稳定适合中小项目前端微信小程序原生公司内部使用无需跨平台项目背景公司产品种类较多包括臭氧传感器、旁路配件、控制器等每个产品都有大量的技术手册和故障处理经验。以往销售和售后遇到技术问题时需要翻阅大量文档或咨询经验丰富的同事效率低且容易遗漏。我们的目标是开发一个智能问答工具用户输入故障现象系统自动从知识库中检索相关信息并给出结构化的答案原因 解决办法。一、后端开发1.1 核心架构用户提问 → 问题向量化DashScope → 混合检索关键词 向量 → 相关性过滤 → LLM生成答案DeepSeek → 返回结果1.2 混合检索设计纯向量检索在匹配精准关键词时效果不理想比如用户问“灯不亮”时向量检索可能匹配到一些语义相近但内容不相关的文档。所以我们采用了混合检索的策略关键词检索通过 jieba 分词 倒排索引精确匹配文档中的关键词向量检索通过 Embedding 模型检索语义相似的文档合并排序两种结果按相似度统一排序取 Top-K 返回# 混合检索核心逻辑 def hybrid_search(question, knowledge, keyword_index, vector_search_func, top_k3): # 1. 关键词检索 keyword_results keyword_search(question, knowledge, keyword_index, top_k) # 2. 向量检索 vector_results vector_search_func(question, top_k) # 3. 合并去重按相似度排序 all_results keyword_results vector_results all_results.sort(keylambda x: -x[similarity]) return all_results[:top_k]1.3 知识库准备将产品技术手册中的关键信息提取为结构化的 JSON 格式每条记录包含id、title、content三个字段{ id: 001, title: 产品名称, content: DULCOTEST臭氧传感器型号OZR 1-mA-2ppm。是一种覆盖隔膜的电流型双电极传感器可用于测定水中臭氧的浓度。 }最终我们整理了 409 条知识条目涵盖了臭氧传感器、旁路配件、控制器等产品的技术参数、安装说明和故障诊断。二、部署到阿里云2.1 服务器配置在阿里云买一台轻量应用服务器2核2GUbuntu 22.04约 79 元/年性价比极高。2.2 环境安装登录服务器后安装基础环境# 更新系统 sudo apt update sudo apt upgrade -y # 安装 Python 和 pip sudo apt install python3-pip python3-venv git -y # 安装系统依赖ChromaDB 需要 sudo apt install build-essential cmake g -y2.3 上传代码并安装依赖# 在本地电脑上传代码 scp -r ./message root你的服务器IP:/home/admin/ # 在服务器上安装 Python 依赖 cd /home/admin/message pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple2.4 配置 Nginx 反向代理 HTTPS微信小程序要求 API 接口必须使用 HTTPS所以需要给域名配置 SSL 证书。Nginx 配置文件server { listen 443 ssl; server_name api.your-domain.com; ssl_certificate /etc/nginx/ssl/your-cert.pem; ssl_certificate_key /etc/nginx/ssl/your-cert.key; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name api.your-domain.com; return 301 https://$server_name$request_uri; }2.5 后台运行服务使用nohup让服务在后台持续运行cd /home/admin/message nohup python3 main.py /dev/null 21 2.6 小程序配置在微信公众平台配置服务器域名配置项值request 合法域名https://api.your-domain.com三、部署过程中的坑3.1 虚拟主机不支持 Python一开始我以为公司已有的虚拟主机支持 PHP/HTML能跑 Python 服务结果发现完全不行。虚拟主机只能运行 PHP 和静态页面不支持 Python 后端。解决方案是单独购买轻量应用服务器。3.2 防火墙端口未开放服务器默认只开放了 22 端口8000 端口默认是关闭的。需要在阿里云控制台 → 轻量应用服务器 → 防火墙中手动添加 8000 端口规则。3.3 SSL 证书申请一开始选了 OV 证书几千块一年后来发现可以申请免费 DV 证书有效期 90 天到期自动提醒续期。在阿里云数字证书管理服务中搜“个人测试证书”即可。3.4 .env 文件配置.env文件中的ALLOWED_ORIGINS要设置为小程序的实际域名而不是*否则跨域请求会有问题。3.5 服务后台运行权限用nohup启动服务时遇到了Permission denied问题原因是logs目录权限不够。使用sudo chown -R admin:admin logs/解决。四、效果展示小程序端用户输入“数值不稳定”系统自动返回【可能原因及解决办法】 1. 膜冒内电解液有气泡 → 重新添加电解液 2. 膜上有气泡 → 临时增加流量敲击流通池排气泡 3. 压力波动 → 减少压力变化 4. 缺少电隔离 → 模拟传感器需要进行电隔离 5. 参比电极耗尽或被污染 → 返厂重新镀层 6. 膜冒胶圈老化 → 更换胶圈用户输入“灯不亮”系统返回【可能原因及解决办法】 1. 供电错误 → 提供正确电源 2. 传感器故障 → 返厂检测维修五、项目总结5.1 技术栈总结层级技术后端框架FastAPI向量数据库ChromaDBEmbedding阿里 DashScopeLLMDeepSeek API部署环境Ubuntu 22.04 Nginx前端微信小程序原生5.2 成本总结项目费用阿里云轻量服务器 2核2G79 元/年SSL 证书免费DeepSeek API约 0.0001 元/次DashScope API约 0.00001 元/次知识库文件免费整理六、未来优化方向知识库自动更新建立机制定期同步最新的产品手册和故障案例用户反馈闭环收集用户对答案的评价持续优化检索效果多轮对话能力支持追问和澄清提升用户体验监控告警接入日志分析工具及时发现服务异常
从零到一:部署基于 FastAPI + ChromaDB + DeepSeek 的 RAG 知识库问答小程序
发布时间:2026/6/24 9:57:20
前言前段时间接到一个需求为公司开发一款微信小程序用户输入设备故障现象系统能够自动匹配知识库并给出对应的原因分析和解决办法。简单说就是做一个 AI 智能问答助手。经过一个多月的开发项目终于成功部署上线了。这篇文章记录了从本地开发到阿里云部署的完整过程希望能给有类似需求的朋友一些参考。技术选型模块技术选型理由后端框架FastAPI异步高性能自动生成 API 文档向量数据库ChromaDB轻量级本地部署无需额外服务Embedding阿里 DashScope中文效果好API 稳定LLMDeepSeek API性价比高推理能力强部署阿里云轻量应用服务器 Nginx HTTPS简单稳定适合中小项目前端微信小程序原生公司内部使用无需跨平台项目背景公司产品种类较多包括臭氧传感器、旁路配件、控制器等每个产品都有大量的技术手册和故障处理经验。以往销售和售后遇到技术问题时需要翻阅大量文档或咨询经验丰富的同事效率低且容易遗漏。我们的目标是开发一个智能问答工具用户输入故障现象系统自动从知识库中检索相关信息并给出结构化的答案原因 解决办法。一、后端开发1.1 核心架构用户提问 → 问题向量化DashScope → 混合检索关键词 向量 → 相关性过滤 → LLM生成答案DeepSeek → 返回结果1.2 混合检索设计纯向量检索在匹配精准关键词时效果不理想比如用户问“灯不亮”时向量检索可能匹配到一些语义相近但内容不相关的文档。所以我们采用了混合检索的策略关键词检索通过 jieba 分词 倒排索引精确匹配文档中的关键词向量检索通过 Embedding 模型检索语义相似的文档合并排序两种结果按相似度统一排序取 Top-K 返回# 混合检索核心逻辑 def hybrid_search(question, knowledge, keyword_index, vector_search_func, top_k3): # 1. 关键词检索 keyword_results keyword_search(question, knowledge, keyword_index, top_k) # 2. 向量检索 vector_results vector_search_func(question, top_k) # 3. 合并去重按相似度排序 all_results keyword_results vector_results all_results.sort(keylambda x: -x[similarity]) return all_results[:top_k]1.3 知识库准备将产品技术手册中的关键信息提取为结构化的 JSON 格式每条记录包含id、title、content三个字段{ id: 001, title: 产品名称, content: DULCOTEST臭氧传感器型号OZR 1-mA-2ppm。是一种覆盖隔膜的电流型双电极传感器可用于测定水中臭氧的浓度。 }最终我们整理了 409 条知识条目涵盖了臭氧传感器、旁路配件、控制器等产品的技术参数、安装说明和故障诊断。二、部署到阿里云2.1 服务器配置在阿里云买一台轻量应用服务器2核2GUbuntu 22.04约 79 元/年性价比极高。2.2 环境安装登录服务器后安装基础环境# 更新系统 sudo apt update sudo apt upgrade -y # 安装 Python 和 pip sudo apt install python3-pip python3-venv git -y # 安装系统依赖ChromaDB 需要 sudo apt install build-essential cmake g -y2.3 上传代码并安装依赖# 在本地电脑上传代码 scp -r ./message root你的服务器IP:/home/admin/ # 在服务器上安装 Python 依赖 cd /home/admin/message pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple2.4 配置 Nginx 反向代理 HTTPS微信小程序要求 API 接口必须使用 HTTPS所以需要给域名配置 SSL 证书。Nginx 配置文件server { listen 443 ssl; server_name api.your-domain.com; ssl_certificate /etc/nginx/ssl/your-cert.pem; ssl_certificate_key /etc/nginx/ssl/your-cert.key; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name api.your-domain.com; return 301 https://$server_name$request_uri; }2.5 后台运行服务使用nohup让服务在后台持续运行cd /home/admin/message nohup python3 main.py /dev/null 21 2.6 小程序配置在微信公众平台配置服务器域名配置项值request 合法域名https://api.your-domain.com三、部署过程中的坑3.1 虚拟主机不支持 Python一开始我以为公司已有的虚拟主机支持 PHP/HTML能跑 Python 服务结果发现完全不行。虚拟主机只能运行 PHP 和静态页面不支持 Python 后端。解决方案是单独购买轻量应用服务器。3.2 防火墙端口未开放服务器默认只开放了 22 端口8000 端口默认是关闭的。需要在阿里云控制台 → 轻量应用服务器 → 防火墙中手动添加 8000 端口规则。3.3 SSL 证书申请一开始选了 OV 证书几千块一年后来发现可以申请免费 DV 证书有效期 90 天到期自动提醒续期。在阿里云数字证书管理服务中搜“个人测试证书”即可。3.4 .env 文件配置.env文件中的ALLOWED_ORIGINS要设置为小程序的实际域名而不是*否则跨域请求会有问题。3.5 服务后台运行权限用nohup启动服务时遇到了Permission denied问题原因是logs目录权限不够。使用sudo chown -R admin:admin logs/解决。四、效果展示小程序端用户输入“数值不稳定”系统自动返回【可能原因及解决办法】 1. 膜冒内电解液有气泡 → 重新添加电解液 2. 膜上有气泡 → 临时增加流量敲击流通池排气泡 3. 压力波动 → 减少压力变化 4. 缺少电隔离 → 模拟传感器需要进行电隔离 5. 参比电极耗尽或被污染 → 返厂重新镀层 6. 膜冒胶圈老化 → 更换胶圈用户输入“灯不亮”系统返回【可能原因及解决办法】 1. 供电错误 → 提供正确电源 2. 传感器故障 → 返厂检测维修五、项目总结5.1 技术栈总结层级技术后端框架FastAPI向量数据库ChromaDBEmbedding阿里 DashScopeLLMDeepSeek API部署环境Ubuntu 22.04 Nginx前端微信小程序原生5.2 成本总结项目费用阿里云轻量服务器 2核2G79 元/年SSL 证书免费DeepSeek API约 0.0001 元/次DashScope API约 0.00001 元/次知识库文件免费整理六、未来优化方向知识库自动更新建立机制定期同步最新的产品手册和故障案例用户反馈闭环收集用户对答案的评价持续优化检索效果多轮对话能力支持追问和澄清提升用户体验监控告警接入日志分析工具及时发现服务异常