LangGraph人机交互

Agent开发框架之Langgraph

第一章 Langgraph简介与入门
第二章 LangGraph条件边与工具调用
第三章 LangGraph人机交互:中断与调试


文章目录

  • Agent开发框架之Langgraph
  • 前言
  • 一、LangGraph人机交互
  • 代码
  • 总结


前言

在一些程序中,可能需要用户的状态才能使程序继续执行。例如,假如我们部署了一个web页面,在前端的输入框中得到了用户输入,接着后端接收该信息并注入到任务中,使程序根据用户的输入执行。这需要借助LangGraph的中断机制来实现,下面让我们看看怎么做!


一、LangGraph人机交互

为了接收外部的输入,我们先简单的实现一个框架,然后再填充该框架:

class Agent:

    def __init__(self, ...):
        # 初始化
        ...

    def get_app(self):
        # 获取流程图
        ...
        return app
    
    def reply(self, x: str):
    	# 人机交互,根据用户输入或状态,继续下一步执行
    	...

可以看到,我们包装的类主要由三部分组成,第一部分是初始化部分,他可以获得一些初始化信息,如system_prompt、对话流程长度等等,第二部分我们获取流程图,最后一部分实现人机交互逻辑,也即根据用户输入进行流程。

为了能够中断,我们需要让流程图能够实时保存信息,并在中断时持久保存,直到继续运行时加载信息。

from langgraph.checkpoint.memory import MemorySaver

我们首先引入langgraph对持久保存器的支持,然后在流程图上打上断点。

memory = MemorySaver()

app = workflow.compile(
    checkpointer=memory, interrupt_before=["get_user_input"]
)

再次可视化我们的流程图:
LangGraph人机交互_第1张图片
很好,流程图上很清晰的显示了我们的断点,在get_user_input之前进行中断,等待外界输入。

此外,为了锁定同一个流程图,我们可以在初始化过程中指定一个thread。

self.thread_id = str(uuid4())
self.thread = {
   
   "configurable": {
   
   "thread_id": self.thread_id}}

在该线程上,我们将任务流程推进到断点处。

for _ in self.app.stream(self.initial_input, self.thread, stream_mode="values"):
    pass

其中的initial_input是我们使用初始化过程中接收的系统提示和助理开场白。主要是声明了一些现实的信息,如当前时间等。

class Agent:

   def __init__(
       self,
       system_prompt: str = "你是一个乐于助人的人工智能助手。",
       assistant_start: str = "你好,有什么可以帮助您的?",
   ):
       self.initial_input = {
   
   
           "messages": [
               (
                   "system", f"{
     
     system_prompt}\n\n当前时间: {
     
     datetime.now().strftime('%Y-%m-%d %H:%M')}",
               ),
               (

你可能感兴趣的:(人机交互,AIGC,AI编程,gpt)