diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index b8848f036..9b28f219b 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -109,6 +109,7 @@ security:
- /*/api-docs
- /*/api-docs/**
- /warm-flow-ui/config
+ - /snail-ai/agent/*/chat/stream
# MyBatisPlus配置
# https://baomidou.com/config/
diff --git a/ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/controller/OpenApiDemoController.java b/ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/controller/OpenApiDemoController.java
index f429ea797..b27d9be6a 100644
--- a/ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/controller/OpenApiDemoController.java
+++ b/ruoyi-modules/ruoyi-ai/src/main/java/org/dromara/ai/controller/OpenApiDemoController.java
@@ -9,27 +9,19 @@ import com.aizuda.snail.ai.openapi.client.core.api.OpenApiChatClient;
import com.aizuda.snail.ai.openapi.client.core.api.OpenApiConversationClient;
import com.aizuda.snail.ai.openapi.client.core.api.OpenApiUserClient;
import com.aizuda.snail.ai.openapi.client.core.listener.SseEventListener;
-import io.swagger.v3.oas.annotations.Operation;
-import io.swagger.v3.oas.annotations.Parameter;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.satoken.utils.LoginHelper;
-import org.springframework.http.MediaType;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.IOException;
-import java.io.PrintWriter;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
/**
* OpenAPI 使用示例 Controller
- *
* 演示如何使用 OpenAPI Client 调用 Snail AI 服务端接口
*
* @author opensnail
@@ -39,7 +31,6 @@ import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/snail-ai")
@RequiredArgsConstructor
-@Tag(name = "OpenAPI Demo", description = "OpenAPI 客户端使用示例")
public class OpenApiDemoController {
private final OpenApiAgentClient agentClient;
@@ -51,15 +42,19 @@ public class OpenApiDemoController {
// ==================== User 相关接口 ====================
+ /**
+ * 注册当前登录用户并返回 OpenAPI 用户信息。
+ */
@PostMapping("/user/register")
- @Operation(summary = "注册当前登录用户", description = "使用当前系统登录用户自动注册,返回 openId")
public Result registerCurrentUser() {
OpenApiUserVO user = ensureOpenApiUser();
return Result.ok(user);
}
+ /**
+ * 查询当前登录用户对应的 OpenAPI 用户信息。
+ */
@GetMapping("/user")
- @Operation(summary = "获取当前登录用户的 OpenAPI 信息", description = "自动解析当前用户 openId 并查询详情")
public Result getUser() {
String openId = ensureOpenId();
OpenApiUserQueryRequest request = new OpenApiUserQueryRequest();
@@ -69,16 +64,19 @@ public class OpenApiDemoController {
// ==================== Agent 相关接口 ====================
+ /**
+ * 查询当前用户可访问的智能体列表。
+ */
@GetMapping("/agents")
- @Operation(summary = "获取所有 Agent 列表", description = "查询当前用户可访问的所有智能体")
public Result> listAgents() {
return agentClient.listAgents();
}
+ /**
+ * 根据智能体 ID 查询智能体详情。
+ */
@GetMapping("/agent/{agentId}")
- @Operation(summary = "获取 Agent 详情", description = "根据 ID 查询智能体详细信息")
public Result getAgent(
- @Parameter(description = "Agent ID", required = true, example = "1")
@PathVariable Long agentId) {
OpenApiAgentIdentityRequest request = new OpenApiAgentIdentityRequest();
request.setAgentId(agentId);
@@ -87,26 +85,25 @@ public class OpenApiDemoController {
// ==================== Conversation 相关接口 ====================
+ /**
+ * 为指定智能体创建新会话。
+ */
@PostMapping("/agent/{agentId}/conversation")
- @Operation(summary = "创建会话", description = "为指定 Agent 创建一个新的对话会话")
public Result createConversation(
- @Parameter(description = "Agent ID", required = true, example = "1")
@PathVariable Long agentId,
- @Parameter(description = "创建会话请求")
@RequestBody OpenApiCreateConversationRequest request) {
request.setAgentId(agentId);
request.setOpenId(ensureOpenId());
return conversationClient.createConversation(request);
}
+ /**
+ * 分页查询指定智能体下的会话列表。
+ */
@GetMapping("/agent/{agentId}/conversations")
- @Operation(summary = "获取会话列表", description = "查询指定 Agent 的所有会话(分页)")
public PageResult> listConversations(
- @Parameter(description = "Agent ID", required = true, example = "1")
@PathVariable Long agentId,
- @Parameter(description = "页码", example = "1")
@RequestParam(defaultValue = "1") int page,
- @Parameter(description = "每页数量", example = "10")
@RequestParam(defaultValue = "10") int size) {
OpenApiConversationQueryRequest request = new OpenApiConversationQueryRequest();
request.setAgentId(agentId);
@@ -116,12 +113,12 @@ public class OpenApiDemoController {
return conversationClient.listConversations(request);
}
+ /**
+ * 查询指定会话的消息历史。
+ */
@GetMapping("/agent/{agentId}/conversation/{conversationId}/messages")
- @Operation(summary = "获取会话消息", description = "查询指定会话的所有消息记录")
public Result> getMessages(
- @Parameter(description = "Agent ID", required = true, example = "1")
@PathVariable Long agentId,
- @Parameter(description = "会话 ID", required = true, example = "conv-123")
@PathVariable String conversationId) {
OpenApiConversationIdentityRequest request = new OpenApiConversationIdentityRequest();
request.setAgentId(agentId);
@@ -130,12 +127,12 @@ public class OpenApiDemoController {
return conversationClient.getMessages(request);
}
+ /**
+ * 删除指定会话。
+ */
@DeleteMapping("/agent/{agentId}/conversation/{conversationId}")
- @Operation(summary = "删除会话", description = "删除指定的对话会话")
public Result deleteConversation(
- @Parameter(description = "Agent ID", required = true, example = "1")
@PathVariable Long agentId,
- @Parameter(description = "会话 ID", required = true, example = "conv-123")
@PathVariable String conversationId) {
OpenApiConversationIdentityRequest request = new OpenApiConversationIdentityRequest();
request.setAgentId(agentId);
@@ -146,19 +143,21 @@ public class OpenApiDemoController {
// ==================== Chat 相关接口 ====================
+ /**
+ * 获取当前聊天发送模式。
+ */
@GetMapping("/chat/mode")
- @Operation(summary = "获取聊天发送模式", description = "返回 stream(流式) 或 sync(同步)")
public Result