5.3.2 两种方法的统一

装饰器底层会基于我们重写的方法构造一个AgentMiddleware子类的实例,以@after_model 装饰器底层实现为例,关键代码如下

图片[1]-5.3.2 两种方法的统一-大赛人网

这是after_model最终返回的内容。
上述代码中的wrapped是after_model内部的装饰器,代码如下

图片[2]-5.3.2 两种方法的统一-大赛人网

上述代码等价于

图片[3]-5.3.2 两种方法的统一-大赛人网

而func(state, runtime) 正是我们定义的、被@after_model 修饰的函数,在上述案例中对应的是
after_model_middleware,
上述代码的含义是

  1. 创建一个AgentMiddleware的子类
  2. 类名为middleware_name,即创建agent时传递的中间件名称,上述案例中是after_model_middleware
  3. 这个子类有两个属性state_schema 和tools
  4. 有一个方法: after_model ,逻辑等同于func(state, runtime) 。
  5. 最后的括号() 表示实例化子类,返回一个对象

所以,用装饰器最终返回的也是一个AgentMiddleware的子类对象,并且重写了after_model方法,和
基于类的自定义方式本质是一样的。

5.3.3 参数说明

Node-style hooks函数有两个参数
state: 是一个AgentState实例,维护Agent运行过程中的状态,这类状态会随着Agent的运行而发生变化,包括消息列表。
runtime: 是一个Runtime实例,维护Agent运行过程中的上下文环境,包括上下文、长期记忆等。

5.3.4 返回值说明

返回 None:不修改状态(不修改Agent状态)

图片[4]-5.3.2 两种方法的统一-大赛人网

jump_to 目标:

  • “end” – 结束 Agent
  • “tools” – 跳到工具节点
  • 其他自定义节点

5.3.5 装饰器参数:can_jump_to

这里就涉及到Node-style的四个hook函数可以接收额外参数can_jump_to 。
钩子函数可以改变Agent正常的运行轨迹。比如:发现上下文窗口溢出,直接跳转至结尾,提前终止整个Agent。

can_jump_to 决定了钩子函数可以直接跳转至流程的哪些位置,可取值如下:

  • end:跳转至Agent流程末尾,或第一个after_agent钩子,直接终止整个流程。
  • tools:跳转至工具节点。
  • model:跳转至模型节点,或第一个before_model钩子。

1. 基于装饰器实现

图片[5]-5.3.2 两种方法的统一-大赛人网
图片[6]-5.3.2 两种方法的统一-大赛人网
图片[7]-5.3.2 两种方法的统一-大赛人网
图片[8]-5.3.2 两种方法的统一-大赛人网
图片[9]-5.3.2 两种方法的统一-大赛人网
图片[10]-5.3.2 两种方法的统一-大赛人网
图片[11]-5.3.2 两种方法的统一-大赛人网
图片[12]-5.3.2 两种方法的统一-大赛人网
图片[13]-5.3.2 两种方法的统一-大赛人网
© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容