joyagent-jdgenie
地址
- JoyAgent 官方平台:https://joyagent.jd.com/
- JoyAgent - JDGenie 产品页:https://joyagent-genie.jdcloud.com/
- 源码地址:https://github.com/jd-opensource/joyagent-jdgenie.git
本机启动
1 | |
手动一键启动部署
1 | |
使用最新版时,只有这个可以启动成功。并且只能使用deepseek时可以。其他启动方式还是看官网上吧。
AI大白话理解
一、JoyAgent 是什么?(一句话版)
JoyAgent 就是一个帮你自动干活的本地 AI 助理。
它不是模型,也不是搜索工具,而是一个 “总指挥”,可以:
- 调用你本地的大模型(比如 Ollama 里的 deepseek‑r1:8b)
- 调用搜索工具(百度千帆、Serper、Tavily)
- 调用计算器、文件读写、数据库等工具
- 自动决定什么时候该搜索、什么时候该用工具、什么时候直接回答
你可以把它理解成:
JoyAgent = 本地版的 “AI 智能助理 + 自动搜索 + 自动工具调用”
二、JoyAgent 能干什么?(大白话功能说明)
我给你举几个最容易理解的场景:
1. 自动帮你搜索
你问:
1 | |
JoyAgent 会自动:
- 判断 “这个问题需要实时数据”
- 调用百度千帆 / Serper/Tavily 搜索
- 把搜索结果给大模型
- 整理成自然语言回答你
你不用自己打开浏览器。
2. 自动调用工具
你问:
1 | |
JoyAgent 会自动:
- 判断 “这是计算题”
- 调用计算器工具
- 返回精确结果
模型不会瞎算,也不会算错。
3. 帮你读文件、总结文档
你上传一个 PDF 或 Word,问:
1 | |
JoyAgent 会:
- 读取文件
- 提取关键信息
- 用模型总结成易懂的内容
4. 帮你查数据库
你问:
1 | |
JoyAgent 会:
- 自动连接 SQLite/MySQL
- 执行查询
- 把结果告诉你
你不用写 SQL。
5. 用本地模型回答隐私问题
你问:
1 | |
JoyAgent 会:
- 使用你本地的 Ollama 模型
- 不会把数据发到任何云端
- 更安全、更隐私
三、JoyAgent 的核心作用(总结成 3 句话)
- 帮你自动干活:搜索、计算、读文件、查数据库……
- 让本地模型变聪明:不会联网的模型,也能回答实时问题。
- 保护隐私:本地运行,数据不离开你的电脑。
四、JoyAgent 适合谁?
- 不想把隐私数据发给 OpenAI 的人
- 想让本地模型(Ollama)更强大的人
- 想要一个 “全能 AI 助理” 的人
- 开发者想快速搭建 AI 应用的人
五、一句话总结(最重要)
JoyAgent 是一个本地运行的 AI 智能体框架,能让你的大模型自动搜索、自动调用工具、自动处理文件,变得像真正的助理一样聪明。
网上资料
https://blog.csdn.net/bagell/article/details/149598309
https://blog.csdn.net/qq_34489134/article/details/155941404
介绍
Joyagent-JDGenie, 来自京东开源的端到端多智能体系统(Multi-Agent System)。
项目原理与架构

