你知道什么是LangGraph吗?
LangGraph使我们能够尽可能简单地创建具有状态的多角色应用程序,利用大型语言模型(LLMs)来构建应用程序。它扩展了LangChain的功能,引入了创建和管理循环图的能力。
当深入了解代理系统时,langGraph 的作用范围才被完全发挥。代理系统是利用大语言模型来管理应用程序控制流的系统。其主要功能在于决策指导、工具选择和输出评估。这种代理系统基于代理循环机制工作,该机制包含持续的决策过程,使代理能解决复杂任务。快速回顾一下代理循环,大致如下。
可以为客户服务代理的培训或提升创建一个实际的例子。
背景: 一个由LLM驱动的客服机器人。
用户问道,他们的订单情况怎么样?
LLM决定: 看是直接给出状态还是需要从数据库拿数据。
采取的行动是: 如果需要获取数据,代理人会查询数据库中的订单状态,然后用最新的订单状态信息来更新用户,。
LLM代理的优势有
代理系统的关键组成部分:
所有上述关键组件就像是一个工作流或模式,我们在其中将这些组件建模成一个图。因此,由代理构建的工作流通常是以图的结构呈现的。
因此,LangGraph 是为了构建遵循一些核心原则的代理应用而设计的,例如等等。
LangGraph的基本组成部分有:
在LangGraph中,图表是由以下因素驱动的:
现在我们来应用一下这部分代码。
从langgraph.graph导入StateGraph, MessagesState, START, END 从pydantic导入BaseModel 从langchain_openai导入ChatOpenAI 从langgraph.prebuilt导入ToolNode 从langchain_community.tools导入TavilySearchResults 从IPython.display导入Image 从dotenv导入load_dotenv
导入构建基于图的智能代理所需的必要库和模块。利用LangGraph和LangChain。
2. 创建语言模型的实例:
llm = ChatOpenAI(model='gpt-4o-mini', 温度=0)
3. 为图定义条件逻辑:
定义一个名为 should_continue
的函数,它接收一个 MessagesState
类型的参数,并返回一个布尔值。该函数获取消息列表中的最后一条消息,如果最后一条消息包含工具调用,则返回 'tools';否则,返回 END。
查看最后一个消息是否包含工具调用,以确认智能体是否继续到下一个节点
4. 呼叫LLM:
def 定义调用模型(state: MessagesState): messages = 状态['messages'] 响应 = llm.invoke(消息) 返回 {'messages': 消息 + [响应]}
让LLM根据消息内容给出回复。
5. 构建状态图:
graph = StateGraph(消息状态实例)
// StateGraph
是一个用于处理状态图的类,而 MessagesState
是一个具体的状态对象实例。
6. 向图中添加节点:
graph.add_node('agent', call_model) search_tool = TavilySearchResults(max_results=5) tools = [search_tool] tool_node = ToolNode(tools) graph.add_node('tools', tool_node)
添加一个代理节点到图中,该节点用来调用大模型生成响应。
定义一个搜索工具,用于从搜索引擎检索最多5个结果。
7. 定义图的边和条件转移如下:
graph.add_edge(START, "agent") graph.add_conditional_edges('agent', should_continue) graph.add_edge('tools', 'agent')
定义对话在图中的流程。
8. 编译和绘制图表:
graph_compiled = graph.compile() # 编译图 Image(graph_compiled.get_graph().draw_mermaid_png()) # 获取图形的图形并绘制mermaid PNG图像 (gēngqǔ túxíng de túxíng bìng zhuànhù mermaid PNG túxiàng)
用初始输入运行图
output = graph_compiled.invoke({'messages': [ ('user', '写一份关于在医疗保健行业中使用生成人工智能的简单报告。') ]})
根据用户的初始请求调用图,该请求要求生成关于医疗保健领域生成AI的报告。
10. 步骤10:显示最终结果
from IPython.display import Markdown # 显示最后一个消息的内容 Markdown(output['messages'][-1].content)结论:
这段代码构建了一个用于管理用户和聊天机器人之间对话流程的状态图。它使用LangGraph定义图结构,并通过LangChain集成大语言模型和外部工具。核心逻辑在于根据是否调用工具在节点(代理节点和工具)之间进行转换,从而形成一个多步骤对话AI应用的强大框架。整个流程可视化,并通过一个测试查询最终执行,展示了响应生成的过程。
如果有帮助,请点赞或留言评论❤️🙏