LangGraph中的检查点与人机交互

一、LangGraph的检查点机制

检查点机制是LangGraph中一个强大的功能,它允许我们在图执行的特定点暂停处理,保存状态,并在需要时恢复。

1.1 检查点的基本概念

检查点本质上是图执行过程中的一个快照,包含了当前的状态信息。这对于长时间运行的任务、需要人工干预的流程,或者需要断点续传的应用特别有用。

1.2 创建检查点

在LangGraph中,我们可以使用create_checkpoint函数来创建检查点:

复制代码
from langgraph.checkpoint import create_checkpoint

def process_with_checkpoint(state):
    # 处理逻辑
    # ...
    
    # 创建检查点
    checkpoint = create_checkpoint(state)
    return {"checkpoint": checkpoint, "state": state}

graph.add_node("process", process_with_checkpoint)
复制代码

1.3 恢复检查点

使用load_checkpoint函数可以恢复之前保存的检查点:

复制代码
from langgraph.checkpoint import load_checkpoint

def resume_from_checkpoint(checkpoint):
    state = load_checkpoint(checkpoint)
    # 继续处理
    # ...
    return state

graph.add_node("resume", resume_from_checkpoint)
复制代码

二、实现人在环路(Human-in-the-loop)交互

人在环路交互是指在AI系统的执行过程中,允许人类参与并提供输入或做出决策。LangGraph提供了灵活的机制来实现这种交互。

2.1 使用回调函数实现人机交互

我们可以在图的节点中定义回调函数,用于获取人类输入:

复制代码
def human_input_node(state):
    # 显示当前状态给用户
    print("Current state:", state)
    
    # 获取用户输入
    user_input = input("Please provide your input: ")
    
    # 更新状态
    state['user_input'] = user_input
    return state

graph.add_node("human_input", human_input_node)
复制代码

2.2 条件分支实现人机交互

我们可以使用条件分支来决定是否需要人类干预:

复制代码
def check_confidence(state):
    if state['confidence'] < 0.8:
        return "human_input"
    else:
        return "auto_process"

graph.add_conditional_edges(
    "check_confidence",
    {
        "human_input": lambda s: s['confidence'] < 0.8,
        "auto_process": lambda s: s['confidence'] >= 0.8
    }
)
复制代码

三、实际应用案例:智能客服系统升级版

让我们将检查点机制和人机交互结合到之前的智能客服系统中:

复制代码
from langgraph.prebuilt import ToolMessage, HumanMessage
from langgraph.checkpoint import create_checkpoint, load_checkpoint

def process_query(state):
    # 处理用户查询
    # ...
    state['confidence'] = calculate_confidence(state)
    return state

def human_intervention(state):
    print("Current conversation:", state['messages'])
    human_response = input("Please provide assistance: ")
    state['messages'].append(HumanMessage(content=human_response))
    return state

def summarize_and_prune(state):
    # 总结对话
    summary = summarize_conversation(state['messages'])
    
    # 保留最新的消息和总结
    new_messages = state['messages'][-5:]
    new_messages.append(ToolMessage(content=summary))
    
    state['messages'] = new_messages
    
    # 创建检查点
    checkpoint = create_checkpoint(state)
    state['checkpoint'] = checkpoint
    
    return state

graph = Graph()
graph.add_node("process_query", process_query)
graph.add_node("human_intervention", human_intervention)
graph.add_node("summarize_and_prune", summarize_and_prune)

graph.add_conditional_edges(
    "process_query",
    {
        "human_intervention": lambda s: s['confidence'] < 0.8,
        "summarize_and_prune": lambda s: s['confidence'] >= 0.8
    }
)
graph.add_edge("human_intervention", "summarize_and_prune")
graph.add_edge("summarize_and_prune", "process_query")
复制代码

在这个升级版的智能客服系统中,我们引入了以下改进:

  1. 根据置信度决定是否需要人工干预。
  2. 在每次总结和修剪后创建检查点,以便在需要时恢复状态。
  3. 人工干预节点允许人类直接参与对话。

总结

LangGraph的检查点机制和人机交互功能为构建复杂、可靠的AI系统提供了强大的工具。通过合理使用这些功能,我们可以创建更加智能、灵活且可控的应用程序。检查点允许我们在长时间运行的任务中保存和恢复状态,而人机交互则为AI决策过程引入了人类的判断和专业知识。在实际应用中,这些功能的结合可以显著提高系统的性能和可靠性。

 
posted @   muzinan110  阅读(317)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示