二次开发
对接自定义的MCP server
1 | |
其中http://127.0.0.1:8180/sse为我的mcp_server地址
新增自定义子Agent到JoyAgent-JDGenie中
1 | |
在GenieController的buildToolCollection方法最后返回之前加入以下两行:
1 | |
deepwiki分析
后端处理流程概览
在 genie-backend 中,用户提示词到生成 MD/HTML 报告的流程分为:意图识别与路由、工具决策、工具执行、结果回传、报告生成五个阶段 GenieController.java:106-155 。
1. 意图识别与路由
- 入口:
GenieController.AutoAgent接收请求,根据agentType选择处理器(React/Executor/Planning) GenieController.java:106-155 。 - 工具构建:
buildToolCollection根据outputStyle动态加载工具(dataAgent 模式加载 ReportTool 和 DataAnalysisTool;默认模式加载 FileTool、CodeInterpreterTool、ReportTool、DeepSearchTool) GenieController.java:179-268 。
2. 工具调用决策
- 思考阶段:Agent 的
think()方法调用LLM.askTool,将系统提示词、历史消息和可用工具列表发送给 LLM,LLM 返回工具调用决策(ToolCallResponse) ExecutorAgent.java:96-104 。 - 提示词模板:系统提示词包含工具描述和任务要求,指导 LLM 选择合适工具(如搜索、代码、报告) application.yml:64-75 。
3. 工具执行
- 执行阶段:Agent 的
act()方法通过executeTools并发调用工具,工具通过 HTTP 请求调用 genie-tool 服务(端口 1601) ExecutorAgent.java:159-190 。 - 工具类型:包括搜索(deep_search)、代码执行(code_interpreter)、文件操作(file_tool)、数据分析(data_analysis)和报告生成(report_tool) application.yml:80-120 。
4. 结果回传给大模型
- 记忆更新:工具执行结果通过
Message.toolMessage添加到 Agent 的记忆中,下一轮think()时包含这些结果 ExecutorAgent.java:180-186 。 - 流式输出:执行过程通过 SSE 实时推送到前端(如 tool_thought、tool_result 事件) GenieController.java:106-155 。
5. 生成 MD/HTML 报告
- 报告工具:当 LLM 决定生成报告时,调用
report_tool,传入任务描述、文件名和类型(html/markdown/ppt),由 genie-tool 生成文件并返回路径 application.yml:91-93 。 - 最终输出:ReactHandlerImpl 在任务结束后收集文件列表,通过 SSE 返回给前端展示 ReactHandlerImpl.java:26-54 。
Notes
- 整个流程在 BaseAgent 的
run()方法中循环执行 think/act,直到达到最大步数或任务完成 BaseAgent.java:62-89 。 - MCP 工具通过
McpTool.listTool动态加载,与内置工具统一管理 GenieController.java:226-258 。
一句话概览
在 genie-backend 中,意图识别与路由并不依赖 NLP 模型,而是根据请求中的 agentType 和 outputStyle 参数,通过 AgentHandlerFactory 遍历所有 Handler 的 support 方法来选择合适的处理器(如 React/PlanSolve),然后由对应 Handler 执行具体任务。
详细流程(适合初学者)
1. 请求入口与上下文构建
- 用户提示词通过 POST
/AutoAgent进入GenieController.AutoAgent。 - 系统根据
outputStyle(如 html/docs/table/dataAgent)动态加载工具集合(buildToolCollection)。 - 构建
AgentContext,包含请求 ID、查询内容、工具集合、SSE 打印机等上下文信息。
2. 路由选择:Handler 工厂模式
- 调用
AgentHandlerFactory.getHandler进行路由选择。 - 工厂内部遍历所有已注册的
AgentHandlerService实现类,依次调用其support方法,首个返回 true 的即被选中 。
3. 意图识别:Handler 的 support 条件
意图识别的关键在于每个 Handler 的 support 方法实现:
- ReactHandlerImpl:仅当
request.getAgentType() == AgentType.REACT.getValue()时返回 true。 - PlanSolveHandlerImpl:通常匹配
AgentType.PLAN_SOLVE,用于复杂任务分解(代码未完整给出,但模式类似)。 - 其他 Handler 可扩展,例如基于
outputStyle或自定义规则。
4. 执行与结果返回
- 选中的 Handler 执行
handle方法,内部创建对应 Agent(如ReactImplAgent)并运行run循环(think-act) 。 - 最终通过 SSE 将结果(文件列表、任务摘要)推送给前端 。
5. 流程图(简化版)
flowchart TD
A[用户请求 /AutoAgent] --> B[GenieController 构建上下文]
B --> C[buildToolCollection 根据 outputStyle 加载工具]
C --> D[AgentHandlerFactory.getHandler]
D --> E{遍历 Handler.support}
E -->|ReactHandlerImpl| F[agentType==REACT?]
E -->|PlanSolveHandlerImpl| G[agentType==PLAN_SOLVE?]
F --> H[返回 ReactHandlerImpl]
G --> I[返回 PlanSolveHandlerImpl]
H --> J[执行 ReactImplAgent]
I --> K[执行 PlanningAgent+ExecutorAgent]
J --> L[SSE 推送结果]
K --> L
6. 示例(以 React 模式为例)
- 请求参数:
{"agentType":5,"outputStyle":"html","query":"分析最近股价"} - 路由:
ReactHandlerImpl.support检测到agentType=5(REACT)返回 true,被选中 。 - 工具加载:默认加载 search、code、report 等工具 。
- 执行:ReactImplAgent 循环调用 LLM 进行工具决策,最终生成 HTML 报告。
关键点总结
- 意图识别:基于请求参数(agentType/outputStyle),而非语义理解。
- 路由机制:工厂模式 + Handler 的 support 方法,易于扩展新 Handler。
- 扩展方式:新增 Handler 实现
AgentHandlerService并定义support条件即可 。
Notes
- 如需更复杂的意图识别(如根据查询内容动态路由),可在 Handler 的
support方法中加入 LLM 判断或关键词匹配。 - 当前设计适合快速路由和明确分工,适合初学者理解多智能体系统的任务分发机制。