ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

完整指南:4 个任务搭出会回答企业问题的 RAG 智能体

完整指南:4 个任务搭出会回答企业问题的 RAG 智能体 完整指南4 个任务搭出会回答企业问题的 RAG 智能体【免费下载链接】llm-universe本项目是一个面向小白开发者的大模型应用开发教程在线阅读地址https://datawhalechina.github.io/llm-universe/项目地址: https://gitcode.com/GitHub_Trending/ll/llm-universe凌晨两点客服群里被问“这个型号运费怎么算”答案只有老员工知道而且每次新文档上线答案就变。会一点 Python 的你花一个下午读完本文可以基于 llm-universe 教程搭出一个 RAG 智能体它回答前会先检索企业文档知识库、能调用数据库工具、记得多轮对话还能系统性地评估和调参。四个任务都带完成标志逐个可验证。 成果预览先说结论跑完下面四个任务你得到一个“个人知识库助手”形态的 RAG 智能体能做五件事检索后再答回答前先从 Chroma 向量库取最相关的 3 个片段塞进上下文教程示例里 196 页 PDF 9 个 Markdown 文件共建成 1004 条向量多轮记忆第二句“它是什么”会先被 LLM 补全成完整问题再去检索工具调用能对“查询销售库”这类声明过的函数发起结构化调用网页界面一条 streamlit 命令起聊天页面回答逐字流式输出评估流程坏案例累积成验证集prompt 版本用 1~5 分均分对比图教程搭好的 RAG 智能体用 Streamlit 部署后的聊天页面提问在左、流式回答在右⚙️ 环境准备主推本地路径不需要 GPU普通电脑即可只需备一个大模型厂商的 API Key。教程另附 GitHub Codespaces 云环境选修章浏览器里就能完成见 docs/C1/C1.md。git clone https://gitcode.com/GitHub_Trending/ll/llm-universe # 下载教程 cd llm-universe # 进入仓库 conda create -n llmuni python3.10 -y conda activate llmuni # 建并激活环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 装 LangChain 0.3 等依赖另外两件事把各厂商密钥写进克隆目录根部的.env如OPENAI_API_KEY、ZHIPUAI_API_KEY教程代码用 python-dotenv 自动加载requirements.txt 锁死langchain0.3.0示例都按 0.3 的 API 编写pip 拉到更新版本可能直接导入报错任务一把企业知识喂给模型RAG目标把一堆 PDF/Markdown 文档变成 Chroma 向量库让“先查再答”成为智能体的第一步。做法四步走读取、切分、向量化、落盘。读取PyMuPDFLoader读 PDF每页一个 Document速度最快UnstructuredMarkdownLoader读 Markdown切分RecursiveCharacterTextSplitter每块 500 字符、重叠 50 字符避免上下文被切断向量化ZhipuAIEmbeddings模型 embedding-32048 维落盘Chroma.from_documents向量库写入磁盘重启不用重建from langchain_community.document_loaders import PyMuPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.vectorstores import Chroma docs PyMuPDFLoader(manual.pdf).load() # 1.读取PDF chunks RecursiveCharacterTextSplitter( # 2.切分 chunk_size500, chunk_overlap50 ).split_documents(docs) vectordb Chroma.from_documents(chunks, # 34.向量化并持久化 ZhipuAIEmbeddings(), persist_directorychroma_db)完整实现见 notebook/C3 搭建知识库/C3.ipynb智谱封装在 notebook/C3 搭建知识库/zhipuai_embedding.py原理与各家 Embedding 对比见 docs/C3/C3.md。图递归字符分割器的 chunk_size 与 chunk_overlap 边界示意教程默认 500/50完成标志print(vectordb._collection.count())打印出 1004教程示例数据vectordb.similarity_search(什么是大语言模型, k3)返回 3 个片段前两条与问题语义相关。任务二给智能体装上工具工具调用目标让智能体有“手”能自己调用查数据库、调 API 这类外部函数而不只是答题。做法核心是 Function Calling——你声明函数名、参数和用途模型生成结构化调用请求应用执行函数并把结果还给模型。Agent 循环即理解目标 → 选择工具和参数 → 执行工具 → 读取结果 → 决定继续操作还是回答用户。LangChain 0.3 里用tool装饰器包装函数即可注册from langchain_core.tools import tool tool def query_sales(query: str): 查询企业销售数据库用于查询某时间段或某产品的销售统计 return 查询结果本季度销售额120万元任务一的检索链也可以注册成工具让模型自己决定“何时查、查几次”这种形态叫 Agentic RAG。概念与循环细节见 docs/C1/C1.md 的“Agent 与工具调用”一节。完成标志问“本季度销售额多少”模型返回工具名query_sales加参数对象的调用请求而不是编一个数字用AgentExecutor跑能看到“调用工具 → 读结果作答”两步记录。任务三让对话有记忆多轮上下文目标用户第二句“它是什么”还能被正确检索并回答。做法三层叠加。ChatPromptTemplate预留{chat_history}占位符把历史消息和问题一起送进 prompt有历史时先让 LLM补全问题问题改写再去检索避免“它是什么”直接撞向量库Streamlit 应用把消息存在st.session_state跨轮次自然保留上下文from langchain_core.runnables import RunnableBranch condense_prompt ChatPromptTemplate([ (system, 请根据聊天记录完善用户最新的问题不需要完善则原样返回。), (placeholder, {chat_history}), (human, {input}), ]) retrieve_docs RunnableBranch( (lambda x: not x.get(chat_history), (lambda x: x[input]) | retriever), condense_prompt | llm | StrOutputParser() | retriever, )完整实现含问答拼装与流式输出见 notebook/C4 构建 RAG 应用/streamlit_app.py逐行讲解在 notebook/C4 构建 RAG 应用/C4.ipynb。完成标志连续两轮先问“西瓜书是什么”再问“南瓜书跟它有什么关系”第二轮能基于周志华《机器学习》正确检索并作答聊天窗口中保留第一轮问答记录。任务四验证与调优评估与参数目标用小型验证集 坏案例回路判断哪版 prompt 和参数更好而不是“凭感觉”。做法教程的评估方法分三件事。量化评估每个回答打 1~5 分取均值如版本 A [4, 2]、版本 B [3, 5]均分 3.0 对 4.0选 B多维评估知识查找正确性、回答一致性、幻觉比例、回答正确性四个维度各打 0~1参数调节事实性问答把temperature设为 0召回片段数k默认 3scores {versionA: [4, 2], versionB: [3, 5]} avg {k: sum(v) / len(v) for k, v in scores.items()} # A:3.0, B:4.0 llm ChatOpenAI(temperature0) # 降低随机性 retriever vectordb.as_retriever(search_kwargs{k: 3}) # 召回3个片段坏案例归因是关键相关片段没进 top k 召回是检索问题回任务一调 chunk_size 与 overlap进了还不答对是生成问题改 prompt。练习代码见 notebook/C5 系统评估与优化/C5.ipynb方法论见 docs/C5/C5.md。图教程的评估流程——找坏案例、针对性优化、扩充验证集、循环迭代完成标志prompt 版本 B 均分超过版本 A且旧的好案例不降分即可换 B 上线每发现一个坏案例就补进验证集让它从 2 条涨到十几条。 完整案例把个人知识库装进 RAG 智能体用“个人知识库助手”把四个任务串成一个真实场景。架构要点知识层Chroma 向量库教程示例 1004 条 ZhipuAIEmbeddings检索层as_retriever召回 k3带任务三的问题改写分支生成层ChatOpenAIgpt-4otemperature0系统提示明确要求“不知道就说不知道”界面层Streamlitst.session_state存对话历史st.write_stream逐字输出功能清单基于知识库问答减少编造可回查召回片段多轮对话历史自动补全指代不全的问题坏案例可人工标注累积进评估集一键启动streamlit run notebook/C4 构建 RAG 应用/streamlit_app.py图个人知识库助手整体架构源文档进向量库检索链接 LLM聊天前端在右侧图RAG 智能体实际对话效果第二轮“关系”类问题仍能基于上文检索作答案例完整解读见 docs/C6/案例1个人知识库助手.md另一个把 prompt 工程用到极致的案例人情世故大模型“天机”见 docs/C6/案例2人情世故大模型系统-天机.md。⚠️ 踩坑清单症状回答总说不知道或答偏 → 原因检索没召回相关片段 → 解法chunk_size 从 500 降到 300、k 从 3 提到 5并先确认源文档确实加载入库症状第二轮问题检索结果乱 → 原因“它是什么”语义不全向量相似度低 → 解法加上任务三的问题改写分支RunnableBranch症状加载向量库报 embedding 维度不匹配 → 原因加载时的 Embedding 模型与建库时不一致 → 解法建库和加载统一用 ZhipuAIEmbeddingsembedding-3症状import langchain 报错 → 原因pip 拉了新版本而示例按 0.3 的 API 编写 → 解法按 requirements.txt 锁定 langchain0.3.0 安装症状调用千帆报 403 / IamSignatureInvalid → 原因AK/SK 未入环境或签名过期 → 解法检查 .env 中 QIANFAN_AK、QIANFAN_SK 后重新获取 token资源索引概念与环境docs/C1/C1.mdLLM、RAG、LangChain、Agent 与工具调用、环境配置知识库搭建notebook/C3 搭建知识库/C3.ipynbRAG 应用notebook/C4 构建 RAG 应用/C4.ipynb检索问答链、多轮历史评估调优notebook/C5 系统评估与优化/C5.ipynb进阶分块notebook/C7 高级 RAG 技巧/2. 数据处理/2.分块优化.ipynb四个任务跑完你就有了一个能检索、会记忆、可调优的问答智能体。下一步把教程示例文档换成你自己的企业文档重跑任务一对比召回效果。【免费下载链接】llm-universe本项目是一个面向小白开发者的大模型应用开发教程在线阅读地址https://datawhalechina.github.io/llm-universe/项目地址: https://gitcode.com/GitHub_Trending/ll/llm-universe创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表