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 增强