从零搭建企业级AI知识库问答系统(附源码+收藏)
2026/8/5 2:54:13 网站建设 项目流程

本文介绍了如何基于FastAPI、LlamaIndex和DeepSeek快速搭建一个轻量级的RAG智能问答系统,用于解决企业内部文档检索问题。文章详细阐述了技术架构、核心功能(如流式对话、对话持久化、多会话管理、RAG检索增强等),并提供了启动方式和代码实现思路。该项目开源,适合对AI和编程感兴趣的小白或程序员学习和实践。

基于 FastAPI + LlamaIndex + DeepSeek,半小时搞定 RAG 智能问答

一、为什么要做这个项目?

最近公司内部有大量产品文档、操作手册散落在各个角落,新员工入职要翻半天资料,老员工遇到冷门问题也得四处问人。于是我们决定做一个 AI 知识库问答系统——把文档丢进去,直接用自然语言提问,让 AI 自动检索并给出答案。

市面上有不少现成的方案,但要么贵、要么定制性差、要么数据要上云。作为技术团队,我们选择自己动手,基于开源组件搭建了一套轻量级的 RAG(检索增强生成) 问答系统。从模型加载到前端界面,前后花了不到半天时间。

项目已开源,文末有源码地址。

二、效果展示

先看看成品长什么样:

AI咨询专家界面

界面设计参考了 ChatGPT 的布局,左侧对话列表 + 右侧聊天区。支持多会话管理、流式输出、对话持久化。配色用了 Indigo 紫色系,整体风格比较现代。

三、技术架构

整个系统的架构非常简洁:

用户浏览器 │ ▼ FastAPI 服务 (server.py) ├── Jinja2 模板渲染 → chat.html ├── SQLite ← 对话/消息持久化 ├── LlamaIndex ← 文档索引 & 检索 ├── DeepSeek ← 大语言模型 (生成回答) └── HuggingFace ← 嵌入模型 (向量化)

核心技术栈:

组件技术选型说明
Web 框架FastAPI异步高性能,原生支持流式响应
RAG 引擎LlamaIndex文档加载、索引构建、检索增强
大模型DeepSeek-Reasoner性价比极高的推理模型
嵌入模型BGE-Small-ZH中文语义向量化,CPU 可运行
数据存储SQLite对话记录持久化,零配置
前端Jinja2 + Vanilla JS无框架依赖,极简部署

四、核心功能

1. 流式对话

这是最影响用户体验的功能。用户提问后,AI 的回复会像打字一样逐字输出,而不是等半天突然蹦出一大段。实现上用了 FastAPI 的StreamingResponse,配合前端的ReadableStream读取:

async def generate_response(): for token in response.response_gen: yield token await asyncio.sleep(0.01) return StreamingResponse(generate_response(), media_type="text/plain")

前端用response.body.getReader()读取字节流,每收到一个 chunk 就更新页面。同时加了一个闪烁光标的 CSS 动画,模拟真人打字的视觉效果。

2. 对话持久化

之前的版本对话只存在浏览器内存里,刷新就没了。这次我们用 SQLite 做了完整的持久化:

  • conversations表:存储对话 ID、标题、创建/更新时间
  • messages表:存储每条消息的角色(user/assistant)、内容、时间戳

提供了完整的 REST API:创建对话、获取列表、重命名、删除、加载历史消息。流式查询完成后自动将用户消息和 AI 回复存入数据库。

3. 多会话管理

侧边栏支持创建多个对话,每个对话独立存储消息历史。你可以把不同话题分开,比如"产品功能咨询"和"技术架构问题"各开一个对话,方便回溯。

支持的交互操作:

  • 搜索过滤:按标题关键词筛选(快捷键Ctrl+K快速聚焦搜索框),对话多了也不怕找不到
  • 重命名:双击标题直接编辑,或者点编辑按钮修改,回车保存、Esc 取消
  • 删除:弹出确认框,提示不可撤销,防止手滑
  • 自动标题:新对话的第一条消息前 20 字自动设为标题,比 “新对话 1、2、3” 直观得多
  • 时间戳:每个对话显示最后更新时间,最近聊的排在最上面

4. RAG 检索增强

这是整个系统的核心。知识库文档放在data_dir/目录下,启动时 LlamaIndex 会自动加载所有文档,用 HuggingFace 的 BGE 嵌入模型将文本转成向量,构建索引。

