Langchain4j和Spring-StateMachine实现多Agent代理协作

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

在当代软件中,复杂的使命每每超出了单个 Agent 的本领,必要通过多 Agent 代理来协同工作,共享上下文,并动态办理题目。
1.引言

由于协调交互和保持对流程的控制的复杂性,使用多个代理管理工作流具有挑战性。通过结合 LangChain4j 和 Spring State Machine,我们可以构建一个灵活、有效的多代理系统,能够处理复杂的工作流。


  • LangChain4j:简化了使用 LLM 创建应用步调的过程,但缺乏对使用反馈循环编排多代理系统的内置支持。
  • Spring State Machine:通过状态、转换和变乱提供结构化的工作流管理,从而增强控制和错误处理。
在本教程中,我们将构建一个多代理系统,通过以下步调来评估需求、生成办理方案并迭代验证输出:

  • 用户输入:提供了初始要求。
  • 需求评估:系统评估可行性,假如必要调整,则提供反馈。
  • 办理方案生成:Python 脚本是根据经过验证的要求生成的。
  • 办理方案验证:根据初始要求查抄脚本。
  • 需求优化:假如必要,系统会优化需求并循环以改进办理方案。
  • 最终输出:经过验证的办理方案呈现给用户。


2.项目构建

使用 Java 17 或更高版本创建一个 Spring Boot 项目,并将 LangChain4j 和 Spring State Machine 的以下依靠项添加到pom.xml​:
  1. <dependencies>
  2.     <dependency>
  3.         <groupId>dev.langchain4j</groupId>
  4.         <artifactId>langchain4j-spring-boot-starter</artifactId>
  5.         <version>0.33.0</version>
  6.     </dependency>
  7.     <dependency>
  8.         <groupId>dev.langchain4j</groupId>
  9.         <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
  10.         <version>0.33.0</version>
  11.     </dependency>
  12.     <dependency>
  13.         <groupId>org.springframework.statemachine</groupId>
  14.         <artifactId>spring-statemachine-starter</artifactId>
  15.         <version>4.0.0</version>
  16.     </dependency>
  17. </dependencies>
复制代码
注意: 我们将使用 OpenAI 模型,但也可以使用任何其他 LLM。
接下来,我们在 LangChain4j 提供的 demo key 中添加以部属性:application.properties​
  1. langchain4j.open-ai.chat-model.api-key=demo
  2. langchain4j.open-ai.chat-model.model-name=gpt-3.5-turbo
复制代码
3.代理开辟

为了创建一个功能性的多智能体系统,我们使用 LangChain4j 实现了专门的智能体。每个智能体在根据用户需求评估、生成、验证和完善办理方案方面都发挥着独特的作用。
3.1. 需求评估器

此代理评估用户提供的要求的可行性:
  1. @AiService
  2. public interface RequirementsEvaluator {
  3.    
  4.     @UserMessage("""
  5.         Evaluate the given requirements to determine if they are clear, concise, and feasible to implement in a single Python file.
  6.         Return true if the requirements are clear and achievable; otherwise, return false.
  7.         Requirements:
  8.         """)
  9.     boolean areRequirementsFeasible(@V("requirements") String requirements);
  10. }
复制代码
3.2. 脚本生成器

根据批准的要求生成 Python 脚本:
  1. @AiService
  2. public interface ScriptGenerator {
  3.    
  4.     @UserMessage("""
  5.         You are an expert Python developer. Create only the Python CLI application script based on the given requirements.
  6.         Do not include any explanations, comments, or additional text—only the code itself.
  7.         Requirements:
  8.         """)
  9.     String generateScript(@V("requirements") String requirements);
  10. }
复制代码
3.3. 办理方案验证步调

根据初始要求验证生成的脚本:
  1. @AiService
  2. public interface SolutionVerifier {
  3.    
  4.     @UserMessage("""
  5.         Review the provided Python script to ensure it accurately solves the problem as described in the requirements.
  6.         If the script does not meet the requirements, return false and specify the issues.
  7.         Requirements:
  8.         Script:
  9.         """)
  10.     boolean isScriptValid(@V("script") String script, @V("requirements") String requirements);
  11. }
复制代码
注意: 为了得到更健壮的系统,我们可以集成 LangChain4j 的工具实行功能,以自动运行和测试生成的代码。但是,此示例将重点放在基本交互上,以保持简单性。
3.4. 需求重写器

假如办理方案未通过验证,则优化要求:
  1. @AiService
  2. public interface RequirementsRewriter {
  3.    
  4.     @UserMessage("""
  5.         The following Python script failed to meet the specified requirements.
  6.         Rewrite the requirements to incorporate necessary improvements while maintaining the original intent.
  7.         Requirements:
  8.         Script:
  9.         Return the improved requirements.
  10.         """)
  11.     String rewriteRequirements(@V("requirements") String requirements, @V("script") String script);
  12. }
复制代码
4. 配置状态机

为了管理代理之间的工作流,我们配置 Spring State Machine 来界说状态、变乱和转换,从而使我们能够精确控制系统的举动。
4.1. 界说状态、变乱和变量

我们首先将状态和变乱界说为罗列,以表示工作流中的步调。每个状态代表流程的一个阶段,而变乱则触发这些阶段之间的转换:
  1. enum States {
  2.    
  3.     AWAITING_INPUT, REQUIREMENTS_EVALUATION, SCRIPT_GENERATION, SOLUTION_VERIFICATION, REQUIREMENTS_REVISION, SUCCESSFUL_COMPLETION, INVALID_REQUIREMENTS
  4. }
  5. enum Events {
  6.    
  7.     INPUT_RECEIVED, REQUIREMENTS_EVALUATED, REQUIREMENTS_REJECTED, SCRIPT_GENERATED, SOLUTION_VERIFIED, SOLUTION_REJECTED, REQUIREMENTS_REWRITTEN,
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表