在当代软件中,复杂的使命每每超出了单个 Agent 的本领,必要通过多 Agent 代理来协同工作,共享上下文,并动态办理题目。
1.引言
由于协调交互和保持对流程的控制的复杂性,使用多个代理管理工作流具有挑战性。通过结合 LangChain4j 和 Spring State Machine,我们可以构建一个灵活、有效的多代理系统,能够处理复杂的工作流。
- LangChain4j:简化了使用 LLM 创建应用步调的过程,但缺乏对使用反馈循环编排多代理系统的内置支持。
- Spring State Machine:通过状态、转换和变乱提供结构化的工作流管理,从而增强控制和错误处理。
在本教程中,我们将构建一个多代理系统,通过以下步调来评估需求、生成办理方案并迭代验证输出:
- 用户输入:提供了初始要求。
- 需求评估:系统评估可行性,假如必要调整,则提供反馈。
- 办理方案生成:Python 脚本是根据经过验证的要求生成的。
- 办理方案验证:根据初始要求查抄脚本。
- 需求优化:假如必要,系统会优化需求并循环以改进办理方案。
- 最终输出:经过验证的办理方案呈现给用户。
2.项目构建
使用 Java 17 或更高版本创建一个 Spring Boot 项目,并将 LangChain4j 和 Spring State Machine 的以下依靠项添加到pom.xml:
- <dependencies>
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-spring-boot-starter</artifactId>
- <version>0.33.0</version>
- </dependency>
- <dependency>
- <groupId>dev.langchain4j</groupId>
- <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
- <version>0.33.0</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.statemachine</groupId>
- <artifactId>spring-statemachine-starter</artifactId>
- <version>4.0.0</version>
- </dependency>
- </dependencies>
复制代码 注意: 我们将使用 OpenAI 模型,但也可以使用任何其他 LLM。
接下来,我们在 LangChain4j 提供的 demo key 中添加以部属性:application.properties
- langchain4j.open-ai.chat-model.api-key=demo
- langchain4j.open-ai.chat-model.model-name=gpt-3.5-turbo
复制代码 3.代理开辟
为了创建一个功能性的多智能体系统,我们使用 LangChain4j 实现了专门的智能体。每个智能体在根据用户需求评估、生成、验证和完善办理方案方面都发挥着独特的作用。
3.1. 需求评估器
此代理评估用户提供的要求的可行性:
- @AiService
- public interface RequirementsEvaluator {
-
- @UserMessage("""
- Evaluate the given requirements to determine if they are clear, concise, and feasible to implement in a single Python file.
- Return true if the requirements are clear and achievable; otherwise, return false.
- Requirements:
- """)
- boolean areRequirementsFeasible(@V("requirements") String requirements);
- }
复制代码 3.2. 脚本生成器
根据批准的要求生成 Python 脚本:
- @AiService
- public interface ScriptGenerator {
-
- @UserMessage("""
- You are an expert Python developer. Create only the Python CLI application script based on the given requirements.
- Do not include any explanations, comments, or additional text—only the code itself.
- Requirements:
- """)
- String generateScript(@V("requirements") String requirements);
- }
复制代码 3.3. 办理方案验证步调
根据初始要求验证生成的脚本:
- @AiService
- public interface SolutionVerifier {
-
- @UserMessage("""
- Review the provided Python script to ensure it accurately solves the problem as described in the requirements.
- If the script does not meet the requirements, return false and specify the issues.
- Requirements:
- Script:
- """)
- boolean isScriptValid(@V("script") String script, @V("requirements") String requirements);
- }
复制代码 注意: 为了得到更健壮的系统,我们可以集成 LangChain4j 的工具实行功能,以自动运行和测试生成的代码。但是,此示例将重点放在基本交互上,以保持简单性。
3.4. 需求重写器
假如办理方案未通过验证,则优化要求:
- @AiService
- public interface RequirementsRewriter {
-
- @UserMessage("""
- The following Python script failed to meet the specified requirements.
- Rewrite the requirements to incorporate necessary improvements while maintaining the original intent.
- Requirements:
- Script:
- Return the improved requirements.
- """)
- String rewriteRequirements(@V("requirements") String requirements, @V("script") String script);
- }
复制代码 4. 配置状态机
为了管理代理之间的工作流,我们配置 Spring State Machine 来界说状态、变乱和转换,从而使我们能够精确控制系统的举动。
4.1. 界说状态、变乱和变量
我们首先将状态和变乱界说为罗列,以表示工作流中的步调。每个状态代表流程的一个阶段,而变乱则触发这些阶段之间的转换:
- enum States {
-
- AWAITING_INPUT, REQUIREMENTS_EVALUATION, SCRIPT_GENERATION, SOLUTION_VERIFICATION, REQUIREMENTS_REVISION, SUCCESSFUL_COMPLETION, INVALID_REQUIREMENTS
- }
- enum Events {
-
- INPUT_RECEIVED, REQUIREMENTS_EVALUATED, REQUIREMENTS_REJECTED, SCRIPT_GENERATED, SOLUTION_VERIFIED, SOLUTION_REJECTED, REQUIREMENTS_REWRITTEN,
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |