【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 【来自于业务团队】
    1. 本地知识文档,进行切分,向量化,存入到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). 创建虚拟环境
bash 复制代码
# 创建虚拟环境, 安装3.10及以上的python解析器 (最好是3.10.18)
conda create -n edu_rag python==3.10.18
# 切换虚拟环境 
conda activate edu_rag
(2).依赖文件requirements.txt
bash 复制代码
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).安装项目依赖包
bash 复制代码
# 安装依赖包, 在requirements.txt对应路径下执行以下命令 
pip install -r requirements.txt 

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

bash 复制代码
# 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:

    bash 复制代码
    wsl --install 

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

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

安装完成后,重启电脑

(2).安装docker
  • 下载并安装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)

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

重启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 )

    bash 复制代码
    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实现新媒体行业文本评论分类与信息抽取系统

【下一篇】

相关推荐
神奇小汤圆1 小时前
AI Coding 不只靠 Prompt:Agent 工程闭环如何接入 DevOps
人工智能
hongmai6668881 小时前
ESP32-S2-MINI-2U-N4R2:一款为灵活部署而生的Wi-Fi MCU模组
人工智能·单片机·嵌入式硬件·物联网·智能家居
神奇小汤圆1 小时前
AI Agent 替你写代码没问题,但这 3 类后端任务让它当场翻车
人工智能
lyy-独立开发者2 小时前
主动推理-人工海马
人工智能
云栖梦泽在2 小时前
Claude Code / Codex 使用卡顿怎么办?AI 编程 Agent 连接失败与网络排查思路
网络·人工智能·网络协议·chatgpt·性能优化
凡泰AI2 小时前
从个人用AI到企业用AI,如何为企业部署一套私有化Agent智能体运行时,将AI变成企业的基础设施
人工智能·ai·架构·agent·cio
蓝速科技2 小时前
蓝速科技三色灯光会议预约门牌深度评测
大数据·人工智能·科技
qq_408753392 小时前
用 AI 写小说实战:开源 Agent 从建书到出第一章
人工智能·aigc·开发工具
太子釢3 小时前
Claude Code 主循环机制详解
人工智能