
仓库地址:https://github.com/jd-opensource/joyagent-jdgenie
@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;
}