目录
joyagent-jdgenie Agent源码学习(二)
/        

joyagent-jdgenie Agent源码学习(二)

AutoAgent 接口执行流程

仓库地址:https://github.com/jd-opensource/joyagent-jdgenie

1. Controller 层

@PostMapping("/AutoAgent")
public SseEmitter AutoAgent(@RequestBody AgentRequest request) throws UnsupportedEncodingException {

  log.info("{} auto agent request: {}", request.getRequestId(), JSON.toJSONString(request));

  Long AUTO_AGENT_SSE_TIMEOUT = 60 * 60 * 1000L;

  SseEmitter emitter = new SseEmitter(AUTO_AGENT_SSE_TIMEOUT);
  // SSE心跳
  ScheduledFuture<?> heartbeatFuture = startHeartbeat(emitter, request.getRequestId());
  // 监听SSE事件
  registerSSEMonitor(emitter, request.getRequestId(), heartbeatFuture);
  // 拼接输出类型
  request.setQuery(handleOutputStyle(request));
  // 执行调度引擎
  ThreadUtil.execute(() -> {
    try {
      Printer printer = new SSEPrinter(emitter, request, request.getAgentType());
      AgentContext agentContext = AgentContext.builder()
        .requestId(request.getRequestId())
        .sessionId(request.getRequestId())
        .printer(printer)
        .query(request.getQuery())
        .task("")
        .dateInfo(DateUtil.CurrentDateInfo())
        .productFiles(new ArrayList<>())
        .taskProductFiles(new ArrayList<>())
        .sopPrompt(request.getSopPrompt())
        .basePrompt(request.getBasePrompt())
        .agentType(request.getAgentType())
        .isStream(Objects.nonNull(request.getIsStream()) ? request.getIsStream() : false)
        .templateType("dataAgent".equals(request.getOutputStyle()) ? "fix" : "empty")
        .build();
      // 构建工具列表
      agentContext.setToolCollection(buildToolCollection(agentContext, request));
      // 根据数据类型获取对应的处理器
      AgentHandlerService handler = agentHandlerFactory.getHandler(agentContext, request);
      // 执行处理逻辑
      handler.handle(agentContext, request);
      // 关闭连接
      emitter.complete();

    } catch (Exception e) {
      log.error("{} auto agent error", request.getRequestId(), e);
    }
  });

  return emitter;
}

  • 首先对当前请求设置了心跳,当 sse 结束后停止心跳的定时任务

标题:joyagent-jdgenie Agent源码学习(二)
作者:gitsilence
地址:https://blog.lacknb.cn/articles/2025/11/20/1763627173919.html