joyagent-jdgenie

地址

本机启动

1
2
3
4
5
6
7
8
环境准备
- jdk17
- python3.11
- python环境准备
- pip install uv
- cd genie-tool
- uv sync
- source .venv/bin/activate

手动一键启动部署

1
2
sh check_dep_port.sh # 检查所有依赖和端口占用情况
sh Genie_start.sh # 直接启动,以后改动配置直接重启动脚本即可,control+c 一键kill所有服务

使用最新版时,只有这个可以启动成功。并且只能使用deepseek时可以。其他启动方式还是看官网上吧。

AI大白话理解

一、JoyAgent 是什么?(一句话版)

JoyAgent 就是一个帮你自动干活的本地 AI 助理。

它不是模型,也不是搜索工具,而是一个 “总指挥”,可以:

  • 调用你本地的大模型(比如 Ollama 里的 deepseek‑r1:8b)
  • 调用搜索工具(百度千帆、Serper、Tavily)
  • 调用计算器、文件读写、数据库等工具
  • 自动决定什么时候该搜索、什么时候该用工具、什么时候直接回答

你可以把它理解成:

JoyAgent = 本地版的 “AI 智能助理 + 自动搜索 + 自动工具调用”


二、JoyAgent 能干什么?(大白话功能说明)

我给你举几个最容易理解的场景:

1. 自动帮你搜索

你问:

1
今天北京天气怎么样?

JoyAgent 会自动:

  • 判断 “这个问题需要实时数据”
  • 调用百度千帆 / Serper/Tavily 搜索
  • 把搜索结果给大模型
  • 整理成自然语言回答你

你不用自己打开浏览器。


2. 自动调用工具

你问:

1
计算 3.14 * 25^2

JoyAgent 会自动:

  • 判断 “这是计算题”
  • 调用计算器工具
  • 返回精确结果

模型不会瞎算,也不会算错。


3. 帮你读文件、总结文档

你上传一个 PDF 或 Word,问:

1
帮我总结这份文件的重点。

JoyAgent 会:

  • 读取文件
  • 提取关键信息
  • 用模型总结成易懂的内容

4. 帮你查数据库

你问:

1
数据库里用户最多的表是哪个?

JoyAgent 会:

  • 自动连接 SQLite/MySQL
  • 执行查询
  • 把结果告诉你

你不用写 SQL。


5. 用本地模型回答隐私问题

你问:

1
我公司的机密计划是什么?

JoyAgent 会:

  • 使用你本地的 Ollama 模型
  • 不会把数据发到任何云端
  • 更安全、更隐私

三、JoyAgent 的核心作用(总结成 3 句话)

  1. 帮你自动干活:搜索、计算、读文件、查数据库……
  2. 让本地模型变聪明:不会联网的模型,也能回答实时问题。
  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)。

项目原理与架构

joyagent项目架构图

二次开发

对接自定义的MCP server

1
mcp_server_url: "https://mcp.api-inference.modelscope.net/1784ac5c6d0044/sse,http://127.0.0.1:8180/sse"

其中http://127.0.0.1:8180/sse为我的mcp_server地址

新增自定义子Agent到JoyAgent-JDGenie中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.jd.genie.agent.tool;

import com.alibaba.fastjson.JSON;

import java.util.Map;

// 天气智能体示例
public class WeatherTool implements BaseTool {

@Override
public String getName() {
return "agent_weather";
}

@Override
public String getDescription() {
return "这是一个可以查询天气的智能体";
}

@Override
public Map<String, Object> toParams() {
// 待转换的JSON字符串
String jsonStr = "{\"type\":\"object\",\"properties\":{\"location\":{\"description\":\"地点\",\"type\":\"string\"}},\"required\":[\"location\"]}";

// 核心转换代码:JSON字符串 -> Map(自动嵌套解析)
Map<String, Object> resultMap = JSON.parseObject(jsonStr, Map.class);

return resultMap;
}

@Override
public Object execute(Object input) {
return "今日天气晴朗";
}
}

在GenieController的buildToolCollection方法最后返回之前加入以下两行:

1
2
WeatherTool weatherTool = new WeatherTool();
toolCollection.addTool(weatherTool);

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 模型,而是根据请求中的 agentTypeoutputStyle 参数,通过 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 判断或关键词匹配。
  • 当前设计适合快速路由和明确分工,适合初学者理解多智能体系统的任务分发机制。

joyagent-jdgenie
http://hanqichuan.com/2026/02/10/AI/joyagent-jdgenie/
作者
韩启川
发布于
2026年2月10日
许可协议