JoyAgent-JDGenie
综合介绍
JoyAgent-JDGenie是京东开源的一个端到端、产品级的通用多智能体系统。 它与常见的智能体SDK或框架不同,用户下载后不需要进行复杂的二次开发,可以实现开箱即用。当用户输入一个任务,比如“分析最近美元和黄金的走势”,JoyAgent-JDGenie可以直接生成一份网页或PPT格式的报告。该项目的目标是解决快速构建多智能体产品的“最后一公里”问题。此系统相对轻量,并且不依赖于特定的云服务生态(如阿里云百炼或火山引擎)。为了验证其通用性和效果,该项目在GAIA基准测试中取得了75.15%的准确率,其表现超越了多个业界知名的同类产品。 JoyAgent-JDGenie整体开源,包含前端、后端、框架、引擎以及报告生成、代码、PPT、文件等核心子智能体。
功能列表
- 端到端完整产品:提供包含前端、后端的完整多智能体产品,开箱即用,同时也支持二次开发。
- 多种智能体设计模式:框架支持多种主流的智能体设计模式,如ReAct模式和“计划-执行”(plan and executor)模式。
- 高并发执行引擎:内置一个高并发的DAG(有向无环图)执行引擎,用于提升任务执行效率。
- 可插拔的子智能体和工具:预置了报告、搜索、代码、PPT、文件等多种子智能体和工具,用户也可以方便地将自己的智能体或工具集成进来。
- 多种交付格式:能够以HTML、PPT、Markdown等多种格式交付任务成果。
- 跨任务记忆:具备跨任务级别的记忆能力,能够利用相似的历史任务经验来优化当前任务的处理流程。
- 工具自动进化:能够基于现有工具自动拆解、重组,以迭代产生新工具,从而减少生成错误工具的概率。
使用帮助
JoyAgent-JDGenie的设计目标是开箱即用,用户只需进行简单的环境配置和启动,就可以通过对话开始使用。
环境准备
在开始使用前,需要先准备好项目运行所需的基础环境。
- Java环境: 确保系统中安装了JDK 17。
- Python环境: 确保系统中安装了Python 3.11。
- 安装Python依赖: 项目使用
uv
来管理和安装Python依赖包。首先需要安装uv
,然后进入项目目录下的genie-tool
文件夹,执行以下命令来同步环境。pip install uv cd genie-tool uv sync source .venv/bin/activate
快速开始
环境配置完成后,就可以启动项目了。
- 初次启动: 如果是第一次运行该项目,需要执行初始化脚本。这个脚本会完成一些必要的初始设置。
sh start_genie_init.sh
- 日常启动: 在初次初始化之后,每次启动项目时,只需执行以下命令:
sh start_genie.sh
服务启动后,你就可以通过前端界面与JoyAgent-JDGenie进行交互,输入你的任务指令。例如,你可以直接对它说:“给我做一个最近美元和黄金的走势分析”,系统会自动调用内部的各个智能体进行协作,最终生成一份报告。
二次开发
JoyAgent-JDGenie提供了灵活的二次开发能力,用户可以方便地添加自定义的工具或智能体。
如何添加一个新工具
假设你需要添加一个查询火车票的“12306”工具。
- 编写工具服务: 首先,你需要实现一个工具的后端服务(例如使用Python或Java),这个服务需要遵循项目的MCP(Multi-agent Collaboration Protocol)协议。
- 配置工具服务地址: 在项目的后端配置文件
genie-backend/src/main/resources/application.yml
中,添加你的工具服务地址。如果存在多个工具服务,用逗号隔开。mcp_server_url: "http://ip1:port1/sse,http://ip2:port2/sse"
- 重启服务: 修改配置后,重新执行
sh start_genie.sh
启动服务。 - 开始使用: 启动成功后,你就可以在对话中使用新添加的工具了,例如输入:“查询北京到上海的火车票”。
如何新增一个自定义子Agent
你也可以在Java后端直接添加新的子智能体(Agent)。
- 实现BaseTool接口: 创建一个新的Java类,并实现
BaseTool
接口。这个接口需要你定义智能体的名称、描述、参数格式以及执行逻辑。// 天气智能体示例 public class WeatherTool implements BaseTool { @Override public String getName() { return "agent_weather"; // 工具或Agent的唯一名称 } @Override public String getDescription() { return "这是一个可以查询天气的智能体"; // 功能描述,大模型会根据描述决定何时调用它 } @Override public Map<String, Object> toParams() { // 定义输入参数的JSON Schema return "{\"type\":\"object\",\"properties\":{\"location\":{\"description\":\"地点\",\"type\":\"string\"}},\"required\":[\"location\"]}"; } @Override public Object execute(Object input) { // 实现工具的具体执行逻辑 return "今日天气晴朗"; } }
- 注册新的Agent: 在
com.jd.genie.controller.GenieController#buildToolCollection
方法中,将你刚刚创建的Agent实例添加进去。WeatherTool weatherTool = new WeatherTool(); toolCollection.addTool(weatherTool);
- 重启服务: 重新执行
sh start_genie.sh
启动服务。启动后,这个新的天气查询智能体就可以被框架自动调用了。
应用场景
- 自动化报告生成用户只需输入一个主题,例如“分析一下新能源汽车行业2025年的发展趋势”,JoyAgent-JDGenie可以自动调用搜索、数据分析和文件生成等智能体,协作完成任务,并最终交付一份详细的PPT或网页版分析报告。
- 复杂任务处理对于需要多个步骤和工具才能解决的复杂问题,如“抓取特定网站的数据,对数据进行清洗和分析,并用图表展示分析结果”,该系统能够自主规划任务流程,协调不同的子智能体按步骤执行,直至任务完成。
- 企业内部知识库问答企业可以将内部的API或数据库作为工具挂载到JoyAgent-JDGenie上,使其成为一个智能的企业知识入口。员工可以直接通过自然语言查询内部信息,例如“帮我查一下上个季度的销售数据”。
- 软件开发辅助通过集成代码生成和代码执行智能体,它可以辅助程序员完成一些日常的开发任务,比如“编写一个Python脚本来批量重命名文件”或“根据API文档生成客户端调用代码”。
QA
- JoyAgent-JDGenie 和其他Agent框架(如LangChain)有什么区别?最主要的区别在于JoyAgent-JDGenie是一个端到端、开箱即用的完整产品,而LangChain等更多是SDK或框架。 用户需要基于LangChain进行大量开发工作才能构建一个可用的应用,而JoyAgent-JDGenie则提供了包括前端、后端在内的完整解决方案,用户可以近乎零开发地直接使用。
- 使用这个项目需要付费吗?或者依赖特定的云平台吗?JoyAgent-JDGenie是基于Apache 2.0许可证的开源项目,可以免费使用。它的一大特点就是轻量化,不强制依赖任何特定的商业云平台(如阿里云、火山引擎等),用户可以将其部署在自己的服务器上。
- 我完全不懂代码,可以使用它吗?如果你只是作为普通用户使用其核心功能(如生成报告),在项目被成功部署后,你可以通过其前端界面,用自然语言下达指令来使用,不需要编写代码。但如果你需要添加新的工具或进行定制化开发,则需要具备一定的Java或Python编程能力。