自决策多轮对话智能体的初步实现

2024-09-15 12:46:20 浏览数 (3)

随着大模型的发展,智能体也是越来越火。看到的很多例子是通过构建DAG的形式形成Agent链,和我需要的不太一样。周末有点时间也是改造了一下之前做的个人超级中心,以初步实现自决策多轮对话智能体。基于该智能体,可实现在多轮对话中实现多重智能体的智能选择。

本次改造涉及新组件引入,其中包括langchain4j、spring state machine以及antdesign prochat。

组件基本介绍

langchain4j

langchain4j可以算是langchain的java版本,不过迭代和功能没有python版本的langchain那么全。目前支持了主流的集成与用法,具体可参考官网: https://docs.langchain4j.dev/

spring state machine

Spring State Machine是一个基于Spring Framework的状态机实现,它允许开发者以声明式的方式构建复杂的状态管理和流程控制逻辑。状态机是软件工程中一个常用的设计模式,用于管理系统在不同状态之间的转换,以及每个状态下应该执行的动作。具体可以参考官网:https://spring.io/projects/spring-statemachine/

ant design prochat

ProChat是基于ant design构建的用于快速构建 LLM 聊天界面的组件库。对于使用ant design框架的开发者来说简直就是福音。具体可参考官网: https://pro-chat.antdigital.dev/

基本实现

基本逻辑

结构图结构图

整体流程如上图所示,用户输入信息后,经过super agent根据用户输入的信息决定选择具体的执行智能体,当满足条件1时,选择智能体1,同样满足条件2时,选择智能体2。当选中智能体后,即使用该智能体回答用户问题。

super agent的决策思路

具体逻辑可参考文章:https://sultanov.dev/blog/langchain4j-multi-agent-system-using-state-machine/

基于状态机实现Agent决策,在状态机中定义四个步骤,分别为:

  1. 用户输入评估
  2. Agent选择
  3. Agent校验
  4. 重新选择Agent

在用户输入评估中,用于判断输入问题是否明确,如果不明确则需要进一步让用户提供相关信息;Agent选择是将Agent名称以及描述记录在markdown表示的表格中,根据用户输入一起提供给大模型进行判断选择,之后输出相应智能体;Agent校验是初步使用选择的Agent回答问题,看是否能够回答用户的最初问题;如果前面选择的Agent不能够回答用户的问题,那么会带着原始选择的智能体相关信息以及用户输入重新进入选择Agent阶段,如此往复。

多轮对话中记忆的使用

langchain4j提供了对话记忆的功能,可扩展ChatMemoryStore接口来实现存储功能。考虑到在一个对话框中的多轮对话,是有可能需要使用多个Agent的,所以我也在多个Agent之间实现记忆共享。

初步使用

目前内部集成了用于知识库检索的RAGAgent和用于普通对话的ChatAgent,我们看一个例子,从知识库中检索一些知识,然后再使用ChatAgent询问知识的正确性。

把如下内容存入知识库中:

代码语言:javascript复制
## hbase性能测试结果

| 规格 | 顺序写 | 随机写 | 顺序读 |顺序读|
| - | - | - | -|-|
| 500m,8G | 40843 | 3631 | 6409|7055|
| 1000m,8G | 82940 | 6795 | 13279|15674|
| 2000m,8G | 148700 | 7505 | 23749| 21028|

使用自决策智能体查看hbase性能测试结果。

自决策多轮对话智能体的初步实现自决策多轮对话智能体的初步实现

我们还可以问一下这个结果的合理性。

自决策多轮对话智能体的初步实现自决策多轮对话智能体的初步实现

查看对话历史:

自决策多轮对话智能体的初步实现自决策多轮对话智能体的初步实现

在对话历史中,我们可以发现如果是RAGAgent回答了用户问题,其实是会将用户的问题以及检索出来的信息全部存入记忆中的,这也就为后续其他智能体的回答提供了非常好的背景知识。

总结

目前,这只是一个非常初步的自决策智能体的实现,我希望存入知识库的东西能够在日常使用中合理用起来。

0 人点赞