用户提问时的流程是这样的:

  1. 向量化:把用户问题用同一个嵌入模型转成向量
  2. 相似度检索:在向量索引中找出最相关的文档片段
  3. Prompt 拼接:把检索到的片段作为上下文,拼上用户问题,组成完整的 Prompt
  4. 大模型生成:将 Prompt 发给 DeepSeek,生成最终答案

这样一来,大模型就能基于私有知识作答,而不是凭空编造。即使文档里没有相关内容,模型也会明确告诉你"根据现有资料无法回答",不会胡说八道。

支持点击按钮更新索引,随时补充新文档到data_dir/目录即可,不用重启服务。

5. 配置分离

所有敏感信息(API Key、密钥等)从代码中抽离到config.yaml配置文件:

llm: provider: deepseek model: deepseek-reasoner api_key: "your-api-key-here" embedding: model: BAAI/bge-small-zh-v1.5 device: cpu

同时支持环境变量覆盖,方便生产环境部署:

export APP_LLM__API_KEY=sk-xxxxxxxx

config.yaml已加入.gitignore,不用担心密钥泄露到 Git 仓库。

五、启动方式

两步搞定:

# 1. 安装依赖 uv sync # 2. 启动服务 python server.py

浏览器访问http://localhost:8001/chat即可使用。整个服务打包在一个 400 行的server.py里,部署极其简单。

六、写代码过程中的几个决策

为什么不用 LangChain?

LangChain 功能很全但也很重,抽象层次太多,调试困难。LlamaIndex 在文档索引和 RAG 这块做得更专注,API 更直观,几行代码就能跑起来。

为什么用 SQLite 而不是 PostgreSQL?

这个场景的并发量和数据量都不大,SQLite 足够了。零配置、零维护,数据文件就是一个.db文件,备份就是复制文件。Python 标准库自带sqlite3,不用装额外依赖。

为什么前端不用 React/Vue?

项目定位是轻量级内部工具,没有复杂的前端交互。Jinja2 模板 + 原生 JavaScript 完全够用,首屏加载几乎没有任何延迟。前端总共一个 HTML 文件,不到 1600 行代码,包含了完整的 CSS 样式系统和 JS 交互逻辑。

而且单文件意味着部署极其简单——一个python server.py就全跑起来了,不需要npm install、不需要webpack、不需要构建步骤。

UI 设计的一些细节

这次我们花了不少心思在 UI 上,追求一种"看起来不像内部工具"的质感:

  • 色彩体系:主色调用了 Indigo 紫色(#6366F1),侧边栏用深靛蓝(#1E1B4B),主体区用浅灰(#F8FAFC),整体干净利落,不会太沉闷也不会太花哨
  • 头像设计:用户头像用蓝紫渐变、AI 头像用橙红渐变,一眼就能区分对话角色,比传统的 emoji 精致得多
  • 消息气泡:圆角 18px,用户气泡带淡紫边框,AI 气泡用浅灰底色,层次感很好
  • 字体:选了 Inter 字体,无衬线、字形清晰,阅读长文本也不累
  • 动画:消息滑入动画、流式输出闪烁光标、按钮悬停微动效、Toast 飘入提示,交互反馈及时但不喧宾夺主
  • 空状态引导:没有对话时显示欢迎页,附带 3 个建议问题,点击即可直接提问
  • 加载骨架屏:切换对话时显示骨架屏占位,比转圈圈优雅
  • 移动端适配:768px 以下侧边栏折叠为汉堡菜单,触摸友好

这些细节单独看都不起眼,但组合起来就形成了很好的整体体验。

七、可以扩展的方向

这个项目是一个很扎实的起点,后续有很多可以玩的方向:

  • 多知识库管理:不同部门/项目使用独立的文档目录,前端切换知识库
  • 用户认证:简单的 JWT 登录系统,区分不同用户的历史记录和权限
  • Docker 一键部署:打包成镜像,docker compose up就启动,方便分发
  • 更多文档格式:目前支持纯文本,可以扩展 PDF、Word、Markdown、网页抓取
  • 对话导出:将对话记录导出为 Markdown 或 PDF,方便归档和分享
  • 模型热切换:支持在配置中切换不同的 LLM(如通义千问、GPT-4 等),无需改代码
  • 引用来源:回复中标注参考了哪些文档片段,增强可信度

如果有任何想法或建议,欢迎在 GitHub 上提 Issue 一起讨论。

八、源码地址

项目已开源在 GitHub:

👉 https://github.com/yaunsine/ai-rag-chat

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2026 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要《AI大模型入门+进阶学习资源包》下方扫码获取~

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

以上资料如何领取?

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

以上全套大模型资料如何领取?

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询