开启左侧

LangGraph-agent 系列之4——RAG

[复制链接]
AI小编 发表于 2 小时前 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
作者: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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题
阅读排行更多+

Powered by Discuz! X3.4© 2001-2013 Discuz Team.( 京ICP备17022993号-3 )