news 2026/6/10 9:30:07

基于 LlamaIndex + DeepSeek + Streamlit 搭建智能问答系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 LlamaIndex + DeepSeek + Streamlit 搭建智能问答系统

基于 LlamaIndex + DeepSeek + Streamlit 搭建智能问答系统(完整实战教程)

一、前言

当下大模型应用落地中,RAG(检索增强生成)是私有化知识库、企业智能问答、本地文档问答最主流的方案。本文从零讲解:RAG 核心概念、工具选型、环境搭建、代码实战,最终结合LlamaIndexDeepSeek 大模型Streamlit 前端框架完成带界面的流式智能问答系统,所有代码可直接运行,适合新手入门大模型应用开发。

二、整体技术栈与前期准备

2.1 技术栈介绍

表格

工具 / 技术作用说明
DeepSeek主流开源大模型,提供 API 调用能力,作为核心对话模型
LlamaIndex开源大模型应用框架,主打文档检索、知识库构建、问答引擎,是实现 RAG 的核心工具
LangChain同类型大模型应用框架(拓展了解),常和 LlamaIndex 搭配做复杂智能体、流程编排
StreamlitPython 快速前端框架,无需前端基础,几行代码就能搭建交互式网页界面
RAG(检索增强生成)核心架构:检索知识库内容 + 交给大模型综合回答,解决大模型幻觉、私有知识无法识别问题

2.2 前期资源准备

  1. DeepSeek API Key调用 DeepSeek 大模型必须申请官方 API Key,是程序和大模型通信的凭证。
  2. 运行环境本地 Python 环境(推荐 Python 3.8+),也可使用云服务器部署私有化模型(服务器月租约 60~70 元,适合长期部署私有知识库)。
  3. 辅助工具(拓展)
    • Cursor:AI 编程编辑器,付费版月费约 20$,国内可选择平价渠道,辅助代码编写、排错。
    • 私有化模型部署:可在服务器部署开源大模型,脱离公网 API,实现完全离线使用。

三、核心概念详解:RAG、向量、知识库与大模型的关系

3.1 什么是 RAG(检索增强生成)

RAG 全称Retrieval-Augmented Generation,检索增强生成,是弥补大模型短板的经典架构。

工作流程

  1. 提前将私有文档 / 知识库进行处理,转为向量数据存入向量库;
  2. 用户发起提问时,程序先检索知识库,匹配和问题相关的片段内容;
  3. 将「用户问题 + 检索到的知识库内容」一起拼接为 Prompt 传给大模型;
  4. 大模型结合检索到的真实知识作答,大幅减少模型幻觉,答案更精准、贴合私有知识。

3.2 向量与知识图谱(RAG 两种数据载体)

  1. 向量形式文本通过嵌入模型转为多维向量,向量维度越高,文本语义匹配精度越高,是目前 RAG 最常用的存储形式。
  2. 知识图谱形式提取文本中的实体、关系、属性,以图谱结构存储,适合知识关联强、逻辑复杂的场景(如行业知识库、政务资料)。

简单总结:向量偏向全文语义检索,知识图谱偏向逻辑关系检索

3.3 知识库 VS 大语言模型(形象理解)

  • 知识库 + LlamaIndex=图书管理员 + 搜索引擎负责管理所有已有文档、精准检索相关内容,只做「查找、整理信息」,不做创作和总结。
  • 大语言模型(DeepSeek)=知识渊博的讲解员接收检索到的信息 + 用户问题,进行理解、总结、分析、生成回答,负责内容输出与对话交互。

二者配合,就是标准 RAG 问答系统的核心逻辑。

四、LlamaIndex 框架介绍

4.1 LlamaIndex 核心作用

LlamaIndex是开源 Python 框架,专门为大模型应用开发设计,核心能力:

  1. 快速构建文档知识库、检索系统;
  2. 封装各类大模型(OpenAI、DeepSeek、通义千问等)的调用接口;
  3. 内置聊天引擎、问答引擎、流式输出、会话记忆等能力,开箱即用;
  4. 降低 RAG、智能问答、文档对话的开发门槛。

4.2 依赖包安装

根据对接的大模型,安装对应依赖包,pip命令通用(Windows/Mac/Linux 终端执行)。

1)基础 LlamaIndex 安装

bash

运行

pip install llama-index
2)对接 OpenAI 模型(官方默认)

bash

运行

pip install llama-index-llms-openai
3)对接 DeepSeek 模型(本文主力)

bash

运行

pip install llama-index-llms-deepseek

五、基础实战:LlamaIndex 对接 DeepSeek 实现控制台问答

5.1 核心代码解析 + Python 语法补充

5.1.1 基础导入与全局配置

