news 2026/7/4 3:30:49

【AI大模型应用开发】【项目实战】13.RAG智慧问答项目-(一)项目介绍项目架构项目环境配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【AI大模型应用开发】【项目实战】13.RAG智慧问答项目-(一)项目介绍项目架构项目环境配置

项目介绍

项目概述

1.背景介绍

近年来,随着ChatGPT的广泛应用,基于大规模语言模型(LLM)的技术已成为人工智能领域的研究和应用热点,。尤其是大模型在各类自然语言处理任务中的成功应用,推动了教育行业的智能化转型。然而,当前市面上大多数大语言模型存在一个普遍的问题:这些模型主要依赖于过往的训练数据无法动态获取最新的知识以及各企业特有的私有知识。这种局限性常常导致生成答案时出现“幻觉”问题即模型提供的答案与实际情况不符或不准确

解决幻觉的方法:

  • 提示词:简单,快速就能见效。解决不了信息滞后、私有知识的问题

  • RAG:相对简单,很快见效,快速解决知识的问题,。 模型本身没有变化,模型的能力没有提升

  • 微调:相对困难,高质量数据 + 复杂的算法,需要算力,成本高。不能快速解决知识问题,模型能力能得到提升(补分)

  • Agent:因为调用各类工具,模型的能力被外部工具加强,同样的也能获取到最新、最准确的知识

为了有效解决这一问题,企业普遍采用了以下两种主要手段:

  1. 基于企业私有知识的垂直领域微调:通过将企业领域的特定知识融合到大模型中,进行微调,使得模型能够更好地服务于垂直行业的专业需求
  2. 基于企业私有知识的RAG(Retrieval-Augmented Generation 检索增强生成)问答系统:通过构建基于检索的问答框架,结合企业私有知识库,实现更为精准且动态更新的知识问答服务,从而减少幻觉问题的发生

这里的智慧问答项目是基于RAG架构,能够通过实时检索相关知识库中的信息来增强大模型的生成能力,确保回答的准确性和时效性。与此同时,系统通过自动化处理答疑需求,极大地减轻了人工客服的工作压力,从而实现了高效、低成本的知识服务

该项目使用LangChainQwen2.5-7B-Instruct大模型构建一个基于本地知识库的问答系统,解决企业在实际应用中的挑战,并展示这一系统在教育领域中的广泛应用潜力

2.项目架构

2.1 RAG原理

流程:

  • 1.Retrieve(检索):把query转成向量和向量库中的内容进行相似度计算,取出相似度最高的N条数据(context)

  • 2.Augment(增强):将query和context结合起来,得到新的提示词,示例:

  • 3.Generate(生成):把提示词给大模型,生成答案

为什么向量库的嵌入模型需要和查询的嵌入模型完全一致?

2.2 项目流程

离线部分(把数据写到mysql或者milvus数据准备过程):

  • 1.FQA日志高频文档对数据,写入mysql【来自于业务团队】

  • 2. 本地知识文档,进行切分,向量化,存入到milvus【内部文档、选手手册等等】

学科在线答疑系统的两大模块:

  • 1.FAQ:用户的query去高频问答对中去查询(查mysql),如果阈值大于0.85,返回问题对应的答案

  • 2.RAG:用户的query通过embedding模型进行向量化,再去milvus中进行检索,返回结果中保留topK个,在和query进行拼接,然后通过大模型得到结果

在线答疑系统RAG主要步骤:

  • 第一步:将现有后台搜集的FQA数据集存储到Mysql数据库中
  • 第二步:基于query实现Mysql数据库检索:将query和现有问题匹配(做相似度计算),如果阈值>=0.85,就认为问题比较明确,直接返回对应的答案;;否则,进入RAG检索系统
  • 第三步:搭建本地知识库:对本地文档加载读取;进行文档分割文档向量化;存储向量数据库(Milvus)
  • 第四步:基于query实现Milvus数据库检索:将query进行向量表示,并从Milvus数据库中检索出相似的top-k个文本段。
  • 第五步:将query和检索出的top-k文本段拼接,送入大模型,实现预测

2.3 项目结构

