mirror of
https://gitcode.com/ageerle/ruoyi-ai.git
synced 2026-09-13 00:14:59 +00:00
feat: 新增 ChitChatAgent 闲聊兜底子 Agent 并接入 supervisor
简单任务无专业子 Agent 可用时由闲聊 Agent 兜底,避免 supervisor 空转返回空内容;通过 supervisorContext 约束仅在问候/闲聊场景路由到该 Agent。 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
@@ -34,6 +34,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.ruoyi.agent.ChartGenerationAgent;
|
import org.ruoyi.agent.ChartGenerationAgent;
|
||||||
|
import org.ruoyi.agent.ChitChatAgent;
|
||||||
import org.ruoyi.agent.EchartsAgent;
|
import org.ruoyi.agent.EchartsAgent;
|
||||||
import org.ruoyi.agent.SkillsAgent;
|
import org.ruoyi.agent.SkillsAgent;
|
||||||
import org.ruoyi.agent.SqlAgent;
|
import org.ruoyi.agent.SqlAgent;
|
||||||
@@ -267,11 +268,18 @@ public class ChatServiceFacade implements IChatService {
|
|||||||
.listener(new MyAgentListener())
|
.listener(new MyAgentListener())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// 构建子 Agent 6: ChitChatAgent - 简单闲聊兜底,避免无子 Agent 可用时 supervisor 空转
|
||||||
|
ChitChatAgent chitChatAgent = AgenticServices.agentBuilder(ChitChatAgent.class)
|
||||||
|
.chatModel(plannerModel)
|
||||||
|
.build();
|
||||||
|
|
||||||
// 构建监督者 Agent - 管理多个子 Agent
|
// 构建监督者 Agent - 管理多个子 Agent
|
||||||
var supervisorBuilder = AgenticServices.supervisorBuilder()
|
var supervisorBuilder = AgenticServices.supervisorBuilder()
|
||||||
.chatModel(plannerModel)
|
.chatModel(plannerModel)
|
||||||
.subAgents(skillsAgent, searchAgent, sqlAgent, chartGenerationAgent, echartsAgent)
|
.subAgents(skillsAgent, searchAgent, sqlAgent, chartGenerationAgent, echartsAgent, chitChatAgent)
|
||||||
.responseStrategy(SupervisorResponseStrategy.LAST);
|
.supervisorContext("仅当请求是问候或简单闲聊、不需要任何数据、搜索、技能或图表时,才使用 chitChatAgent;"
|
||||||
|
+ "其余情况必须使用对应的专业 Agent")
|
||||||
|
.responseStrategy(SupervisorResponseStrategy.SUMMARY);
|
||||||
SupervisorAgent supervisor = supervisorBuilder.build();
|
SupervisorAgent supervisor = supervisorBuilder.build();
|
||||||
|
|
||||||
// 知识库增强:智能体绑定了知识库时,对 supervisor 输入做一次 RAG 增强
|
// 知识库增强:智能体绑定了知识库时,对 supervisor 输入做一次 RAG 增强
|
||||||
|
|||||||
Reference in New Issue
Block a user