在 LlamaIndex 中,Settings全局配置类,作用是统一指定项目使用的大模型、嵌入模型、超时时间等,全局生效。

5.1.2 完整控制台问答代码

python 运行

# 1. 导入所需模块 from llama_index.core.chat_engine import SimpleChatEngine from llama_index.core import Settings from llama_index.llms.deepseek import DeepSeek # 2. 初始化 DeepSeek 大模型 # model:指定 DeepSeek 模型名称,api_key:填入你自己的 DeepSeek API Key llm = DeepSeek( model="deepseek-reasoner", api_key="你的DeepSeek_API_KEY" ) # 3. 全局设置:将默认模型替换为 DeepSeek Settings.llm = llm # 4. 初始化简易聊天引擎 chat_engine = SimpleChatEngine.from_defaults() # 方式1:交互式控制台问答(循环对话,输入问题即可交互) # chat_engine.chat_repl() # 方式2:流式输出(逐字返回答案,模拟真人打字效果) # 定义提问内容 query = "请用中文解释什么是 LlamaIndex" # 调用流式接口 response = chat_engine.stream_chat(query) # 遍历生成器,逐字符打印(Python 生成器语法) for token in response.response_gen: print(token, end="")

5.2 关键 Python 知识点补充

  1. 生成器(Generator)response.response_gen是生成器对象,特点是边生成、边输出,不会一次性加载全部答案,实现流式输出,网页 / 控制台体验更流畅。
  2. end=""参数print()默认换行,end=""表示打印后不换行,实现文字连续输出。
  3. REPL 模式chat_repl()是交互式命令行模式(Read-Eval-Print-Loop),循环接收用户输入、执行、返回结果,直到手动终止程序。

六、前端实战:基于 Streamlit 搭建可视化问答页面

6.1 Streamlit 框架介绍

Streamlit是 Python 专用快速 Web 前端框架

  • 无需学习 HTML/CSS/JS,纯 Python 写网页;
  • 代码修改实时热更新,开发效率极高;
  • 内置聊天框、输入框、弹窗、markdown 渲染等组件,专门适配 AI 问答场景。

6.2 Streamlit 环境安装与验证

1)安装依赖

bash 运行

pip install streamlit
2)验证安装是否成功

终端执行以下命令,会自动拉起浏览器并打开测试页面,代表安装成功:

bash 运行

streamlit hello

6.3 Streamlit 基础语法讲解

6.3.1 页面基础配置

python 运行

import streamlit as st # 全局页面配置(必须写在代码最顶部) st.set_page_config( page_title="智能问答助手", # 浏览器标签标题 page_icon=":robot:", # 页面图标(emoji 表情) layout="wide", # 页面布局:wide=宽屏,centered=居中 initial_sidebar_state="expanded" # 侧边栏默认展开/收起 ) # 页面大标题 st.title("智能问答系统") # Markdown 文本渲染(支持标题、列表、代码块等语法) st.markdown("> 基于 LlamaIndex + DeepSeek 搭建的私有化知识问答平台")
核心组件说明
  1. st.title():一级标题;
  2. st.markdown():渲染 Markdown 格式文本,AI 系统最常用;
  3. st.chat_input()聊天输入框(专门用于对话场景);
  4. st.chat_message("user/assistant"):聊天消息容器,区分用户消息、AI 助手消息;
  5. st.error():错误提示弹窗,用于异常捕获。

6.4 完整项目代码(后端引擎 + 前端页面整合)

创建文件app.py,整合模型初始化、聊天引擎、前端页面、异常捕获、流式输出,可直接运行。

python 运行

