langgraph学习笔记

langgraph 三个元素:状态、节点、边

  • 状态:对话历史记录、上下文数据、内部变量
  • 节点:输入一个状态,输出另一个状态
  • 边:基于当前状态,决定下一步

状态

python 复制代码
from typing_extensions import TypedDict
from typing import Annotated
from langgraph.graph import add_messages

class MyState(TypedDict):
    messages: Annotated[list, add_messages]

定义一个键值对,类型为列表,作用是add_messages(保存历史记录)

流程图

python 复制代码
from langgraph.graph import StateGraph

graph = StateGraph(MyState)

节点

python 复制代码
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model='gpt-4o',
    api_key="sk",
    base_url="https://xiaoai.plus/v1")

def chatbot(state: MyState):
    return {'messages': [llm.invoke(state['messages'])]}
python 复制代码
graph.add_node('chatbot', chatbot)

add_node添加节点,(名称,函数)

边

python 复制代码
from langgraph.constants import START, END

#  表示: 流程从start----> chatbot
graph.add_edge(START, 'chatbot')

#  表示: 流程从chatbot----> END
graph.add_edge('chatbot', END)

构建图

python 复制代码
graph = graph.compile()

执行

python 复制代码
def loop_graph_invoke(user_input: str):
    """循环调用这个流程图,让AI可以一直和用户对话"""
    result = graph.invoke({'messages': [('user', user_input)]})
    print('AI机器人: ', result['messages'][-1].content)
            
while True:
    try:
        user_input = input('用户: ')
        if user_input.lower() in ['q', 'exit', 'quit']:
            print('对话结束,拜拜!')
            break
        else:
            loop_graph_invoke(user_input)
    except Exception as e:
        print(e)            

工具节点

python 复制代码
from langgraph.prebuilt import ToolNode

tool_node = ToolNode(tools=tools)
graph.add_node('tools', tool_node)

条件边

python 复制代码
from langgraph.prebuilt import tools_condition

# 根据智能体自动决策是否需要调用工具,
graph.add_conditional_edges('agent', tools_condition)

入口节点

python 复制代码
# 设置入口节点
graph.set_entry_point('agent')

langgraph 记忆能力

持久性检查点,checkpointer、thread_id

python 复制代码
from langgraph.checkpoint.memory import MemorySaver

memory_checkpointer = MemorySaver()
graph = graph.compile(checkpointer=memory_checkpointer)
python 复制代码
thread_id = input('请输入一个sessionId:')
config = {"configurable": {"thread_id": thread_id}}

# 执行这个工作流
while True:
    try:
        user_input = input('用户: ')
        if user_input.lower() in ['q', 'exit', 'quit']:
            print('对话结束,拜拜!')
            break
        else:
            loop_graph_invoke(graph, user_input, config)
    except Exception as e:
        print(e)

调用工具前中断

python 复制代码
graph = graph.compile(
    checkpointer=memory_checkpointer,
    interrupt_before=['tools']
)
python 复制代码
interrupt_after=["tools"]

查看状态

python 复制代码
now_state = graph.get_state(config)
print(now_state)

更新状态

python 复制代码
graph.update_state(
        config=config,
        values={'messages': new_message}
    )
相关推荐
2601_967987376 分钟前
Python——入门级(定义功能def函数)
python·函数·可变参数·默认参数·关键字参数
叼烟扛炮1 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip
叼烟扛炮1 小时前
Linux 学习笔记(四十四):HTTP 协议解析与极简 Web 服务器实战
linux·服务器·学习
叼烟扛炮1 小时前
Linux 学习笔记(四十三):网络编程进阶——自定义协议解决 TCP 粘包与守护进程
linux·开发语言·网络·笔记·tcp/ip
songyuc2 小时前
【Manskill3】TableSceneBuilder学习笔记
pytorch·笔记·学习
专注仿真2 小时前
梯度提升类(XFBoost)算法详解与代码实例
开发语言·人工智能·python·算法·大模型训练·控制算法
外收内放2 小时前
Python基础语法练习题(75)
开发语言·python·学习
黑十4 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
゛凌乱的记忆づ4 小时前
好用的md文件编辑器——TyporaS与Typora
笔记·git·typora·markdown
threelab4 小时前
开源图片去水印代码
python