3. 项目环境(window)

  • 操作系统
  • Windows 11
  • 硬件要求
  • 至少 8GB 内存(建议 16GB 或更高)。
  • 至少 20GB 可用磁盘空间(Milvus 和 Redis 数据存储)。
  • 网络要求
  • 稳定的互联网连接,用于拉取 Docker 镜像。
  • 软件版本
  • Milvus:2.4.4(最新稳定版)。
  • Redis:7.2(最新稳定版)。
  • 端口要求
  • Milvus:19530(gRPC)、9091(RESTful API)。
  • Redis:6379(默认端口)。
  • 确保以上端口未被占用

3.1 python虚拟环境

(1). 创建虚拟环境
# 创建虚拟环境, 安装3.10及以上的python解析器 (最好是3.10.18) conda create -n edu_rag python==3.10.18 # 切换虚拟环境 conda activate edu_rag
(2).依赖文件requirements.txt
addict==2.4.0 aiofiles==25.1.0 aiohappyeyeballs==2.6.1 aiohttp==3.13.3 aiosignal==1.4.0 annotated-doc==0.0.4 annotated-types==0.7.0 anyio==4.12.1 appdirs==1.4.4 async-timeout==4.0.3 attrs==25.4.0 backoff==2.2.1 bcrypt==5.0.0 beautifulsoup4==4.14.3 build==1.4.0 certifi==2026.2.25 cffi==2.0.0 chardet==6.0.0.post1 charset-normalizer==3.4.4 chromadb==1.3.5 click==8.3.1 coloredlogs==15.0.1 cryptography==46.0.5 dataclasses-json==0.6.7 datasets==3.3.1 dill==0.3.8 distro==1.9.0 durationpy==0.10 emoji==2.15.0 exceptiongroup==1.3.1 faiss-cpu==1.13.2 fastapi==0.115.12 filelock==3.25.0 filetype==1.2.0 flatbuffers==25.12.19 frozenlist==1.8.0 fsspec==2024.12.0 googleapis-common-protos==1.72.0 grpcio==1.67.1 h11==0.16.0 hf-xet==1.3.2 httpcore==1.0.9 httptools==0.7.1 httpx==0.27.2 httpx-sse==0.4.3 huggingface_hub==0.36.2 humanfriendly==10.0 idna==3.11 importlib_metadata==8.7.1 importlib_resources==6.5.2 jieba==0.42.1 Jinja2==3.1.6 jiter==0.13.0 joblib==1.5.3 jsonpatch==1.33 jsonpointer==3.0.0 jsonschema==4.26.0 jsonschema-specifications==2025.9.1 kubernetes==35.0.0 langchain==1.2.10 langchain-chroma==1.1.0 langchain-classic==1.0.1 langchain-community==0.4.1 langchain-core==1.2.16 langchain-experimental==0.4.1 langchain-ollama==1.0.1 langchain-openai==1.1.10 langchain-text-splitters==1.1.1 langchain-unstructured==1.0.1 langdetect==1.0.9 langgraph==1.0.8 langgraph-checkpoint==4.0.1 langgraph-prebuilt==1.0.8 langgraph-sdk==0.3.9 langsmith==0.7.9 lxml==6.0.2 Markdown==3.6 markdown-it-py==4.0.0 MarkupSafe==3.0.3 marshmallow==3.26.2 mdurl==0.1.2 milvus-model==0.2.5 mmh3==5.2.0 modelscope==1.23.0 mpmath==1.3.0 multidict==6.7.1 multiprocess==0.70.16 mypy_extensions==1.1.0 nest-asyncio==1.6.0 networkx==3.4.2 nltk==3.9.1 numexpr==2.11.0 numpy==2.2.6 oauthlib==3.3.1 ollama==0.6.1 onnxruntime==1.23.2 openai==2.24.0 opencv-python==4.10.0.84 opentelemetry-api==1.39.1 opentelemetry-exporter-otlp-proto-common==1.39.1 opentelemetry-exporter-otlp-proto-grpc==1.39.1 opentelemetry-proto==1.39.1 opentelemetry-sdk==1.39.1 opentelemetry-semantic-conventions==0.60b1 orjson==3.11.7 ormsgpack==1.12.2 overrides==7.7.0 pandas==2.3.1 Pillow==9.5.0 posthog==5.4.0 propcache==0.4.1 protobuf==6.33.5 pyarrow==23.0.1 pybase64==1.4.3 pyclipper==1.4.0 pycparser==3.0 pydantic==2.12.5 pydantic-settings==2.13.1 pydantic_core==2.41.5 Pygments==2.19.2 PyJWT==2.11.0 pymilvus==2.5.4 PyMuPDF==1.23.16 PyMuPDFb==1.23.9 PyMySQL==1.1.1 pypdf==6.7.4 pypdfium2==5.5.0 PyPika==0.51.1 pyproject_hooks==1.2.0 pysbd==0.3.4 python-dateutil==2.9.0.post0 python-docx==1.1.2 python-dotenv==1.2.2 python-iso639==2026.1.31 python-magic==0.4.27 python-pptx==0.6.23 pytz==2025.2 PyYAML==6.0.3 ragas==0.2.6 rank-bm25==0.2.2 RapidFuzz==3.14.3 rapidocr-onnxruntime==1.3.8 redis==5.3.1 referencing==0.37.0 regex==2026.2.28 requests==2.32.5 requests-oauthlib==2.0.0 requests-toolbelt==1.0.0 rich==14.3.3 rpds-py==0.30.0 safetensors==0.7.0 scikit-learn==1.7.2 scipy==1.15.3 sentence-transformers==3.0.1 sentencepiece==0.2.0 setuptools==75.1.0 shapely==2.1.2 shellingham==1.5.4 simplejson==3.19.2 six==1.17.0 sniffio==1.3.1 sortedcontainers==2.4.0 soupsieve==2.8.3 SQLAlchemy==2.0.47 starlette==0.46.2 sympy==1.14.0 tabulate==0.9.0 tenacity==9.1.4 threadpoolctl==3.6.0 tiktoken==0.7.0 tokenizers==0.20.4 tomli==2.4.0 torch==2.10.0 tqdm==4.67.3 transformers==4.45.0 typer==0.24.1 typing-inspect==0.9.0 typing-inspection==0.4.2 typing_extensions==4.15.0 tzdata==2025.3 ujson==5.11.0 unstructured==0.11.0 unstructured-client==0.42.10 urllib3==2.6.3 uuid_utils==0.14.1 uvicorn==0.41.0 uvloop==0.22.1 watchfiles==1.1.1 websocket-client==1.9.0 websockets==16.0 wikipedia==1.4.0 wrapt==2.1.1 xlsxwriter==3.2.9 xxhash==3.6.0 yarl==1.23.0 zipp==3.23.0 zstandard==0.25.0 FlagEmbedding==1.3.5 peft==0.18.1
(3).安装项目依赖包
# 安装依赖包, 在requirements.txt对应路径下执行以下命令 pip install -r requirements.txt

