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

📅 2026/7/4 3:31:00
【AI大模型应用开发】【项目实战】13.RAG智慧问答项目-(一)项目介绍项目架构项目环境配置
项目介绍项目概述1.背景介绍近年来随着ChatGPT的广泛应用基于大规模语言模型LLM的技术已成为人工智能领域的研究和应用热点,。尤其是大模型在各类自然语言处理任务中的成功应用推动了教育行业的智能化转型。然而当前市面上大多数大语言模型存在一个普遍的问题这些模型主要依赖于过往的训练数据无法动态获取最新的知识以及各企业特有的私有知识。这种局限性常常导致生成答案时出现“幻觉”问题即模型提供的答案与实际情况不符或不准确。解决幻觉的方法提示词简单快速就能见效。解决不了信息滞后、私有知识的问题RAG相对简单很快见效快速解决知识的问题,。 模型本身没有变化模型的能力没有提升微调相对困难高质量数据 复杂的算法需要算力成本高。不能快速解决知识问题模型能力能得到提升补分Agent因为调用各类工具模型的能力被外部工具加强同样的也能获取到最新、最准确的知识为了有效解决这一问题企业普遍采用了以下两种主要手段基于企业私有知识的垂直领域微调通过将企业领域的特定知识融合到大模型中进行微调使得模型能够更好地服务于垂直行业的专业需求基于企业私有知识的RAGRetrieval-Augmented Generation 检索增强生成问答系统通过构建基于检索的问答框架结合企业私有知识库实现更为精准且动态更新的知识问答服务从而减少幻觉问题的发生这里的智慧问答项目是基于RAG架构能够通过实时检索相关知识库中的信息来增强大模型的生成能力确保回答的准确性和时效性。与此同时系统通过自动化处理答疑需求极大地减轻了人工客服的工作压力从而实现了高效、低成本的知识服务该项目使用LangChain和Qwen2.5-7B-Instruct大模型构建一个基于本地知识库的问答系统解决企业在实际应用中的挑战并展示这一系统在教育领域中的广泛应用潜力2.项目架构2.1 RAG原理流程1.Retrieve(检索)把query转成向量和向量库中的内容进行相似度计算取出相似度最高的N条数据context2.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 镜像。软件版本Milvus2.4.4最新稳定版。Redis7.2最新稳定版。端口要求Milvus19530gRPC、9091RESTful API。Redis6379默认端口。确保以上端口未被占用3.1 python虚拟环境(1). 创建虚拟环境# 创建虚拟环境, 安装3.10及以上的python解析器 最好是3.10.18 conda create -n edu_rag python3.10.18 # 切换虚拟环境 conda activate edu_rag(2).依赖文件requirements.txtaddict2.4.0 aiofiles25.1.0 aiohappyeyeballs2.6.1 aiohttp3.13.3 aiosignal1.4.0 annotated-doc0.0.4 annotated-types0.7.0 anyio4.12.1 appdirs1.4.4 async-timeout4.0.3 attrs25.4.0 backoff2.2.1 bcrypt5.0.0 beautifulsoup44.14.3 build1.4.0 certifi2026.2.25 cffi2.0.0 chardet6.0.0.post1 charset-normalizer3.4.4 chromadb1.3.5 click8.3.1 coloredlogs15.0.1 cryptography46.0.5 dataclasses-json0.6.7 datasets3.3.1 dill0.3.8 distro1.9.0 durationpy0.10 emoji2.15.0 exceptiongroup1.3.1 faiss-cpu1.13.2 fastapi0.115.12 filelock3.25.0 filetype1.2.0 flatbuffers25.12.19 frozenlist1.8.0 fsspec2024.12.0 googleapis-common-protos1.72.0 grpcio1.67.1 h110.16.0 hf-xet1.3.2 httpcore1.0.9 httptools0.7.1 httpx0.27.2 httpx-sse0.4.3 huggingface_hub0.36.2 humanfriendly10.0 idna3.11 importlib_metadata8.7.1 importlib_resources6.5.2 jieba0.42.1 Jinja23.1.6 jiter0.13.0 joblib1.5.3 jsonpatch1.33 jsonpointer3.0.0 jsonschema4.26.0 jsonschema-specifications2025.9.1 kubernetes35.0.0 langchain1.2.10 langchain-chroma1.1.0 langchain-classic1.0.1 langchain-community0.4.1 langchain-core1.2.16 langchain-experimental0.4.1 langchain-ollama1.0.1 langchain-openai1.1.10 langchain-text-splitters1.1.1 langchain-unstructured1.0.1 langdetect1.0.9 langgraph1.0.8 langgraph-checkpoint4.0.1 langgraph-prebuilt1.0.8 langgraph-sdk0.3.9 langsmith0.7.9 lxml6.0.2 Markdown3.6 markdown-it-py4.0.0 MarkupSafe3.0.3 marshmallow3.26.2 mdurl0.1.2 milvus-model0.2.5 mmh35.2.0 modelscope1.23.0 mpmath1.3.0 multidict6.7.1 multiprocess0.70.16 mypy_extensions1.1.0 nest-asyncio1.6.0 networkx3.4.2 nltk3.9.1 numexpr2.11.0 numpy2.2.6 oauthlib3.3.1 ollama0.6.1 onnxruntime1.23.2 openai2.24.0 opencv-python4.10.0.84 opentelemetry-api1.39.1 opentelemetry-exporter-otlp-proto-common1.39.1 opentelemetry-exporter-otlp-proto-grpc1.39.1 opentelemetry-proto1.39.1 opentelemetry-sdk1.39.1 opentelemetry-semantic-conventions0.60b1 orjson3.11.7 ormsgpack1.12.2 overrides7.7.0 pandas2.3.1 Pillow9.5.0 posthog5.4.0 propcache0.4.1 protobuf6.33.5 pyarrow23.0.1 pybase641.4.3 pyclipper1.4.0 pycparser3.0 pydantic2.12.5 pydantic-settings2.13.1 pydantic_core2.41.5 Pygments2.19.2 PyJWT2.11.0 pymilvus2.5.4 PyMuPDF1.23.16 PyMuPDFb1.23.9 PyMySQL1.1.1 pypdf6.7.4 pypdfium25.5.0 PyPika0.51.1 pyproject_hooks1.2.0 pysbd0.3.4 python-dateutil2.9.0.post0 python-docx1.1.2 python-dotenv1.2.2 python-iso6392026.1.31 python-magic0.4.27 python-pptx0.6.23 pytz2025.2 PyYAML6.0.3 ragas0.2.6 rank-bm250.2.2 RapidFuzz3.14.3 rapidocr-onnxruntime1.3.8 redis5.3.1 referencing0.37.0 regex2026.2.28 requests2.32.5 requests-oauthlib2.0.0 requests-toolbelt1.0.0 rich14.3.3 rpds-py0.30.0 safetensors0.7.0 scikit-learn1.7.2 scipy1.15.3 sentence-transformers3.0.1 sentencepiece0.2.0 setuptools75.1.0 shapely2.1.2 shellingham1.5.4 simplejson3.19.2 six1.17.0 sniffio1.3.1 sortedcontainers2.4.0 soupsieve2.8.3 SQLAlchemy2.0.47 starlette0.46.2 sympy1.14.0 tabulate0.9.0 tenacity9.1.4 threadpoolctl3.6.0 tiktoken0.7.0 tokenizers0.20.4 tomli2.4.0 torch2.10.0 tqdm4.67.3 transformers4.45.0 typer0.24.1 typing-inspect0.9.0 typing-inspection0.4.2 typing_extensions4.15.0 tzdata2025.3 ujson5.11.0 unstructured0.11.0 unstructured-client0.42.10 urllib32.6.3 uuid_utils0.14.1 uvicorn0.41.0 uvloop0.22.1 watchfiles1.1.1 websocket-client1.9.0 websockets16.0 wikipedia1.4.0 wrapt2.1.1 xlsxwriter3.2.9 xxhash3.6.0 yarl1.23.0 zipp3.23.0 zstandard0.25.0 FlagEmbedding1.3.5 peft0.18.1(3).安装项目依赖包# 安装依赖包, 在requirements.txt对应路径下执行以下命令 pip install -r requirements.txt如果安装过程不顺利可以按需逐个安装# conda create -n edu_rag python3.10.18 # conda activate edu_rag # Python版本 3.10.18 # 使用方法先安装python 3.10.18或者创建一个conda的3.10.18的环境并激活。然后运行以下命令 pip install ollama0.4.4 pip install requests2.32.3 pip install numexpr2.11.0 pip install unstructured0.11.0 pip install langchain-core1.2.16 pip install langchain_community0.4.1 pip install langchain-ollama1.0.1 pip install langchain_unstructured1.0.1 pip install langchain_experimental0.4.1 pip install langchain_chroma1.1.0 pip install langchain-text-splitters1.1.1 pip install langgraph1.0.8 pip install nltk3.9.1 pip install chromadb1.3.5 pip install wikipedia1.4.0 pip install faiss-cpu pip install pymilvus2.5.4 pip install pandas2.3.1 pip install jieba pip install rank_bm250.2.2 pip install redis5.3.1 pip install pymysql1.1.1 pip install opencv-python4.10.0.84 pip install PyMuPDF1.23.16 pip install python-docx1.1.2 pip install pillow10.4.0 pip install rapidocr-onnxruntime1.3.8 pip install python-pptx0.6.23 pip install transformers4.45.0 pip install modelscope1.23.0 pip install addict2.4.0 pip install datasets3.3.1 pip install simplejson3.19.2 pip install sortedcontainers2.4.0 pip install markdown3.6 pip install sentence-transformers3.0.1 pip install milvus-model0.2.5 pip install tiktoken0.7.0 pip install sentencepiece0.2.0 pip install ragas0.2.6 pip install starlette0.46.2 pip install fastapi0.115.12 pip install FlagEmbedding1.3.5 pip install peft0.18.13.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 version4. 配置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_MODErevision - ETCD_AUTO_COMPACTION_RETENTION1000 - ETCD_QUOTA_BACKEND_BYTES4294967296 - ETCD_ENABLE_V2true volumes: - ./volumes/etcd:/etcd/data command: etcd -advertise-client-urlshttp://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_ENDPOINTSetcd:2379 - MINIO_ADDRESSminio: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: 映射 gRPC19530和 RESTful API9091端口。volumes: 数据持久化存储到本地./volumes/milvus目录。environment: 配置日志级别和 Etcd 参数。command: 启动 Milvus 单机模式。Redis 服务image: 使用 Redis 官方镜像redis:7.2。ports: 映射默认端口6379。volumes: 数据持久化存储到本地./volumes/redis目录。command: 启用 AOFAppend 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?fromshareblogdetailsharetypeblogdetailsharerId142209517sharereferPCsharesourceweixin_45056110sharefromfrom_linkwindow方案: 咱们当前是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(hostlocalhost, port19530) # 检查版本 print(fMilvus 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(hostlocalhost, port6379, password1234, decode_responsesTrue) # 测试读写 client.set(test_key, Hello, Redis!) value client.get(test_key) print(fRedis value: {value})在EduRAG虚拟环境下运行脚本# cmd终端执行命令 # 输出类似Redis value: Hello, Redis! 表示Redis部署成功 python test_redis.py7.安装Milvus可视化工具Attu(1).安装拉取可视化组件attudocker pull zilliz/attu运行可视化组件# 下面的30000就是访问的端口可以自行修改确保不要被占用即可 docker run -d -p 30000:3000 zilliz/attu打开127.0.0.1:30000(2).连接【上一篇】【AI大模型应用开发】【项目实战】12.基于ChatGlm-6b实现新媒体行业文本评论分类与信息抽取系统【下一篇】