# 导入依赖 import streamlit as st from llama_index.core.chat_engine import SimpleChatEngine from llama_index.core import Settings from llama_index.llms.deepseek import DeepSeek # ===================== 1. 初始化聊天引擎(封装为函数,便于复用) ===================== def initialize_chat_engine(): """ 初始化 LlamaIndex 聊天引擎 + DeepSeek 大模型 return: 聊天引擎对象 / None(初始化失败) """ try: # 初始化 DeepSeek 模型 llm = DeepSeek( model="deepseek-reasoner", api_key="你的DeepSeek_API_KEY" # 替换为自己的 Key ) # 全局指定大模型 Settings.llm = llm # 创建聊天引擎 chat_engine = SimpleChatEngine.from_defaults() return chat_engine except Exception as e: # 前端展示错误信息 st.error(f"聊天引擎初始化失败:{str(e)}") return None # ===================== 2. 主页面逻辑 ===================== def main(): # 页面全局配置(首行执行) st.set_page_config( page_title="DeepSeek 知识问答系统", page_icon=":robot:", layout="wide" ) # 页面标题与描述 st.title("📚 基于 DeepSeek + LlamaIndex 智能问答系统") st.markdown("---") st.markdown("💡 说明:本系统基于大模型实现智能对话,支持流式答案输出") # 初始化聊天引擎 chat_engine = initialize_chat_engine() # 判断引擎是否初始化成功 if chat_engine: # 聊天输入框,接收用户问题 user_prompt = st.chat_input("请输入你的问题...") # Python 海象运算符 := :先赋值,再判断是否非空 if user_prompt: # 渲染用户消息 with st.chat_message("user"): st.markdown(user_prompt) # 渲染 AI 回答(流式输出) with st.chat_message("assistant"): try: # 获取流式响应 stream_response = chat_engine.stream_chat(user_prompt) # 定义空字符串,拼接流式内容 answer_placeholder = st.empty() full_answer = "" # 遍历生成器,逐字输出 for token in stream_response.response_gen: full_answer += token answer_placeholder.markdown(full_answer) except Exception as e: st.error(f"回答生成异常:{str(e)}") # ===================== 3. 程序入口(Python 标准入口写法) ===================== if __name__ == '__main__': main()

6.5 关键 Python 语法拓展

  1. if __name__ == '__main__':程序入口Python 标准规范:当前文件作为主程序运行时,执行main()函数;如果文件被其他脚本导入,则不执行,是项目模块化开发必备写法。

  2. 海象运算符:=(Python 3.8+ 新增)语法:变量 := 表达式作用:赋值 + 判断一步完成,简化代码。示例:if user_prompt := st.chat_input("请输入问题"):等价于:

    python 运行

    user_prompt = st.chat_input("请输入问题") if user_prompt: # 执行业务逻辑
  3. with上下文管理器with st.chat_message("user"):表示「在这个消息容器内渲染内容」,代码块结束自动关闭容器,简化资源管理。

  4. 异常捕获try...except捕获模型调用、网络、代码报错,避免程序直接崩溃,同时在前端展示错误原因,提升系统健壮性。

6.6 运行项目

终端进入app.py所在目录,执行命令启动网页应用:

bash 运行

streamlit run app.py

执行后会自动生成本地访问地址(默认http://localhost:8501),浏览器打开即可使用问答系统。

七、项目总结与后续拓展方向

7.1 本文知识点总结

  1. 理解RAG 检索增强生成的核心原理、向量 / 知识图谱两种数据形式;
  2. 分清「知识库(LlamaIndex)」和「大模型(DeepSeek)」的分工;
  3. 掌握 LlamaIndex 对接 DeepSeek 大模型、控制台流式问答开发;
  4. 学会 Streamlit 基础组件、纯 Python 快速搭建 AI 网页前端;
  5. 掌握 Python 生成器、海象运算符、上下文管理器、异常捕获等实用语法。

7.2 后续进阶拓展(RAG 完整知识库落地)

  1. 接入本地文档:使用 LlamaIndex 加载 PDF/Word/TXT 文档,构建私有知识库,实现「文档问答」;
  2. 向量数据库:搭配 Chroma、FAISS、Milvus 等向量库,实现海量文档检索;
  3. 会话记忆:给聊天引擎添加上下文记忆,实现多轮连续对话;
  4. 私有化部署:在云服务器部署开源大模型,脱离公网 API,实现离线使用;
  5. 智能体(Agent):结合 LangChain 实现工具调用、任务编排等复杂智能体功能。

八、常见问题排错

  1. API Key 报错检查 Key 是否填写正确、账户余额 / 调用额度是否充足、网络能否访问 DeepSeek API。
  2. Streamlit 运行无页面检查端口是否被占用,或使用streamlit run app.py --server.port 8502指定新端口。
  3. 流式输出卡顿网络问题导致大模型返回延迟,可增加超时配置。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 9:26:15

前端安装项目出现代理问题和ssl认证问题

清空代理重新离线安装: $env:HTTP_PROXY‘’; $env:HTTPS_PROXY‘’; $env:http_proxy‘’; $env:https_proxy‘’; $env:ALL_PROXY‘’; $env:all_proxy‘’; pnpm install --prefer-offline

作者头像 李华
网站建设 2026/6/10 9:23:04

别再只用EMD了!手把手教你用Python实现VMD和SSA信号分解(附代码对比)

信号分解算法实战指南:VMD与SSA的Python实现与对比在非平稳信号处理领域,选择合适的分解算法往往能决定后续分析的成败。传统经验模态分解(EMD)虽然开创了自适应信号分解的先河,但其模态混叠和端点效应问题一直困扰着工程师们。本文将带您深入…

作者头像 李华