如果安装过程不顺利,可以按需逐个安装:

# conda create -n edu_rag python==3.10.18 # conda activate edu_rag # Python版本: 3.10.18 # 使用方法:先安装python 3.10.18或者创建一个conda的3.10.18的环境,并激活。然后运行以下命令 pip install ollama==0.4.4 pip install requests==2.32.3 pip install numexpr==2.11.0 pip install unstructured==0.11.0 pip install langchain-core==1.2.16 pip install langchain_community==0.4.1 pip install langchain-ollama==1.0.1 pip install langchain_unstructured==1.0.1 pip install langchain_experimental==0.4.1 pip install langchain_chroma==1.1.0 pip install langchain-text-splitters==1.1.1 pip install langgraph==1.0.8 pip install nltk==3.9.1 pip install chromadb==1.3.5 pip install wikipedia==1.4.0 pip install faiss-cpu pip install pymilvus==2.5.4 pip install pandas==2.3.1 pip install jieba pip install rank_bm25==0.2.2 pip install redis==5.3.1 pip install pymysql==1.1.1 pip install opencv-python==4.10.0.84 pip install PyMuPDF==1.23.16 pip install python-docx==1.1.2 pip install pillow==10.4.0 pip install rapidocr-onnxruntime==1.3.8 pip install python-pptx==0.6.23 pip install transformers==4.45.0 pip install modelscope==1.23.0 pip install addict==2.4.0 pip install datasets==3.3.1 pip install simplejson==3.19.2 pip install sortedcontainers==2.4.0 pip install markdown==3.6 pip install sentence-transformers==3.0.1 pip install milvus-model==0.2.5 pip install tiktoken==0.7.0 pip install sentencepiece==0.2.0 pip install ragas==0.2.6 pip install starlette==0.46.2 pip install fastapi==0.115.12 pip install FlagEmbedding==1.3.5 pip install peft==0.18.1

3.2 安装DockerDesktop

