From 0b8c8d8986a35c3e36db1503125e2dff79d6d10e Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Mon, 18 May 2026 10:39:37 +0800
Subject: [PATCH] 优化
---
ard-modules/ard-modules-agent/src/main/java/com/ard/agent/service/AIChatService.java | 88 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 87 insertions(+), 1 deletions(-)
diff --git a/ard-modules/ard-modules-agent/src/main/java/com/ard/agent/service/AIChatService.java b/ard-modules/ard-modules-agent/src/main/java/com/ard/agent/service/AIChatService.java
index 84a8ba6..e03a52a 100644
--- a/ard-modules/ard-modules-agent/src/main/java/com/ard/agent/service/AIChatService.java
+++ b/ard-modules/ard-modules-agent/src/main/java/com/ard/agent/service/AIChatService.java
@@ -1,24 +1,45 @@
package com.ard.agent.service;
+import com.alibaba.cloud.ai.graph.RunnableConfig;
+import com.alibaba.cloud.ai.graph.agent.ReactAgent;
+import com.alibaba.cloud.ai.graph.checkpoint.savers.MemorySaver;
+import com.alibaba.cloud.ai.graph.exception.GraphRunnerException;
import com.ard.agent.tool.KnowledgeTools;
import com.ard.agent.tool.MonitorTools;
+import com.ard.agent.tool.SystemTools;
import com.ard.common.security.utils.SecurityUtils;
import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
+import org.springframework.ai.chat.messages.AssistantMessage;
+import org.springframework.ai.chat.messages.UserMessage;
+import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
+import org.springframework.ai.chat.prompt.Prompt;
+import org.springframework.ai.content.Content;
+import org.springframework.ai.support.ToolCallbacks;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
+@Slf4j
@Service
public class AIChatService {
@Resource
private ChatClient chatClient;
@Resource
+ @Qualifier("ollamaChatModel")
+ private ChatModel chatModel;
+ @Resource
+ private SystemTools systemTools; // 注入工具类
+ @Resource
private MonitorTools monitorTools; // 注入工具类
@Resource
private KnowledgeTools knowledgeTools;
+ @Resource
+ private ReactAgent cameraAgent; // 注入配置好的 Agent
private static final String SYSTEM_PROMPT = """
你是摄像头管理助手。请严格遵守以下规则:
@@ -48,8 +69,73 @@
.system(SYSTEM_PROMPT)
.user(userMessage)
.advisors(advisor -> advisor.param("chat_memory_conversation_id", userId))
- .tools(monitorTools, knowledgeTools)
+ .tools(systemTools,monitorTools, knowledgeTools)
.stream()
.content();
}
+
+ /**
+ * 对话服务入口
+ */
+ public String chat(String userMessage) throws GraphRunnerException {
+ Long userId = SecurityUtils.getUserId();
+ // 1. 为每个用户创建唯一的 threadId
+ RunnableConfig config = RunnableConfig.builder()
+ .threadId(userId.toString()) // 比如从 SecurityUtils.getUserId() 获取
+ .build();
+ // 3. 调用 Agent 的 call 方法并执行
+ AssistantMessage response = cameraAgent.call(userMessage,config);
+ // 4. 从响应中提取文本内容
+ return response.getText();
+ }
+
+ private static final String SYSTEM_PROMPT1 = """
+ 你是智能管理助手,拥有以下能力:
+
+ ## 可用工具
+ ### 摄像头管理
+ - getCameraDetail: 查询摄像机详情
+ - searchCameras: 搜索摄像机
+ - updateCameraInfo: 修改摄像机信息
+
+ ### 系统管理
+ - searchUsers: 搜索用户
+ - searchDepts: 搜索部门
+ - searchRoles: 搜索角色
+ - getUserRoles: 查询用户角色
+
+ ### 知识库
+ - searchKnowledgeBase: 查询知识文档
+
+ ## 原则
+ 1. 根据问题自动选择工具
+ 2. 数据必须来自工具调用
+ 3. 用 Markdown 格式回复
+ """;
+
+ /**
+ * 流式聊天
+ */
+ public Flux<String> streamChat1(String userMessage) {
+ Long userId = SecurityUtils.getUserId();
+ RunnableConfig config = RunnableConfig.builder()
+ .threadId(userId.toString())
+ .build();
+ ReactAgent agent = ReactAgent.builder()
+ .name("UnifiedAgent")
+ .model(chatModel)
+ .instruction(SYSTEM_PROMPT1)
+ .tools(ToolCallbacks.from(monitorTools, systemTools, knowledgeTools))
+ .saver(new MemorySaver())
+ .build();
+
+ try {
+ return agent.streamMessages(userMessage, config)
+ .filter(msg -> msg instanceof AssistantMessage)
+ .map(Content::getText)
+ .doOnError(error -> log.error("Agent执行出错: {}", error.getMessage()));
+ } catch (GraphRunnerException e) {
+ throw new RuntimeException(e);
+ }
+ }
}
\ No newline at end of file
--
Gitblit v1.9.3