langGraph的中文指引
源文档地址:(https://langchain-ai.github.io/langgraph/)
langchain agent如何迁移到LangGraph:https://python.langchain.com/v0.2/docs/how_to/migrate_agent/
由于使用传统的langchain的AgentExecutor 构建agent没有的灵活性和控制力,langchain官方已经推荐使用langGraph来创建根据灵活易用的langGraph来创建agent,并编写了从langchian的agent迁移到langGraph的教程,可见日后使用langGraph构建agent将会作为langchain团队的重心工作之一。
因此本项目将特地翻译LangGraph的文档。
概述
LangGraph(https://langchain-ai.github.io/langgraph/) 是一个python库,用于构建有状态的,多操作的大模型(LLM)应用程序,用于创建agent(智能体)和multi-agent(组合智能体)流程。和其他的LLM应用框架相比,他提供了核心的优点:循环、可控的和持久化。LangGraph 允许你自定义涉及到循环的流程,这对大多数agent架构来说都是必不可少的,这使它有别于基于DAG的解决方案。作为一个底层的框架,LangGraph为你提供了涉及到流程和状态的应用程序更细颗粒的控制,这对创建可靠的agent应用来说至关重要。另外,LangGraph 包括内置的持久化功能,能支持高级的人工介入(在智能体执行过程中)和记忆功能。
LangGraph 的灵感来源于 Pregel 和 Apache Beam.公共接口灵感来自于 NetworkX. LangGraph是基于LangChain的,但是也可以在没有LangChain的环境下使用。
学习更多LangGraph知识,请查阅我们的第一个LangChain 学院课程,Introduction to LangGraph, 免费使用 here.
关键特性
- 循环和分支控制: 在你的应用中可以实现循环和判断条件的控制.
- 持久化: 在graph(图)的每一个步骤中自动保存。随时暂停和恢复graph的执行,以支持错误恢复、人工介入、时间旅行(这是什么后面弄清楚)等。
- 人工介入: 通过agent,能够中断graph的执行来确认或者编辑下一个动作计划。
- 流式支持: 每一个节点都能以流式输出 (包括token的流输出).
- 与langchain进行整合: LangGraph 可以和 LangChain 、 LangSmith无缝集成 (但不是必须依赖).
初始化
pip install -U langgraph
示例
LangGraph 中一个核心概念是状态(state)。每一个graph执行都会创建一个state,图在传输节点之间执行时,每一个节点执行之后都会在内容部更新这个state并将其返回。graph在内部更新state的方式是由graph的选择或自定义函数(function)定义。
让我们看一个能用搜索工具的简单agent例子。
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, START, StateGraph, MessagesState
from langgraph.prebuilt import ToolNode
# Define the tools for the agent to use
@tool
def search(query: str):
"""Call to surf the web."""
# This is a placeholder, but don't tell the LLM that...
if "sf" in query.lower() or "san francisco" in query.lower():
return "It's 60 degrees and foggy."
return "It's 90 degrees and sunny."
tools = [search]
tool_node = ToolNode(tools)
model = ChatAnthropic(model="claude-3-5-sonnet-20240620", temperature=0).bind_tools(tools)
# Define the function that determines whether to continue or not
# 定义一个函数确定是否继续执行
def should_continue(state: MessagesState) -> Literal["tools", END]:
messages = state['messages']
last_message = messages[-1]
# 如果大模型通知调用工具的时候,我们可以路由到对应的工具节点
if last_message.tool_calls:
return "tools"
# 否则,停止执行(回复用户)
return END
# 定义一个调用大模型的函数
def call_model(state: MessagesState):
messages = state['messages']
response = model.invoke(messages)
# We return a list, because this will get added to the existing list
return {"messages": [response]}
# 定义一个图
workflow = StateGraph(MessagesState)
# 定义两个可以循环的节点
workflow.add_node("agent", call_model)
workflow.add_node("tools", tool_node)
# 定义agent的入口
# 这表示这是第一个被调用的节点
workflow.add_edge(START, "agent")
# We now add a conditional edge 添加条件dege(边)
workflow.add_conditional_edges(
# First, we define the start node. We use `agent`.
# 这表示这些边在`agent`节点调用之后执行
"agent",
# 接下来通过这个函数决定哪一个节点将被调用
should_continue,
)
# We now add a normal edge from `tools` to `agent`. 从工具到agent中添加一个普通的边(edge)
# This means that after `tools` is called, `agent` node is called next.
# 这表示tools工具被调用后,紧接着调用agent节点
workflow.add_edge("tools", 'agent')
# 初始化内从以保存graph之间的允许
checkpointer = MemorySaver()
# 最后编译,编译成一个langchain的runnable,意味着你可以像使用其他任意的runnable一样使用他,注意我们在刚刚编译的时候放入了内存记忆(memory)
app = workflow.compile(checkpointer=checkpointer)
# Use the Runnable
final_state = app.invoke(
{"messages": [HumanMessage(content="what is the weather in sf")]},
config={"configurable": {"thread_id": 42}}
)
final_state["messages"][-1].content
"Based on the search results, I can tell you that the current weather in San Francisco is:\n\nTemperature: 60 degrees Fahrenheit\nConditions: Foggy\n\nSan Francisco is known for its microclimates and frequent fog, especially during the summer months. The temperature of 60°F (about 15.5°C) is quite typical for the city, which tends to have mild temperatures year-round. The fog, often referred to as "Karl the Fog" by locals, is a characteristic feature of San Francisco\'s weather, particularly in the mornings and evenings.\n\nIs there anything else you\'d like to know about the weather in San Francisco or any other location?"
现在我们放入同样的"thread_id"
,上下文对话记录通过保存状态state记忆下来(即存储在消息列表中)
…
项目地址
后续内容将再Github首先更新,那里的比较完整,详见GitHub:
总览链接:总览
快速开始链接:github快速开始
更新记录
更新内容 | 更新日期 |
---|---|
2024-09-30 | 第一版 |
2024-10-03 | 1. 完善快速开始第一章节;2. 更新快速开始第2章节:利用工具增强机器人,添加网络搜索tool。3. 后续计划:更新快速开始第3章节:为聊天机器人添加记忆功能 |