(1).安装WSL
  • 启用WSL打开具有管理员权限的PowerShell,运行以下命令以安装WSL:

    wsl --install

    如果出现上面问题: 说明电脑系统版本可能较旧,或者未开启必要的系统组件,导致无法识别wsl命令。这通常发生在 Windows 10 的早期版本中, 所以先更新window版本,然后重试命令:wsl --install 即可

安装完后自动跳转页面,关闭即可

安装完成后,重启电脑

(2).安装docker
  • 下载并安装Docker Desktop

    • 访问Docker官方网站,下载适用于Windows/Mac的Docker Desktop安装包

  • 安装Docker Desktop
    • 双击下载的安装文件(老师发的资料中有),按照提示一路下一步完成安装
    • 安装完成后,点击close and restart重启电脑以完成配置

验证Docker安装

  • 打开PowerShell或命令提示符,运行以下命令,验证是否成功安装

    docker --version docker compose version

4. 配置DockerCompose文件

(1).创建项目目录

  • 在本地磁盘(例如:C盘)创建文件夹milvus_redis,用于存放Milvus和Redis的配置文件和数据:

(2).创建docker-compose文件

先创建docker-compose.txt格式文件, 然后修改为docker-compose.yml格式

(3).添加内容

把以下内容复制粘贴到创建的docker-compose.yml文件:

# version: '3.5' # Windows/x86_64 Version # Redis Password set to: 1234 services: etcd: container_name: milvus-etcd image: quay.io/coreos/etcd:v3.5.5 environment: - ETCD_AUTO_COMPACTION_MODE=revision - ETCD_AUTO_COMPACTION_RETENTION=1000 - ETCD_QUOTA_BACKEND_BYTES=4294967296 - ETCD_ENABLE_V2=true volumes: - ./volumes/etcd:/etcd/data command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd/data minio: container_name: milvus-minio image: minio/minio:RELEASE.2023-03-20T20-16-18Z environment: MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin volumes: - ./volumes/minio:/minio/data command: minio server /minio/data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 30s timeout: 20s retries: 3 standalone: container_name: milvus-standalone # 使用多架构镜像,Docker on Windows 会自动拉取 x86_64 版本 image: milvusdb/milvus:v2.4.4 command: ["milvus", "run", "standalone"] environment: - ETCD_ENDPOINTS=etcd:2379 - MINIO_ADDRESS=minio:9000 volumes: - ./volumes/milvus:/var/lib/milvus ports: - "19530:19530" - "9091:9091" depends_on: - "etcd" - "minio" redis: container_name: milvus-redis image: redis:latest restart: always ports: - "6379:6379" volumes: - ./volumes/redis:/data # 设置 Redis 密码为 1234 command: redis-server --requirepass 1234 networks: default: name: milvus-network

说明

  • Milvus 服务

  • image: 使用 Milvus 官方镜像milvusdb/milvus:v2.4.10

  • ports: 映射 gRPC(19530)和 RESTful API(9091)端口。
  • volumes: 数据持久化存储到本地./volumes/milvus目录。
  • environment: 配置日志级别和 Etcd 参数。
  • command: 启动 Milvus 单机模式。

  • Redis 服务

  • image: 使用 Redis 官方镜像redis:7.2

  • ports: 映射默认端口6379
  • volumes: 数据持久化存储到本地./volumes/redis目录。
  • command: 启用 AOF(Append Only File)持久化模式。

  • volumes: 定义持久化存储卷

5.启动Milvus和Redis

(1).拉取镜像并启动容器

  • 进入上述自己创建的milvus_redis目录下,打开具有管理员权限的PowerShell终端,运行:

    # -d 表示后台运行容器 docker compose up -d

  • 注意: 拉取镜像时报错: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

以下为解决方法, 添加镜像源:

  • linux方案: CSDN链接:https://blog.csdn.net/jhgj56/article/details/142209517?fromshare=blogdetail&sharetype=blogdetail&sharerId=142209517&sharerefer=PC&sharesource=weixin_45056110&sharefrom=from_link

  • window方案: 咱们当前是window环境,所以直接复制以下内容去docker软件中粘贴即可:

"registry-mirrors": [ "https://docker.211678.top", "https://docker.1panel.live", "https://hub.rat.dev", "https://docker.m.daocloud.io", "https://do.nark.eu.org", "https://dockerpull.com", "https://dockerproxy.cn", "https://docker.awsl9527.cn" ]

