还在使用langchian创建agent智能体吗?试试LangGraph,翻译langgraph创建agent。

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 的灵感来源于 PregelApache Beam.公共接口灵感来自于 NetworkX. LangGraph是基于LangChain的,但是也可以在没有LangChain的环境下使用。

学习更多LangGraph知识,请查阅我们的第一个LangChain 学院课程,Introduction to LangGraph, 免费使用 here.

关键特性

  • 循环和分支控制: 在你的应用中可以实现循环和判断条件的控制.
  • 持久化: 在graph(图)的每一个步骤中自动保存。随时暂停和恢复graph的执行,以支持错误恢复、人工介入、时间旅行(这是什么后面弄清楚)等。
  • 人工介入: 通过agent,能够中断graph的执行来确认或者编辑下一个动作计划。
  • 流式支持: 每一个节点都能以流式输出 (包括token的流输出).
  • 与langchain进行整合: LangGraph 可以和 LangChainLangSmith无缝集成 (但不是必须依赖).

初始化

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-031. 完善快速开始第一章节;2. 更新快速开始第2章节:利用工具增强机器人,添加网络搜索tool。3. 后续计划:更新快速开始第3章节:为聊天机器人添加记忆功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值