⚡ 将语言代理构建为图形 ⚡
LangGraph是一个用于构建有状态、多参与者LLM应用程序的库,用于创建代理和多代理工作流。与其他LLM框架相比,它提供了以下核心优势:循环、可控性和持久性。LangGraph允许您定义涉及循环的流程,这对大多数代理架构至关重要,使其与基于DAG的解决方案不同。作为一个非常底层的框架,它为应用程序的流程和状态提供了精细的控制,这对于创建可靠的代理至关重要。此外,LangGraph包含内置的持久性,可实现高级的人机交互和记忆功能。
LangGraph的灵感来自Pregel和Apache Beam。其公共接口借鉴了NetworkX。LangGraph由LangChain Inc.(LangChain的创建者)开发,但可以独立于LangChain使用。
pip install -U langgraph
LangGraph的核心概念之一是状态。每次图执行都会创建一个状态,该状态在图中的节点执行时在它们之间传递,每个节点在执行后都会用其返回值更新这个内部状态。图更新其内部状态的方式由所选图的类型或自定义函数定义。
让我们看一个简单的示例,展示一个可以使用搜索工具的代理。
pip install langchain-anthropic
export ANTHROPIC_API_KEY=sk-...
可选地,我们可以设置LangSmith以获得最佳的可观察性。
export LANGSMITH_TRACING=true export LANGSMITH_API_KEY=lsv2_sk_...
from typing import Annotated, Literal, TypedDict from langchain_core.messages import HumanMessage from langchain_anthropic import ChatAnthropic from langchain_core.tools import tool from langgraph.checkpoint.memory import MemorySaver from langgraph.graph import END, StateGraph, MessagesState from langgraph.prebuilt import ToolNode # 定义代理使用的工具 @tool def search(query: str): """调用以浏览网页。""" # 这只是一个占位符,但不要告诉LLM这一点... if "sf" in query.lower() or "san francisco" in query.lower(): return "气温60度,有雾。" return "气温90度,阳光明媚。" tools = [search] tool_node = ToolNode(tools) model = ChatAnthropic(model="claude-3-5-sonnet-20240620", temperature=0).bind_tools(tools) # 定义决定是否继续的函数 def should_continue(state: MessagesState) -> Literal["tools", END]: messages = state['messages'] last_message = messages[-1] # 如果LLM进行工具调用,我们就路由到"tools"节点 if last_message.tool_calls: return "tools" # 否则,我们停止(回复用户) return END # 定义调用模型的函数 def call_model(state: MessagesState): messages = state['messages'] response = model.invoke(messages) # 我们返回一个列表,因为这将被添加到现有列表中 return {"messages": [response]} # 定义一个新图 workflow = StateGraph(MessagesState) # 定义我们将在其间循环的两个节点 workflow.add_node("agent", call_model) workflow.add_node("tools", tool_node) # 将入口点设置为`agent` # 这意味着这个节点是第一个被调用的 workflow.set_entry_point("agent") # 现在我们添加一个条件边 workflow.add_conditional_edges( # 首先,我们定义起始节点。我们使用`agent`。 # 这意味着这些是在调用`agent`节点后采取的边。 "agent", # 接下来,我们传入将确定下一个调用哪个节点的函数。 should_continue, ) # 现在我们添加一个从`tools`到`agent`的普通边。 # 这意味着在调用`tools`之后,接下来会调用`agent`节点。 workflow.add_edge("tools", 'agent') # 初始化内存以在图运行之间保持状态 checkpointer = MemorySaver() # 最后,我们编译它! # 这将其编译成一个LangChain Runnable, # 意味着你可以像使用任何其他runnable一样使用它。 # 注意,我们在编译图时(可选)传递了内存 app = workflow.compile(checkpointer=checkpointer) # 使用Runnable final_state = app.invoke( {"messages": [HumanMessage(content="旧金山的天气如何")]}, config={"configurable": {"thread_id": 42}} ) final_state["messages"][-1].content
"根据搜索结果,我可以告诉你旧金山当前的天气情况是:
温度:60华氏度(约15.5摄氏度)
天气状况:有雾
旧金山以其微气候和频繁的雾气而闻名,尤其是在夏季月份。60°F的温度对这个城市来说很典型,全年温度都比较温和。雾气,当地人常称之为"卡尔雾",是旧金山天气的一个特征,尤其是在早晨和傍晚。
你还想了解关于旧金山或其他地方的天气情况吗?"
现在当我们传递相同的"thread_id"时,通过保存的状态(即存储的消息列表)保留了对话上下文
final_state = app.invoke( {"messages": [HumanMessage(content="纽约呢")]}, config={"configurable": {"thread_id": 42}} ) final_state["messages"][-1].content
"根据搜索结果,我可以告诉你纽约市当前的天气情况是:
温度:90华氏度(约32.2摄氏度)
天气状况:阳光明媚
这个天气与我们刚刚看到的旧金山的天气有很大不同。纽约现在经历着更温暖的温度。以下是几个要点:
1. 90°F的温度相当热,这是纽约市夏季天气的典型特征。
2. 阳光明媚的条件表明天空晴朗,这很适合户外活动,但也意味着由于阳光直射,可能会感觉更热。
3. 纽约这种天气通常伴随着高湿度,这可能会使体感温度比实际温度更高。
有趣的是看到旧金山温和多雾的天气与纽约炎热晴朗的条件形成鲜明对比。这种差异说明了美国不同地区的天气在同一天可以有多么大的变化。
你还想了解关于纽约或其他地方的天气情况吗?"
ChatAnthropic作为我们的LLM。**注意:**我们需要确保模型知道它可以调用这些工具。我们可以通过使用.bind_tools()方法将LangChain工具转换为OpenAI工具调用格式来实现这一点。MessagesState)来初始化图(StateGraph)MessagesState是一个预构建的状态模式,它有一个属性 -- 一个LangChain Message对象列表,以及将每个节点的更新合并到状态中的逻辑我们需要两个主要节点:
agent节点:负责决定采取什么(如果有)行动。tools节点:如果代理决定采取行动,这个节点将执行该行动。首先,我们需要为图执行设置入口点 - agent节点。
然后我们定义一个普通边和一个条件边。条件边意味着目标取决于图的状态(MessageState)的内容。在我们的例子中,直到代理(LLM)做出决定,目标才能确定。
.invoke()、.stream()和.batch()MemorySaver - 一个简单的内存检查点器LangGraph将输入消息添加到内部状态,然后将状态传递给入口点节点"agent"。
"agent"节点执行,调用聊天模型。
聊天模型返回一个AIMessage。LangGraph将其添加到状态中。
图循环以下步骤,直到AIMessage上没有更多的tool_calls:
AIMessage有tool_calls,"tools"节点执行"agent"节点再次执行并返回AIMessage执行进展到特殊的END值并输出最终状态。
结果,我们得到一个包含所有聊天消息的列表作为输出。
有关如何贡献的更多信息,请参见此处。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号