重启docker生效

然后再次去milvus_redis 目录下,打开 PowerShell,运行:

(2).docker查看是否成功

启动成功后去docker看看是否正常启动

6.验证Milvus和Redis

(1).测试Milvus连接

  • 创建Python脚本(例如 test_milvus.py )

    from pymilvus import connections, utility # 连接到 Milvus connections.connect(host="localhost", port="19530") # 检查版本 print(f"Milvus version: {utility.get_server_version()}")
  • 在EduRAG虚拟环境下运行脚本

    # cmd终端执行命令 # 输出类似Milvus version: 2.4.10 表示Milvus部署成功 python test_milvus.py

(2).测试Redis连接

  • 创建Python脚本(例如 test_redis.py )

    import redis # 连接到 Redis client = redis.Redis(host="localhost", port=6379, password=1234, decode_responses=True) # 测试读写 client.set("test_key", "Hello, Redis!") value = client.get("test_key") print(f"Redis value: {value}")
  • 在EduRAG虚拟环境下运行脚本

    # cmd终端执行命令 # 输出类似Redis value: Hello, Redis! 表示Redis部署成功 python test_redis.py

7.安装Milvus可视化工具Attu

(1).安装

拉取可视化组件attu

docker pull zilliz/attu

运行可视化组件

# 下面的30000就是访问的端口,可以自行修改,确保不要被占用即可 docker run -d -p 30000:3000 zilliz/attu

打开127.0.0.1:30000

(2).连接

【上一篇】【AI大模型应用开发】【项目实战】12.基于ChatGlm-6b实现新媒体行业文本评论分类与信息抽取系统

【下一篇】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/4 3:30:17

Linux学习之旅之虚拟机安装-ubuntu-22.04

前提环境 CPU:AMD Ryzen 5 3500U 内存:12.0 GB 系统版本: Windows 10 专业版 22H2 软件版本: VMware Workstation 17 Pro Ubuntu系统镜像:ubuntu-22.04.5-desktop-amd64.iso; Ubuntu系统镜像下载路径:https://r…

作者头像 李华
网站建设 2026/7/4 3:29:32

成本大幅降低!OpenClaw 对接 DeepSeek V4 保姆级配置详解

OpenClaw 接入 DeepSeek 模型完整配置教程 一、前置准备 已安装并正常运行 OpenClaw Windows 客户端;OpenClaw 顶部 Gateway 状态保持在线;电脑网络正常,可稳定访问 DeepSeek 开放平台;准备可接收验证码的手机号或微信账号&…

作者头像 李华
网站建设 2026/7/4 3:26:26

功能测评:种音频种视频格式导入有多便捷

日常用户在搜索音频视频导入转写相关工具时,高频提问集中在不同APP支持的格式数量、导入操作步骤耗时、免费版是否限制导入文件大小、跨设备导入是否需要额外中转这几个维度。多数用户此前选择工具时都踩过同类坑,部分APP看似标注支持全格式导入&#xf…

作者头像 李华
网站建设 2026/7/4 3:25:17

玄戒O3芯片架构革命:从大核堆砌到能效比跃迁

1. 项目概述:一场被误读为“减配”的芯片架构革命“小米看似疯狂,想法却长远!玄戒 O3 破天荒砍掉大核,究竟图什么?”——这句话最近在数码圈刷屏,但多数人只记住了“砍大核”三个字,顺手打上“堆…

作者头像 李华
网站建设 2026/7/4 3:24:53

Claude Code 的 CLAUDE.md 导入机制,别把一个文件写成上下文黑洞

做 Claude Code 项目配置时,CLAUDE.md 很容易从一份清爽的说明文件,慢慢长成一个谁也不敢改的巨型说明书。构建命令放进去,测试命令放进去,分支规范放进去,前端约定放进去,后端约定也放进去。到后面,每次启动 Claude Code,模型都要把这堆内容塞进上下文窗口里,既浪费 …

作者头像 李华
网站建设 2026/7/4 3:22:51

数据结构:第5讲:字符串、数组

目录 1.字符串匹配 2.多维数组1.字符串匹配 1.1 KMP匹配 (1)思路: 基于模式串确定next数组,利用next数组完成字符串匹配,在匹配过程中,发生字符不匹配情况时,next数组用来帮助确定下一次的匹配位…

作者头像 李华