AI创想
标题:
LangGraph-agent 系列之4——RAG
[打印本页]
作者:
AI小编
时间:
4 天前
标题:
LangGraph-agent 系列之4——RAG
作者:CSDN博客
本文实现了一个
基于 RAG(检索增强生成)的智能体
,专门用于回答关于 “2024 年股市表现” 的问题。它通过加载指定的 PDF 文档(Stock_Market_Performance_2024.pdf),构建向量数据库,并结合 LLM(大语言模型)生成基于文档内容的精准回答。
一、核心流程如下:
1. 初始化与依赖加载
导入必要库:langgraph(状态图构建)、langchain(LLM、工具、文档处理)、chroma(向量数据库)等。通过load_dotenv()加载环境变量(主要是 API 密钥)。
2. 文档处理与向量库构建
PDF 加载
:使用PyPDFLoader加载Stock_Market_Performance_2024.pdf,并验证文件是否存在。
文档分割
:通过RecursiveCharacterTextSplitter将 PDF 按chunk_size=1000(每块 1000 字符)、chunk_overlap=200(重叠 200 字符)分割为小片段,便于后续检索。
向量存储
:使用OpenAIEmbeddings(OpenAI 的嵌入模型)将分割后的文档片段转换为向量,存储在 Chroma 向量数据库中(路径为persist_directory,集合名为stock_market)。
3. 工具与智能体定义
检索工具(retriever_tool)
:封装向量库的检索功能,当用户提问时,通过retriever.invoke(query)从向量库中获取最相关的 5 个文档片段(search_kwargs={"k":5}),并返回结果。
LLM 配置
:使用deepseek-chat模型作为主 LLM,并通过bind_tools(tools)绑定检索工具,使模型能生成工具调用指令。
状态定义(AgentState)
:通过TypedDict定义状态结构,核心字段messages用于存储对话历史(用户消息、LLM 响应、工具结果等),通过add_messages确保消息追加而非替换。
4. 状态图(LangGraph)工作流程
构建了包含两个节点的状态图,形成 “LLM 决策→工具检索→LLM 生成回答” 的闭环:
llm节点(call_llm函数)
:接收当前对话历史,结合系统提示(system_prompt)调用 LLM 生成响应(可能包含工具调用指令)。
retriever_agent节点(take_action函数)
:解析 LLM 生成的工具调用指令,执行retriever_tool获取相关文档片段,将结果包装为ToolMessage返回。
流转逻辑
:
llm节点后通过should_continue判断:若 LLM 响应包含工具调用,则流向retriever_agent节点执行检索;否则直接结束(END)。retriever_agent节点执行后,结果返回llm节点,继续生成回答(可多轮检索)。
5. 交互流程
通过running_agent函数实现用户交互:
循环接收用户提问(输入 “exit” 或 “quit” 退出)。将用户问题转换为HumanMessage,传入智能体。智能体通过多轮 “检索→生成” 生成回答,并打印结果。
二、代码中使用了两个需要 API 密钥的服务,需在.env文件中配置:
智普AI API 密钥
用途:代码中使用 embeddings = ZhipuAIEmbeddings( mo
原文地址:https://blog.csdn.net/yubo0509/article/details/150269558
欢迎光临 AI创想 (http://llms-ai.com/)
Powered by Discuz! X3.4