# java-agent **Repository Path**: ai-sample/java-agent ## Basic Information - **Project Name**: java-agent - **Description**: 纯Java原生语言,不借助于任何框架实现Agent的各种运行模式 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-05 - **Last Updated**: 2026-01-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java Agent 基于大语言模型的 Java 智能代理框架,实现了多种智能代理模式,包括 ReAct、Plan and Execute、Reflection、Few-Shot、Reason without Observation、LLMCompiler、Reflexion、Self-Discover、LATS 和 Multi-Agent。 ## 简介 Java Agent 是一个用 Java 实现的智能代理框架,通过集成大语言模型(LLM)的能力,让 Agent 能够自主思考和执行工具调用,解决复杂的任务。 项目提供了多种 Agent 模式: - **ReAct Agent**: 推理-行动模式,通过循环思考和行动来逐步完成任务 - **Plan and Execute Agent**: 计划-执行模式,先制定完整计划,再逐步执行每个步骤 - **Reflection Agent**: 反思模式,通过思考-行动-反思循环来完成任务,能够评估自己的行为并根据反馈进行调整 - **Few-Shot Agent**: 少样本模式,通过提供少量示例来指导AI如何完成任务 - **Reason without Observation Agent (REWOO)**: 推理与观察分离模式,将推理过程与外部观察分离,包含Planner、Worker和Solver三个组件 - **LLMCompiler Agent**: 编译器模式,通过并行Function calling提高效率,包含Planner、Task Fetching Unit和Joiner三个组件 - **Reflexion Agent**: 反思学习模式,使用语言反馈信号来帮助agent从前失败的经验中学习 - **Self-Discover Agent**: 自我发现模式,自动发现用于解决复杂推理问题的任务内在推理结构 - **LATS Agent**: 语言代理树搜索模式,是Tree Search + ReAct + Plan&solve的融合体,使用蒙特卡罗树搜索算法探索解决方案 - **Multi-Agent System**: 多智能体协作模式,模拟软件开发团队的工作流程,包含PM、DevOps、Tech Lead和SDE四个代理 ## 特性 - 🤖 支持多种 LLM 模型(默认使用 Qwen3:8b) - 🛠️ 内置文件读写、命令执行等工具 - 🔧 可扩展的工具函数接口 - 💭 完整的思考和执行日志输出 - 🔒 终端命令执行需要用户确认,确保安全性 - 🌐 支持多种先进的Agent模式 - 👥 支持多智能体协作 ## 环境要求 - JDK 8+ - Maven 3.6+ - 本地 LLM 服务(如 Ollama,默认运行在 `http://localhost:11434`) ## 快速开始 ### 1. 环境配置 设置 API Key 环境变量: ```bash # Windows set API_KEY=your_api_key_here # Linux/Mac export API_KEY=your_api_key_here ``` ### 2. 编译项目 ```bash cd java-agent mvn clean package ``` ### 3. 运行各种 Agent ```bash # ReAct Agent java -cp target/java-agent-1.0.jar com.artislong.agent.ReActAgent # Plan and Execute Agent java -cp target/java-agent-1.0.jar com.artislong.agent.PlanAndExecuteAgent # Reflection Agent java -cp target/java-agent-1.0.jar com.artislong.agent.ReflectionAgent # Few-Shot Agent java -cp target/java-agent-1.0.jar com.artislong.agent.FewShotAgent # Reason without Observation Agent (REWOO) java -cp target/java-agent-1.0.jar com.artislong.agent.ReasonWithoutObservationAgent # LLMCompiler Agent java -cp target/java-agent-1.0.jar com.artislong.agent.LLMCompilerAgent # Reflexion Agent java -cp target/java-agent-1.0.jar com.artislong.agent.ReflexionAgent # Self-Discover Agent java -cp target/java-agent-1.0.jar com.artislong.agent.SelfDiscoverAgent # LATS Agent java -cp target/java-agent-1.0.jar com.artislong.agent.LATS # Multi-Agent System java -cp target/java-agent-1.0.jar com.artislong.agent.MultiAgentSystem ``` ## 项目结构 ``` java-agent/ ├── src/main/java/com/artislong/ │ ├── agent/ │ │ ├── ReActAgent.java # ReAct 模式代理 │ │ ├── PlanAndExecuteAgent.java # 计划-执行模式代理 │ │ ├── ReflectionAgent.java # 反思模式代理 │ │ ├── FewShotAgent.java # 少样本模式代理 │ │ ├── ReasonWithoutObservationAgent.java # 推理与观察分离模式代理 │ │ ├── LLMCompilerAgent.java # 编译器模式代理 │ │ ├── ReflexionAgent.java # 反思学习模式代理 │ │ ├── SelfDiscoverAgent.java # 自我发现模式代理 │ │ ├── LATS.java # 语言代理树搜索模式代理 │ │ ├── PMAgent.java # 项目经理代理 │ │ ├── DevOpsAgent.java # DevOps代理 │ │ ├── TechLeadAgent.java # 技术负责人代理 │ │ ├── SDEAgent.java # 软件开发工程师代理 │ │ └── MultiAgentSystem.java # 多智能体系统主类 │ ├── entity/ │ │ ├── ActionCall.java # 动作调用实体 │ │ └── PlanStep.java # 计划步骤实体 │ ├── tools/ │ │ ├── ToolFunction.java # 工具函数接口 │ │ ├── ReadFileTool.java # 读取文件工具 │ │ ├── WriteToFileTool.java # 写入文件工具 │ │ └── RunCommandTool.java # 运行命令工具 │ └── utils/ │ └── AgentUtil.java # Agent 工具类 └── pom.xml ``` ## Agent 模式说明 ### ReAct Agent ReAct(Reasoning + Acting)模式通过"思考-行动-观察"的循环来完成任务: 1. **思考**:分析当前情况,决定下一步行动 2. **行动**:调用相应的工具函数 3. **观察**:获取工具执行结果 4. **循环**:重复上述步骤,直到获得最终答案 **适用场景**: - 需要动态调整策略的任务 - 每一步行动依赖上一步结果的场景 - 复杂的多步推理任务 ### Plan and Execute Agent Plan and Execute 模式采用"先计划后执行"的策略: 1. **计划**:一次性制定完整的执行计划(JSON 格式) 2. **执行**:使用 ReAct 模式逐步执行每个步骤 3. **总结**:汇总所有步骤结果,生成最终答案 **适用场景**: - 目标明确、步骤可预测的任务 - 需要保持全局视角的复杂任务 - 多步骤、多阶段的任务 ### Reflection Agent Reflection 模式通过"思考-行动-反思"的循环来完成任务: 1. **思考**:分析当前情况,决定下一步行动 2. **行动**:调用相应的工具函数 3. **观察**:获取工具执行结果 4. **反思**:对行动和结果进行反思,评估是否朝着目标前进 5. **循环**:重复上述步骤,直到获得最终答案 **适用场景**: - 需要评估和调整策略的复杂任务 - 需要持续改进解决方案的场景 - 对执行过程有反思需求的任务 ### Few-Shot Agent Few-Shot 模式通过提供少量示例来指导AI如何完成任务: 1. **示例学习**:基于提供的示例学习任务解决模式 2. **模式应用**:将学到的模式应用到新任务 3. **任务执行**:按照学习到的模式完成任务 **适用场景**: - 需要快速适应新任务的场景 - 模式识别和类比推理任务 - 需要示例引导的复杂任务 ### Reason without Observation Agent (REWOO) REWOO(Reason without Observation)模式将推理与观察分离: 1. **Planner**:将任务分解为带依赖关系的计划步骤 2. **Worker**:执行计划中的工具调用 3. **Solver**:基于计划和结果生成最终答案 **适用场景**: - 需要预先规划的复杂任务 - 逻辑推理类任务 - 需要模块化处理的任务 ### LLMCompiler Agent LLMCompiler 模式通过并行执行提高效率: 1. **Planner**:将问题分解为DAG任务列表 2. **Task Fetching Unit**:根据依赖关系调度任务并行执行 3. **Joiner**:综合结果生成最终答案 **适用场景**: - 多个独立查询任务 - 需要并行处理的场景 - 依赖关系明确的任务 ### Reflexion Agent Reflexion 模式通过从失败中学习来提高性能: 1. **Actor**:基于环境和历史经验生成动作 2. **Evaluator**:评估执行结果质量 3. **Self-reflexion**:生成语言反馈信号 4. **Memory**:存储短期和长期记忆 **适用场景**: - 需要多次尝试和学习的任务 - 复杂推理和决策任务 - 需要持续改进的场景 ### Self-Discover Agent Self-Discover 模式自动发现推理结构: 1. **发现阶段**:选择、适应、实施推理模块 2. **应用阶段**:按照推理结构逐步解决问题 **适用场景**: - 复杂推理问题 - 需要自适应推理结构的任务 - 多种推理方法组合的场景 ### LATS Agent LATS(Language Agent Tree Search)模式是Tree Search + ReAct + Plan&solve的融合体: 1. **选择(Selection)**:使用UCB1算法选择最有潜力的节点 2. **扩展和执行(Expansion & Execution)**:生成多个潜在操作并并行执行 3. **反思+评估(Reflection + Evaluation)**:评估行动结果并生成反思 4. **反向传播(Backpropagation)**:更新节点统计信息 **适用场景**: - 需要探索多种解决方案的复杂任务 - 需要平衡探索与利用的决策问题 - 需要从失败中学习并改进的场景 ### Multi-Agent System 多智能体协作模式模拟软件开发团队的工作流程: 1. **用户(User)**:向系统提出查询或任务请求 2. **项目经理代理(PM Agent)**:分析用户查询并分配任务给其他代理 3. **DevOps代理(DevOps Agent)**:接收PM任务并进一步分配给Tech Lead代理 4. **技术负责人代理(Tech Lead Agent)**:接收DevOps任务并进一步分配给SDE代理 5. **软件开发工程师代理(SDE Agent)**:接收Tech Lead任务并执行具体操作 6. **结果反馈**:各代理完成任务后将结果反馈给上一级代理 7. **综合响应**:PM代理综合所有结果,生成最终响应返回给用户 **适用场景**: - 复杂的软件开发任务 - 需要多层次任务分解的场景 - 需要专业化分工的复杂项目 - 模拟团队协作的工作流程 ## 内置工具 | 工具名称 | 签名 | 说明 | |---------|------|------| | read_file | (file_path) | 读取文件内容 | | write_to_file | (file_path, content) | 写入内容到文件 | | run_terminal_command | (command) | 执行终端命令(需用户确认) | ## 自定义工具 实现 `ToolFunction` 接口即可创建自定义工具: ```java public class MyCustomTool implements ToolFunction { @Override public String getName() { return "my_tool"; } @Override public String getSignature() { return "(param1, param2)"; } @Override public String getDescription() { return "自定义工具描述"; } @Override public String execute(String... args) throws Exception { // 实现工具逻辑 return "执行结果"; } } ``` 然后注册到 Agent: ```java List tools = new ArrayList<>(); tools.add(new ReadFileTool()); tools.add(new WriteToFileTool()); tools.add(new RunCommandTool()); tools.add(new MyCustomTool()); // 添加自定义工具 ReActAgent agent = new ReActAgent(tools, "qwen3:8b", projectDir); ``` ## 依赖 - Hutool 5.8.42:Java 工具类库 - Lombok 1.18.42:简化 Java 代码 ## 安全提示 - 终端命令执行需要用户手动确认(输入 Y/N) - 确保在可信的环境中运行 - 注意保护 API Key 等敏感信息 ## 示例 ### ReAct Agent 示例 ``` 请输入任务:帮我查找当前目录下的所有 Java 文件并统计数量 💭 Thought: 我需要先获取当前目录下的文件列表,然后筛选出 Java 文件并统计数量。可以使用 run_terminal_command 工具。 🔧 Action: run_terminal_command("dir /s *.java") 是否继续?(Y/N)Y 🔍 Observation:执行成功 💭 Thought: 我已经获取了文件列表,现在可以分析输出并统计 Java 文件数量。 🔧 Action: run_terminal_command("dir /s *.java | find /c \".java\"") 是否继续?(Y/N)Y 🔍 Observation:执行成功 💭 Thought: 我已经完成了任务,现在可以给出最终答案。 ✅ Final Answer:当前目录下共有 15 个 Java 文件 ``` ### Plan and Execute Agent 示例 ``` 请输入任务:分析项目结构并生成文档 📝 正在制定计划... 📋 制定的计划: [ {"step": 1, "description": "读取项目目录结构"}, {"step": 2, "description": "分析主要源代码文件"}, {"step": 3, "description": "生成项目文档"} ] ✅ 解析出 3 个计划步骤 🚀 开始执行计划... 执行步骤 1/3: 读取项目目录结构 ... 执行过程 ... ✅ 步骤 1 完成,结果: ... 执行步骤 2/3: 分析主要源代码文件 ... 执行过程 ... ✅ 步骤 2 完成,结果: ... 执行步骤 3/3: 生成项目文档 ... 执行过程 ... ✅ 步骤 3 完成,结果: ... 📝 生成最终答案... ✅ Final Answer:项目文档已生成完毕,包含项目结构、主要模块说明等内容。 ``` ### Reflection Agent 示例 ``` 请输入任务:帮我整理一下项目文档,并确保所有文档都是最新的。 💭 Thought: 这个任务需要先查看项目中的文档文件,然后决定如何整理它们。 🔧 Action: run_terminal_command("ls *.md") ... 🤔 Reflection: 我找到了3个文档文件,现在我需要评估这些文档的内容是否是最新的。我应该先查看每个文档的内容。 ... ✅ Final Answer: 我已经整理了项目文档,更新了README.md和API.md,使其包含最新的功能和API信息。 ``` ### LLMCompiler Agent 示例 ``` 请输入任务:Scott Derrickson和Ed Wood是否是同一个国家的国民? 📝 正在规划任务(DAG)... 📋 生成的DAG任务计划: 执行动作: [run_terminal_command]("search nationality Scott Derrickson") 执行动作: [run_terminal_command]("search nationality Ed Wood") 执行动作: [run_terminal_command]("compare nationality results") 🚀 正在并行执行任务计划... 并行执行任务: 1, 2 ... ✅ Final Answer: Scott Derrickson是美国国籍,Ed Wood也是美国国籍,所以他们是同一个国家的国民。 ``` ### Multi-Agent System 示例 ``` 请输入任务(用户查询):开发一个简单的文件处理工具,包含读取、写入和搜索功能 🚀 启动多智能体系统... 📋 用户查询: 开发一个简单的文件处理工具,包含读取、写入和搜索功能 👤 启动项目经理代理(PM Agent)... 📋 项目经理代理开始分析任务... ... PM代理分析任务并制定计划 ... 📤 将任务分配给DevOps代理... 🔧 DevOps代理开始分析任务... ... DevOps代理分析并分配任务 ... 📤 将任务分配给Tech Lead代理... ⚙️ 技术负责人代理开始分析任务... ... Tech Lead代理进行技术分析 ... 📤 将任务分配给SDE代理... 💻 软件开发工程师代理开始执行任务... ... SDE代理执行具体开发任务 ... ✅ 开发任务执行完成 📤 向Tech Lead代理返回结果... ... 技术负责人验证结果 ... 📤 向DevOps代理返回结果... ... DevOps验证结果 ... 📤 向PM代理返回结果... ... PM代理综合结果 ... 📊 综合各代理结果... ✅ 多智能体系统任务完成! 🎉 最终响应: 文件处理工具已开发完成,包含readFile、writeFile和searchFile功能... ``` ## 配置说明 在 `AgentUtil.java` 中修改以下配置: - API_BASE_URL: LLM 服务地址(默认:`http://localhost:11434`) - API: API 端点(默认:`/v1/chat/completions`) - 模型名称:在创建 Agent 时指定(默认:`qwen3:8b`) ## 许可证 本项目仅供学习和研究使用。 ## 作者 artislong