From 24bee53f9edaeda28988a6facad3c49af60f496d Mon Sep 17 00:00:00 2001 From: "ageerle@163.com" Date: Mon, 20 Jul 2026 16:08:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20ChitChatAgent=20?= =?UTF-8?q?=E9=97=B2=E8=81=8A=E5=85=9C=E5=BA=95=E5=AD=90=20Agent=20?= =?UTF-8?q?=E5=B9=B6=E6=8E=A5=E5=85=A5=20supervisor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 简单任务无专业子 Agent 可用时由闲聊 Agent 兜底,避免 supervisor 空转返回空内容;通过 supervisorContext 约束仅在问候/闲聊场景路由到该 Agent。 Co-Authored-By: Claude --- .../java/org/ruoyi/agent/ChitChatAgent.java | 28 +++++++++++++++++++ .../service/chat/impl/ChatServiceFacade.java | 12 ++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/ChitChatAgent.java diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/ChitChatAgent.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/ChitChatAgent.java new file mode 100644 index 00000000..7ec1e29e --- /dev/null +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/agent/ChitChatAgent.java @@ -0,0 +1,28 @@ +package org.ruoyi.agent; + +import dev.langchain4j.agentic.Agent; +import dev.langchain4j.service.SystemMessage; +import dev.langchain4j.service.UserMessage; +import dev.langchain4j.service.V; + +/** + * 闲聊兜底 Agent + * 负责问候、日常闲聊和常识性问答,不挂任何工具。 + * 作为 supervisor 的默认落脚点,避免简单任务无子 Agent 可用导致输出为空。 + * + * @author ageerle@163.com + */ +public interface ChitChatAgent { + + @SystemMessage(""" + 你是一个友好、自然的对话助手,负责问候、闲聊和常识性问答。 + 要求: + - 用与用户相同的语言回答,简洁自然 + - 不要编造需要实时数据或专业工具才能得到的事实 + - 如果用户的问题实际需要联网搜索、查数据库、执行技能或生成图表,直接说明这超出你的职责, + 让用户重新描述需求 + """) + @UserMessage("{{query}}") + @Agent("闲聊兜底助手:仅用于问候、日常闲聊和不需要联网搜索、数据库、技能或图表的通用问题") + String chat(@V("query") String query); +} diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java index 020f5006..e22b98a4 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatServiceFacade.java @@ -34,6 +34,7 @@ import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.ruoyi.agent.ChartGenerationAgent; +import org.ruoyi.agent.ChitChatAgent; import org.ruoyi.agent.EchartsAgent; import org.ruoyi.agent.SkillsAgent; import org.ruoyi.agent.SqlAgent; @@ -267,11 +268,18 @@ public class ChatServiceFacade implements IChatService { .listener(new MyAgentListener()) .build(); + // 构建子 Agent 6: ChitChatAgent - 简单闲聊兜底,避免无子 Agent 可用时 supervisor 空转 + ChitChatAgent chitChatAgent = AgenticServices.agentBuilder(ChitChatAgent.class) + .chatModel(plannerModel) + .build(); + // 构建监督者 Agent - 管理多个子 Agent var supervisorBuilder = AgenticServices.supervisorBuilder() .chatModel(plannerModel) - .subAgents(skillsAgent, searchAgent, sqlAgent, chartGenerationAgent, echartsAgent) - .responseStrategy(SupervisorResponseStrategy.LAST); + .subAgents(skillsAgent, searchAgent, sqlAgent, chartGenerationAgent, echartsAgent, chitChatAgent) + .supervisorContext("仅当请求是问候或简单闲聊、不需要任何数据、搜索、技能或图表时,才使用 chitChatAgent;" + + "其余情况必须使用对应的专业 Agent") + .responseStrategy(SupervisorResponseStrategy.SUMMARY); SupervisorAgent supervisor = supervisorBuilder.build(); // 知识库增强:智能体绑定了知识库时,对 supervisor 输入做一次 RAG 增强