RAG智能助手
以下是一个结合FastAPI和LlamaIndex实现RAG(检索增强生成)功能的案例,将各个环节串一下,备查
FastAPI+LlamaIndex
以下是一个结合FastAPI和LlamaIndex实现RAG(检索增强生成)功能的案例,将各个环节串一下,备查。
环境准备
系统环境
使用modelscope ,30个小时的免费使用,注册就行
https://www.modelscope.cn/my/mynotebook
Conda环境
AI开发中使用的各工具版本大多是0.X版本、技术迭代快、工具也相互依赖,开发中最让痛苦的就是平衡依赖的版本,让程序“当前”能正常运行。所以,需要隔离python环境就行 ,
安装软件
下载
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

安装
bash Miniconda3-latest-Linux-x86_64.sh
激活
source ~/.bashrc
验证
conda --version
创建环境
创建
conda create -n myenv python=3.10

注意:python3.10是“目前”兼容性最好的版本,无特别的依赖要求就用该版本。
激活
conda activate myenv

注:后面的操作都是在myenv环境中操作
其他
pip install llama-index

pip install llama_index.vector_stores.chroma

RAG构建
从流程上梳理,一般AI项目的方案,数据>方案>模型>训练>评测>部署,这里只列出关键环节。
数据
重点,数据来源、数据结构、数据格式化问题,网络协议相关的数据集,准备好后,上传至服务器
模型
检索模型
检索模型一般选大一点,RAG检索需基于模型本身智能,所以模型要越大效果越好;
词嵌入模型
常用的一个https://www.modelscope.cn/models/BAAI/bge-small-zh-v1.5/summary
部署
总体
工具表
|
组件 |
技术 |
功能 |
|
后端 |
FastAPI |
REST API、文档处理、RAG 核心逻辑 |
|
前端 |
Vue3 + Element Plus |
用户界面、文档上传、问答交互 |
|
AI 框架 |
LlamaIndex |
文档分块、向量化、检索增强生成 |
|
向量数据库 |
Chroma |
文档向量存储与相似性搜索 |
结构图

|
服务 |
端口 |
服务名 |
功能说明 |
|
Nginx |
80/443 |
gateway |
API网关,入口代理、SSL、静态资源 |
|
Vue |
80 |
frontend |
前端静态资源 (Nginx托管) |
|
FastAPI/LlamaIndex |
8000 |
rag-api |
处理用户请求和调用 RAG 流程 |
|
Chroma |
8000 |
chroma |
向量数据库服务 |
后端
环境准备:
使用框架
- 使用FastAPI+LlamaIndex
FastAPI:https://fastapi.tiangolo.com/zh/
LlamaIndex:LlamaIndex - LlamaIndex
- 安装依赖
pip install fastapi uvicorn llama-index python-dotenv pydantic sentence-transformers
目录结构:

编码app.py
功能设计
文件名:app.py
功能设计:
- /query:处理自然语言查询
- /health:提供健康检查
- 返回结果包含:答案、来源文档片段
关键实现解析
- 模型配置:
- 使用BAAI/bge-small-zh-v1.5作为本地嵌入模型
- 使用Qwen1___5-1___8B-Chat作为本地生成模型
- 可通过修改常量切换为OpenAI等云服务
- 索引构建:
- 自动监控sample_docs目录变化
- 支持多文档格式(PDF/TXT/MD等)
- 使用HuggingFace模型进行本地向量化
- API设计:
- /query:处理自然语言查询
- /health:提供健康检查
- 返回结果包含:答案、来源文档片段
- 错误处理:
- 自动检测文档目录是否存在
- 捕获模型加载和查询过程中的异常
- 返回标准化的HTTP错误代码
功能编码
...详见资源链接...
启动服务
python main.py


两点说明
- HuggingFace推理性能较差,需要使用vLLM进行推理
- 数据存在内存,需要使用Chroma等进行持久化存储
前端:
简单使用vue构建一个测试页面,采用Vue 3 + Element Plus 的前端实现,与之前的 FastAPI RAG 服务完美配合。包含请求交互、加载状态和结果展示功能:
环境准备
创建项目
npm create vue@latest

安装依赖
npm install axios element-plus @element-plus/icons-vue

编写代码
功能设计
- 交互体验优化
- 支持回车键提交
- 输入框即时清空
- 加载状态提示(旋转图标 + 文字)
- 错误消息醒目提示
- 结果展示设计
- 问题/答案分开展示
- 参考文档折叠面板
- 来源文档内容截取显示
- 响应式布局(适配移动端)
- 错误处理机制
- 空输入校验
- 网络错误捕获
- 后端错误信息透传
- 控制台错误日志打印
- 此前端方案具备以下特点:
- 与FastAPI RAG服务无缝对接
- 完整的交互状态管理
- 友好的错误提示系统
- 响应式布局设计
- 易于扩展的功能架构
功能编码
- src/App.vue
服务端地址设置为:https://898800-proxy-8000.dsw-gateway-cn-hangzhou.data.aliyun.com/
- src/main.js
启动服务
npm run dev


评测
前置环境
后端:
本地地址:127.0.0.1:8000
穿透地址:https://898800-proxy-8000.dsw-gateway-cn-hangzhou.data.aliyun.com/
前端:
本次地址:127.0.0.1:5173
后端评测
在服务器端(aliyun.docker.Linux)
health接口-GET
curl -X GET "http://localhost:8000/health"

query接口-POST
curl -X POST "http://localhost:8000/query" -H "Content-Type: application/json" -d '{"question": "什么是路由?"}'

前端评测:
感觉良好的写好代码,但实际测试……都没成功,解决完各种问题后,发现:
跨域问题
浏览器的同源策略导致,正常需在服务器端进行配置,在FastAPI配置后,问题依旧;这里,本来就是是为了测试验证,最后选择让浏览器忽略同源方式,还不好用。

服务器问题
跨域问题解决后
- 通过浏览器:正常前端访问,仍旧被拦截,未能得到正确结果


- 使用Postman,问题依旧,得不到正确结果

问题原因
- ModelScope 的代理网关可能覆盖了 FastAPI 的 CORS 响应头。
- 网关默认配置不允许跨域,需通过 ModelScope 平台单独配置。
总结
本文尽量把RAG的各环节串联一起,尽量简单,部分功能,如:持久化、推理优化、文档分块等在实际落地时根据需要进行补充;还想再说的是数据集问题,嗯,特别重要!!!
项目地址:
https://github.com/iamleib/rag.fastindex
时间紧迫,部分内容不够严谨,多多理解!
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐








所有评论(0)