![]() | ![]() |
|---|
前言
这部分代码在: SuperBizAgent/src/main/java/org/example/controller/ChatController.java

流程梳理
对话Agent的核心目标是结合外部知识(RAG召回)与工具调用能力(ReAct模式),解决复杂问题。
整体流程可概括为:
-
用户输入 → embedding → 向量数据库召回
-
构建带上下文(召回的内容)的 prompt
-
ReAct模式多轮交互
-
最终输出答案
实战
消息召回
这里留一个预召回的TODO给同学完成,代码实现非常简单,在召回实战章节其实已有介绍 (searchSimilarDocuments)
构建prompt
/**
* 构建系统提示词(包含历史消息)
* @param history 历史消息列表
* @return 完整的系统提示词
*/
public String buildSystemPrompt(List<Map<String, String>> history) {
StringBuilder systemPromptBuilder = new StringBuilder();
// 基础系统提示
systemPromptBuilder.append("你是一个专业的智能助手,可以获取当前时间、查询天气信息、搜索内部文档知识库,以及查询 Prometheus 告警信息。\n");
systemPromptBuilder.append("当用户询问时间相关问题时,使用 getCurrentDateTime 工具。\n");
systemPromptBuilder.append("当用户需要查询公司内部文档、流程、最佳实践或技术指南时,使用 queryInternalDocs 工具。\n");
systemPromptBuilder.append("当用户需要查询 Prometheus 告警、监控指标或系统告警状态时,使用 queryPrometheusAlerts 工具。\n");
systemPromptBuilder.append("当用户需要查询腾讯云日志时,请调用腾讯云mcp服务查询,默认查询地域ap-guangzhou,查询时间范围为近一个月。\n\n");
// 添加历史消息
if (!history.isEmpty()) {
systemPromptBuilder.append("--- 对话历史 ---\n");
for (Map<String, String> msg : history) {
String role = msg.get("role");
String content = msg.get("content");
if ("user".equals(role)) {
systemPromptBuilder.append("用户: ").append(content).append("\n");
} else if ("assistant".equals(role)) {
systemPromptBuilder.append("助手: ").append(content).append("\n");
}
}
systemPromptBuilder.append("--- 对话历史结束 ---\n\n");
}
systemPromptBuilder.append("请基于以上对话历史,回答用户的新问题。");
return systemPromptBuilder.toString();
}创建ReAct Agent
使用 Spring AI alibaba 框架后,不必自己从0到1实现 Agent;按 SDK 的要求使用即可获得可执行的 Agent。
API使用文档: https://java2ai.com/docs/frameworks/agent-framework/tutorials/agents
public ReactAgent createReactAgent(DashScopeChatModel chatModel, String systemPrompt) {
return ReactAgent.builder()
.name("intelligent_assistant")
.model(chatModel)
.systemPrompt(systemPrompt)
.methodTools(buildMethodToolsArray())
.tools(getToolCallbacks())
.build();
}执行ReAct Agent
// 执行对话
String fullAnswer = chatService.executeChat(agent, request.getQuestion());
/**
* 执行 ReactAgent 对话(非流式)
* @param agent ReactAgent 实例
* @param question 用户问题
* @return AI 回复
*/
public String executeChat(ReactAgent agent, String question) throws GraphRunnerException {
logger.info("执行 ReactAgent.call() - 自动处理工具调用");
var response = agent.call(question);
String answer = response.getText();
logger.info("ReactAgent 对话完成,答案长度: {}", answer.length());
return answer;
}总结
至此,对话Agent的核心流程RAG召回与ReAct模式的代码就讲完了。如果你一篇一篇看下来,会发现其实代码实现真的不难,而且也不重要,框架帮我们做了很多事情。 核心是要搞懂我们的设计原理:RAG、ReAct。

