当前位置: 首页 > news >正文

从零到一:部署基于 FastAPI + ChromaDB + DeepSeek 的 RAG 知识库问答小程序

前言

前段时间接到一个需求:为公司开发一款微信小程序,用户输入设备故障现象,系统能够自动匹配知识库并给出对应的原因分析和解决办法。简单说,就是做一个 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_k=3): # 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(key=lambda x: -x['similarity']) return all_results[:top_k]

1.3 知识库准备

将产品技术手册中的关键信息提取为结构化的 JSON 格式,每条记录包含idtitlecontent三个字段:

{ "id": "001", "title": "产品名称", "content": "DULCOTEST臭氧传感器,型号:OZR 1-mA-2ppm。是一种覆盖隔膜的电流型双电极传感器,可用于测定水中臭氧的浓度。" }

最终我们整理了 409 条知识条目,涵盖了臭氧传感器、旁路配件、控制器等产品的技术参数、安装说明和故障诊断。

二、部署到阿里云

2.1 服务器配置

在阿里云买一台轻量应用服务器(2核2G,Ubuntu 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++ -y

2.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/simple

2.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 2>&1 &

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
向量数据库ChromaDB
Embedding阿里 DashScope
LLMDeepSeek API
部署环境Ubuntu 22.04 + Nginx
前端微信小程序原生

5.2 成本总结

项目费用
阿里云轻量服务器 2核2G79 元/年
SSL 证书免费
DeepSeek API约 0.0001 元/次
DashScope API约 0.00001 元/次
知识库文件免费整理

六、未来优化方向

  1. 知识库自动更新:建立机制定期同步最新的产品手册和故障案例

  2. 用户反馈闭环:收集用户对答案的评价,持续优化检索效果

  3. 多轮对话能力:支持追问和澄清,提升用户体验

  4. 监控告警:接入日志分析工具,及时发现服务异常

http://www.jsqmd.com/news/1072018/

相关文章:

  • Sign Language Transformers:突破性端到端手语识别与翻译技术
  • 零代码经验,我用Claude Code搓出的生产力工具
  • ImageStrike:一站式图像隐写分析工具,CTF选手的秘密武器
  • ROFL-Player:免费英雄联盟回放播放器完整使用指南
  • PortSwigger SQL注入LAB3
  • 猫抓浏览器扩展:你的网页视频资源一站式下载解决方案
  • 音乐格式转换指南:3步解锁你的加密音乐收藏
  • 7th [Learn biology with math thinking] 2026.06.23
  • 3个理由告诉你为什么HTML转Figma工具正在改变设计工作流
  • 从实习生到AI架构师只需2.8年?AISMM加速路径全曝光:含7个关键里程碑、5次能力跃迁触发点及官方验证时间戳
  • 2026年6月烟台4000平米二级口腔专科医院种植牙实战测评
  • Win11Debloat:让Windows 11重获新生的终极优化神器
  • 【SITS 2026权威认证指南】:AI伦理成熟度四级跃迁路径、评估工具包与企业落地避坑清单
  • 如何快速安装《节奏光剑》模组?ModAssistant 完整使用指南!
  • macOS完整安装包下载终极指南:告别复杂命令行的简单解决方案
  • 为什么83%的AI项目ROI测算失真?:深度拆解SITS 2026框架下AISMM价值锚点重构逻辑
  • 终极音乐格式转换工具:5分钟解锁所有加密音频文件
  • 终极指南:如何在Mac上使用Whisky流畅运行Windows软件和游戏
  • 一个方案设计卡壳的下午,芯查查数字FAE让我提前下班
  • Linux版微信开发者工具:在Linux系统上轻松开发微信小程序的完整指南
  • 终极指南:如何免费解锁Microsoft 365完整功能
  • 高校域名邮箱失效?用这4种替代方案成功激活AI学生权益(教育部备案院校专属通道)
  • 百度网盘macOS版破解插件:解锁SVIP特权与下载速度限制的技术解析
  • GPU Burn:多GPU系统稳定性验证与压力测试的专业解决方案
  • 计算机毕业设计之基于大数据的求职网站数据分析与应用系统设计与实现
  • HTML转Figma终极指南:从网页到设计的完整高效转换方案
  • 如何彻底释放惠普游戏本性能:3步实现纯净硬件控制方案
  • 免费招聘神器实测|HR实测!零成本高效招人神器
  • 华硕笔记本风扇异常终极修复指南:用G-Helper智能掌控散热系统
  • 小白程序员快速上手大模型:从零理解 Agent 全流程(收藏版)