diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-chat/src/main/java/com/alibaba/cloud/ai/service/simple/SimpleNl2SqlService.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-chat/src/main/java/com/alibaba/cloud/ai/service/simple/SimpleNl2SqlService.java index b23b651d47..9ee8b0fe1b 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-chat/src/main/java/com/alibaba/cloud/ai/service/simple/SimpleNl2SqlService.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-chat/src/main/java/com/alibaba/cloud/ai/service/simple/SimpleNl2SqlService.java @@ -15,7 +15,6 @@ */ package com.alibaba.cloud.ai.service.simple; -import com.alibaba.cloud.ai.connector.*; import com.alibaba.cloud.ai.connector.accessor.Accessor; import com.alibaba.cloud.ai.connector.config.DbConfig; import com.alibaba.cloud.ai.service.LlmService; diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentController.java index df7e34fa34..12358a414e 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentController.java @@ -17,8 +17,8 @@ import com.alibaba.cloud.ai.entity.Agent; import com.alibaba.cloud.ai.service.AgentService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -26,13 +26,14 @@ /** * Agent Management Controller */ -@Controller +@RestController @RequestMapping("/api/agent") @CrossOrigin(origins = "*") public class AgentController { private final AgentService agentService; + @Autowired(required = false) public AgentController(AgentService agentService) { this.agentService = agentService; } @@ -40,11 +41,10 @@ public AgentController(AgentService agentService) { /** * Get agent list */ - @GetMapping - @ResponseBody - public ResponseEntity> list(@RequestParam(required = false) String status, - @RequestParam(required = false) String keyword) { - List result; + @GetMapping("/list") + public ResponseEntity> list(@RequestParam(value = "status", required = false) String status, + @RequestParam(value = "keyword", required = false) String keyword) { + List result = null; if (keyword != null && !keyword.trim().isEmpty()) { result = agentService.search(keyword); } @@ -61,8 +61,7 @@ else if (status != null && !status.trim().isEmpty()) { * Get agent details by ID */ @GetMapping("/{id}") - @ResponseBody - public ResponseEntity get(@PathVariable Long id) { + public ResponseEntity get(@PathVariable(value = "id") Long id) { Agent agent = agentService.findById(id); if (agent == null) { return ResponseEntity.notFound().build(); @@ -73,8 +72,7 @@ public ResponseEntity get(@PathVariable Long id) { /** * Create agent */ - @PostMapping - @ResponseBody + @PostMapping("/create") public ResponseEntity create(@RequestBody Agent agent) { // Set default status if (agent.getStatus() == null || agent.getStatus().trim().isEmpty()) { @@ -88,8 +86,7 @@ public ResponseEntity create(@RequestBody Agent agent) { * Update agent */ @PutMapping("/{id}") - @ResponseBody - public ResponseEntity update(@PathVariable Long id, @RequestBody Agent agent) { + public ResponseEntity update(@PathVariable(value = "id") Long id, @RequestBody Agent agent) { if (agentService.findById(id) == null) { return ResponseEntity.notFound().build(); } @@ -102,8 +99,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBody Agent ag * Delete agent */ @DeleteMapping("/{id}") - @ResponseBody - public ResponseEntity delete(@PathVariable Long id) { + public ResponseEntity delete(@PathVariable(value = "id") Long id) { if (agentService.findById(id) == null) { return ResponseEntity.notFound().build(); } @@ -115,8 +111,7 @@ public ResponseEntity delete(@PathVariable Long id) { * Publish agent */ @PostMapping("/{id}/publish") - @ResponseBody - public ResponseEntity publish(@PathVariable Long id) { + public ResponseEntity publish(@PathVariable(value = "id") Long id) { Agent agent = agentService.findById(id); if (agent == null) { return ResponseEntity.notFound().build(); @@ -130,8 +125,7 @@ public ResponseEntity publish(@PathVariable Long id) { * Offline agent */ @PostMapping("/{id}/offline") - @ResponseBody - public ResponseEntity offline(@PathVariable Long id) { + public ResponseEntity offline(@PathVariable(value = "id") Long id) { Agent agent = agentService.findById(id); if (agent == null) { return ResponseEntity.notFound().build(); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentKnowledgeController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentKnowledgeController.java index 292d707c26..3b3be4044b 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentKnowledgeController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentKnowledgeController.java @@ -48,9 +48,10 @@ public AgentKnowledgeController(AgentKnowledgeService agentKnowledgeService, * Query knowledge list by agent ID */ @GetMapping("/agent/{agentId}") - public ResponseEntity> getKnowledgeByAgentId(@PathVariable Integer agentId, - @RequestParam(required = false) String type, @RequestParam(required = false) String status, - @RequestParam(required = false) String keyword) { + public ResponseEntity> getKnowledgeByAgentId(@PathVariable(value = "agentId") Integer agentId, + @RequestParam(value = "type", required = false) String type, + @RequestParam(value = "status", required = false) String status, + @RequestParam(value = "keyword", required = false) String keyword) { Map response = new HashMap<>(); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentPresetQuestionController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentPresetQuestionController.java index 8bc1cd5bfd..977216ff54 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentPresetQuestionController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentPresetQuestionController.java @@ -43,7 +43,7 @@ public AgentPresetQuestionController(AgentPresetQuestionService presetQuestionSe * Get preset question list of agent */ @GetMapping("/{agentId}/preset-questions") - public ResponseEntity> getPresetQuestions(@PathVariable Long agentId) { + public ResponseEntity> getPresetQuestions(@PathVariable(value = "agentId") Long agentId) { try { List questions = presetQuestionService.findByAgentId(agentId); return ResponseEntity.ok(questions); @@ -58,7 +58,7 @@ public ResponseEntity> getPresetQuestions(@PathVariabl * Batch save preset questions of agent */ @PostMapping("/{agentId}/preset-questions") - public ResponseEntity> savePresetQuestions(@PathVariable Long agentId, + public ResponseEntity> savePresetQuestions(@PathVariable(value = "agentId") Long agentId, @RequestBody List> questionsData) { try { // Convert to entity object @@ -81,7 +81,7 @@ public ResponseEntity> savePresetQuestions(@PathVariable Lon * Delete preset question */ @DeleteMapping("/{agentId}/preset-questions/{questionId}") - public ResponseEntity> deletePresetQuestion(@PathVariable Long agentId, + public ResponseEntity> deletePresetQuestion(@PathVariable(value = "agentId") Long agentId, @PathVariable Long questionId) { try { presetQuestionService.deleteById(questionId); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentSchemaController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentSchemaController.java index a5617e91b2..639148a7a6 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentSchemaController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/AgentSchemaController.java @@ -58,7 +58,7 @@ public AgentSchemaController(AgentVectorService agentVectorService, */ @PostMapping("/init") @ResponseBody - public ResponseEntity> initializeSchema(@PathVariable Long agentId, + public ResponseEntity> initializeSchema(@PathVariable(value = "agentId") Long agentId, @RequestBody Map requestData) { Map response = new HashMap<>(); @@ -131,7 +131,7 @@ else if (requestData.containsKey("dbConfig")) { */ @GetMapping("/statistics") @ResponseBody - public ResponseEntity> getVectorStatistics(@PathVariable Long agentId) { + public ResponseEntity> getVectorStatistics(@PathVariable(value = "agentId") Long agentId) { Map response = new HashMap<>(); try { @@ -155,7 +155,7 @@ public ResponseEntity> getVectorStatistics(@PathVariable Lon */ @DeleteMapping("/clear") @ResponseBody - public ResponseEntity> clearVectorData(@PathVariable Long agentId) { + public ResponseEntity> clearVectorData(@PathVariable(value = "agentId") Long agentId) { Map response = new HashMap<>(); try { @@ -184,7 +184,7 @@ public ResponseEntity> clearVectorData(@PathVariable Long ag */ @GetMapping("/datasources") @ResponseBody - public ResponseEntity> getAgentDatasources(@PathVariable Long agentId) { + public ResponseEntity> getAgentDatasources(@PathVariable(value = "agentId") Long agentId) { Map response = new HashMap<>(); try { @@ -214,7 +214,8 @@ public ResponseEntity> getAgentDatasources(@PathVariable Lon */ @GetMapping("/datasources/{datasourceId}/tables") @ResponseBody - public ResponseEntity> getDatasourceTables(@PathVariable Integer datasourceId) { + public ResponseEntity> getDatasourceTables( + @PathVariable(value = "datasourceId") Integer datasourceId) { Map response = new HashMap<>(); try { @@ -245,7 +246,7 @@ public ResponseEntity> getDatasourceTables(@PathVariable Int */ @PostMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @ResponseBody - public Flux> agentChat(@PathVariable Long agentId, + public Flux> agentChat(@PathVariable(value = "agentId") Long agentId, @RequestBody Map requestData, HttpServletResponse response) { try { diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgeController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgeController.java index 48459b8e07..73789b6902 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgeController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgeController.java @@ -39,7 +39,8 @@ public BusinessKnowledgeController(BusinessKnowledgeService businessKnowledgeSer @GetMapping @ResponseBody - public ResponseEntity> list(@RequestParam(required = false) String datasetId, + public ResponseEntity> list( + @RequestParam(value = "datasetId", required = false) String datasetId, @RequestParam(required = false) String keyword) { List result; if (keyword != null && !keyword.trim().isEmpty()) { @@ -56,7 +57,7 @@ else if (datasetId != null && !datasetId.trim().isEmpty()) { @GetMapping("/{id}") @ResponseBody - public ResponseEntity get(@PathVariable Long id) { + public ResponseEntity get(@PathVariable(value = "id") Long id) { BusinessKnowledge knowledge = businessKnowledgeService.findById(id); if (knowledge == null) { return ResponseEntity.notFound().build(); @@ -73,7 +74,8 @@ public ResponseEntity create(@RequestBody BusinessKnowledge k @PutMapping("/{id}") @ResponseBody - public ResponseEntity update(@PathVariable Long id, @RequestBody BusinessKnowledge knowledge) { + public ResponseEntity update(@PathVariable(value = "id") Long id, + @RequestBody BusinessKnowledge knowledge) { if (businessKnowledgeService.findById(id) == null) { return ResponseEntity.notFound().build(); } @@ -84,7 +86,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestB @DeleteMapping("/{id}") @ResponseBody - public ResponseEntity delete(@PathVariable Long id) { + public ResponseEntity delete(@PathVariable(value = "id") Long id) { if (businessKnowledgeService.findById(id) == null) { return ResponseEntity.notFound().build(); } diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgePersistenceController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgePersistenceController.java index 7d62011ce7..5a496c4bb4 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgePersistenceController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/BusinessKnowledgePersistenceController.java @@ -65,28 +65,28 @@ public ResponseEntity> getDataSetIds() { // Get data by datasetId @GetMapping("/dataset/{datasetId}") - public ResponseEntity> getDataSetById(@PathVariable String datasetId) { + public ResponseEntity> getDataSetById(@PathVariable(value = "datasetId") String datasetId) { List knowledge = businessKnowledgePersistenceService.getFieldByDataSetId(datasetId); return ResponseEntity.ok(knowledge); } // Search @GetMapping("/search") - public ResponseEntity> searchFields(@RequestParam String content) { + public ResponseEntity> searchFields(@RequestParam(value = "content") String content) { List knowledge = businessKnowledgePersistenceService.searchFields(content); return ResponseEntity.ok(knowledge); } // Delete by id @DeleteMapping("/delete/{id}") - public ResponseEntity deleteFieldById(@PathVariable long id) { + public ResponseEntity deleteFieldById(@PathVariable(value = "id") long id) { businessKnowledgePersistenceService.deleteFieldById(id); return ResponseEntity.ok(ApiResponse.success("业务知识删除成功")); } // Edit update @PutMapping("/update/{id}") - public ResponseEntity updateField(@PathVariable long id, + public ResponseEntity updateField(@PathVariable(value = "id") long id, @RequestBody BusinessKnowledgeDTO knowledgeDTO) { businessKnowledgePersistenceService.updateField(knowledgeDTO, id); return ResponseEntity.ok(ApiResponse.success("业务知识更新成功")); @@ -94,14 +94,15 @@ public ResponseEntity updateField(@PathVariable long id, // Get business knowledge list by agent ID @GetMapping("/agent/{agentId}") - public ResponseEntity> getKnowledgeByAgentId(@PathVariable String agentId) { + public ResponseEntity> getKnowledgeByAgentId( + @PathVariable(value = "agentId") String agentId) { List knowledge = businessKnowledgePersistenceService.getKnowledgeByAgentId(agentId); return ResponseEntity.ok(knowledge); } // Add business knowledge for agent @PostMapping("/agent/{agentId}/add") - public ResponseEntity addKnowledgeForAgent(@PathVariable String agentId, + public ResponseEntity addKnowledgeForAgent(@PathVariable(value = "agentId") String agentId, @RequestBody BusinessKnowledgeDTO knowledgeDTO) { knowledgeDTO.setAgentId(agentId); businessKnowledgePersistenceService.addKnowledge(knowledgeDTO); @@ -110,7 +111,7 @@ public ResponseEntity addKnowledgeForAgent(@PathVariable String age // Batch add business knowledge for agent @PostMapping("/agent/{agentId}/addList") - public ResponseEntity addKnowledgeListForAgent(@PathVariable String agentId, + public ResponseEntity addKnowledgeListForAgent(@PathVariable(value = "agentId") String agentId, @RequestBody List knowledgeDTOs) { knowledgeDTOs.forEach(dto -> dto.setAgentId(agentId)); businessKnowledgePersistenceService.addKnowledgeList(knowledgeDTOs); @@ -119,15 +120,15 @@ public ResponseEntity addKnowledgeListForAgent(@PathVariable String // Delete all business knowledge by agent ID @DeleteMapping("/agent/{agentId}") - public ResponseEntity deleteKnowledgeByAgentId(@PathVariable String agentId) { + public ResponseEntity deleteKnowledgeByAgentId(@PathVariable(value = "agentId") String agentId) { businessKnowledgePersistenceService.deleteKnowledgeByAgentId(agentId); return ResponseEntity.ok(ApiResponse.success("智能体业务知识删除成功")); } // Search business knowledge within agent scope @GetMapping("/agent/{agentId}/search") - public ResponseEntity> searchKnowledgeInAgent(@PathVariable String agentId, - @RequestParam String content) { + public ResponseEntity> searchKnowledgeInAgent( + @PathVariable(value = "agentId") String agentId, @RequestParam(value = "content") String content) { List knowledge = businessKnowledgePersistenceService.searchKnowledgeInAgent(agentId, content); return ResponseEntity.ok(knowledge); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/ChatController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/ChatController.java index 101918b33b..1fcd234cc1 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/ChatController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/ChatController.java @@ -56,7 +56,7 @@ public class ChatController { * Get session list for an agent */ @GetMapping("/agent/{id}/sessions") - public ResponseEntity> getAgentSessions(@PathVariable Integer id) { + public ResponseEntity> getAgentSessions(@PathVariable(value = "id") Integer id) { List sessions = chatSessionService.findByAgentId(id); return ResponseEntity.ok(sessions); } @@ -65,7 +65,7 @@ public ResponseEntity> getAgentSessions(@PathVariable Integer * Create a new session */ @PostMapping("/agent/{id}/sessions") - public ResponseEntity createSession(@PathVariable Integer id, + public ResponseEntity createSession(@PathVariable(value = "id") Integer id, @RequestBody(required = false) Map request) { String title = request != null ? (String) request.get("title") : null; Long userId = request != null ? (Long) request.get("userId") : null; @@ -78,7 +78,7 @@ public ResponseEntity createSession(@PathVariable Integer id, * Clear all sessions for an agent */ @DeleteMapping("/agent/{id}/sessions") - public ResponseEntity clearAgentSessions(@PathVariable Integer id) { + public ResponseEntity clearAgentSessions(@PathVariable(value = "id") Integer id) { chatSessionService.clearSessionsByAgentId(id); return ResponseEntity.ok(ApiResponse.success("会话已清空")); } @@ -87,7 +87,7 @@ public ResponseEntity clearAgentSessions(@PathVariable Integer id) * Get message list for a session */ @GetMapping("/sessions/{sessionId}/messages") - public ResponseEntity> getSessionMessages(@PathVariable String sessionId) { + public ResponseEntity> getSessionMessages(@PathVariable(value = "sessionId") String sessionId) { List messages = chatMessageService.findBySessionId(sessionId); return ResponseEntity.ok(messages); } @@ -96,7 +96,7 @@ public ResponseEntity> getSessionMessages(@PathVariable String * Agent chat interface */ @PostMapping("/agent/{id}/chat") - public ResponseEntity chat(@PathVariable Integer id, @RequestBody ChatRequest request) { + public ResponseEntity chat(@PathVariable(value = "id") Integer id, @RequestBody ChatRequest request) { try { // Verify that the agent exists Agent agent = agentService.findById(id.longValue()); @@ -182,7 +182,8 @@ public ResponseEntity chat(@PathVariable Integer id, @RequestBody * Save message to session */ @PostMapping("/sessions/{sessionId}/messages") - public ResponseEntity saveMessage(@PathVariable String sessionId, @RequestBody ChatMessage message) { + public ResponseEntity saveMessage(@PathVariable(value = "sessionId") String sessionId, + @RequestBody ChatMessage message) { try { // Set session ID message.setSessionId(sessionId); @@ -205,7 +206,7 @@ public ResponseEntity saveMessage(@PathVariable String sessionId, @ * 置顶/取消置顶会话 */ @PutMapping("/sessions/{sessionId}/pin") - public ResponseEntity pinSession(@PathVariable String sessionId, + public ResponseEntity pinSession(@PathVariable(value = "sessionId") String sessionId, @RequestBody Map request) { try { Boolean isPinned = (Boolean) request.get("isPinned"); @@ -227,7 +228,7 @@ public ResponseEntity pinSession(@PathVariable String sessionId, * Rename session */ @PutMapping("/sessions/{sessionId}/rename") - public ResponseEntity renameSession(@PathVariable String sessionId, + public ResponseEntity renameSession(@PathVariable(value = "sessionId") String sessionId, @RequestBody Map request) { try { String newTitle = (String) request.get("title"); @@ -248,7 +249,7 @@ public ResponseEntity renameSession(@PathVariable String sessionId, * Delete a single session */ @DeleteMapping("/sessions/{sessionId}") - public ResponseEntity deleteSession(@PathVariable String sessionId) { + public ResponseEntity deleteSession(@PathVariable(value = "sessionId") String sessionId) { try { chatSessionService.deleteSession(sessionId); return ResponseEntity.ok(ApiResponse.success("会话已删除")); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/DatasourceController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/DatasourceController.java index a7bcdc2436..ccb03c6465 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/DatasourceController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/DatasourceController.java @@ -69,7 +69,7 @@ else if (type != null && !type.isEmpty()) { * Get data source details by ID */ @GetMapping("/{id}") - public ResponseEntity getDatasourceById(@PathVariable Integer id) { + public ResponseEntity getDatasourceById(@PathVariable(value = "id") Integer id) { Datasource datasource = datasourceService.getDatasourceById(id); if (datasource != null) { return ResponseEntity.ok(datasource); @@ -97,7 +97,8 @@ public ResponseEntity createDatasource(@RequestBody Datasource datas * Update data source */ @PutMapping("/{id}") - public ResponseEntity updateDatasource(@PathVariable Integer id, @RequestBody Datasource datasource) { + public ResponseEntity updateDatasource(@PathVariable(value = "id") Integer id, + @RequestBody Datasource datasource) { try { Datasource updated = datasourceService.updateDatasource(id, datasource); return ResponseEntity.ok(updated); @@ -111,7 +112,7 @@ public ResponseEntity updateDatasource(@PathVariable Integer id, @Re * Delete data source */ @DeleteMapping("/{id}") - public ResponseEntity> deleteDatasource(@PathVariable Integer id) { + public ResponseEntity> deleteDatasource(@PathVariable(value = "id") Integer id) { try { datasourceService.deleteDatasource(id); Map response = new HashMap<>(); @@ -131,7 +132,7 @@ public ResponseEntity> deleteDatasource(@PathVariable Intege * Test data source connection */ @PostMapping("/{id}/test") - public ResponseEntity> testConnection(@PathVariable Integer id) { + public ResponseEntity> testConnection(@PathVariable(value = "id") Integer id) { try { boolean success = datasourceService.testConnection(id); Map response = new HashMap<>(); @@ -165,7 +166,7 @@ public ResponseEntity> getDatasourceStats() { * Get data source list associated with agent */ @GetMapping("/agent/{agentId}") - public ResponseEntity> getAgentDatasources(@PathVariable Integer agentId) { + public ResponseEntity> getAgentDatasources(@PathVariable(value = "agentId") Integer agentId) { try { List agentDatasources = datasourceService.getAgentDatasources(agentId); return ResponseEntity.ok(agentDatasources); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/EchoController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/EchoController.java new file mode 100644 index 0000000000..51fc6b73c3 --- /dev/null +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/EchoController.java @@ -0,0 +1,38 @@ +/* + * Copyright 2024-2025 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.alibaba.cloud.ai.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author yingzi + * @since 2025/9/16 + */ +@RestController +@RequestMapping("/echo") +public class EchoController { + + /** + * 心跳检测 + */ + @GetMapping("ok") + public String ok() { + return "ok"; + } + +} diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2SqlController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2SqlController.java index 9b218eba68..d6e9a5890e 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2SqlController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2SqlController.java @@ -62,8 +62,8 @@ public Nl2SqlController(Nl2SqlService nl2SqlService) { * @return sql结果 */ @GetMapping("/nl2sql") - public String nl2sql(@RequestParam String query, - @RequestParam(required = false, defaultValue = "") String agentId) { + public String nl2sql(@RequestParam(value = "query") String query, + @RequestParam(value = "agentId", required = false, defaultValue = "") String agentId) { try { return this.nl2SqlService.nl2sql(query, agentId); } @@ -81,8 +81,9 @@ public String nl2sql(@RequestParam String query, * @return NL2SQL执行过程 */ @GetMapping(value = "/stream/nl2sql", produces = MediaType.TEXT_EVENT_STREAM_VALUE) - public Flux> nl2sqlWithProcess(@RequestParam String query, - @RequestParam(required = false, defaultValue = "") String agentId, HttpServletResponse response) { + public Flux> nl2sqlWithProcess(@RequestParam(value = "query") String query, + @RequestParam(value = "agentId", required = false, defaultValue = "") String agentId, + HttpServletResponse response) { // Set SSE-related HTTP headers response.setCharacterEncoding("UTF-8"); response.setContentType("text/event-stream"); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2sqlForGraphController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2sqlForGraphController.java index 526c0870db..a6ed0d6c48 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2sqlForGraphController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/Nl2sqlForGraphController.java @@ -77,8 +77,10 @@ public Nl2sqlForGraphController(@Qualifier("nl2sqlGraph") StateGraph stateGraph, } @GetMapping("/search") - public String search(@RequestParam String query, @RequestParam String dataSetId, @RequestParam String agentId) - throws Exception { + public String search( + @RequestParam(required = false, defaultValue = "查询每个分类下已经成交且销量最高的商品及其销售总量,每个分类只返回销量最高的商品。") String query, + @RequestParam(required = false, defaultValue = "1") String dataSetId, + @RequestParam(required = false, defaultValue = "1") String agentId) throws Exception { // Get the data source configuration for an agent for vector initialization DbConfig dbConfig = getDbConfigForAgent(Integer.valueOf(agentId)); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/PromptConfigController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/PromptConfigController.java index 6cc09566b5..5fd367b594 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/PromptConfigController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/PromptConfigController.java @@ -82,7 +82,7 @@ public ResponseEntity> saveConfig(@RequestBody PromptConfigD * @return configuration information */ @GetMapping("/{id}") - public ResponseEntity> getConfig(@PathVariable String id) { + public ResponseEntity> getConfig(@PathVariable(value = "id") String id) { try { UserPromptConfig config = promptConfigService.getConfigById(id); @@ -142,7 +142,7 @@ public ResponseEntity> getAllConfigs() { * @return configuration list */ @GetMapping("/list-by-type/{promptType}") - public ResponseEntity> getConfigsByType(@PathVariable String promptType) { + public ResponseEntity> getConfigsByType(@PathVariable(value = "promptType") String promptType) { try { List configs = promptConfigService.getConfigsByType(promptType); @@ -170,7 +170,7 @@ public ResponseEntity> getConfigsByType(@PathVariable String * @return currently enabled configuration */ @GetMapping("/active/{promptType}") - public ResponseEntity> getActiveConfig(@PathVariable String promptType) { + public ResponseEntity> getActiveConfig(@PathVariable(value = "promptType") String promptType) { try { UserPromptConfig config = promptConfigService.getActiveConfigByType(promptType); @@ -198,7 +198,7 @@ public ResponseEntity> getActiveConfig(@PathVariable String * @return 启用的优化配置列表 */ @GetMapping("/active-all/{promptType}") - public ResponseEntity> getActiveConfigs(@PathVariable String promptType) { + public ResponseEntity> getActiveConfigs(@PathVariable(value = "promptType") String promptType) { try { List configs = promptConfigService.getActiveConfigsByType(promptType); @@ -227,7 +227,7 @@ public ResponseEntity> getActiveConfigs(@PathVariable String * @return operation result */ @DeleteMapping("/{id}") - public ResponseEntity> deleteConfig(@PathVariable String id) { + public ResponseEntity> deleteConfig(@PathVariable(value = "id") String id) { try { boolean deleted = promptConfigService.deleteConfig(id); @@ -260,7 +260,7 @@ public ResponseEntity> deleteConfig(@PathVariable String id) * @return operation result */ @PostMapping("/{id}/enable") - public ResponseEntity> enableConfig(@PathVariable String id) { + public ResponseEntity> enableConfig(@PathVariable(value = "id") String id) { try { boolean enabled = promptConfigService.enableConfig(id); @@ -293,7 +293,7 @@ public ResponseEntity> enableConfig(@PathVariable String id) * @return operation result */ @PostMapping("/{id}/disable") - public ResponseEntity> disableConfig(@PathVariable String id) { + public ResponseEntity> disableConfig(@PathVariable(value = "id") String id) { try { boolean disabled = promptConfigService.disableConfig(id); diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelController.java index be67219b89..6f6ce927a1 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelController.java @@ -39,8 +39,8 @@ public SemanticModelController(SemanticModelService semanticModelService) { @GetMapping @ResponseBody - public ResponseEntity> list(@RequestParam(required = false) String keyword, - @RequestParam(required = false) Long agentId) { + public ResponseEntity> list(@RequestParam(value = "keyword", required = false) String keyword, + @RequestParam(value = "agentId", required = false) Long agentId) { List result; if (keyword != null && !keyword.trim().isEmpty()) { result = semanticModelService.search(keyword); @@ -56,7 +56,7 @@ else if (agentId != null) { @GetMapping("/{id}") @ResponseBody - public ResponseEntity get(@PathVariable Long id) { + public ResponseEntity get(@PathVariable(value = "id") Long id) { SemanticModel model = semanticModelService.findById(id); if (model == null) { return ResponseEntity.notFound().build(); @@ -73,7 +73,7 @@ public ResponseEntity create(@RequestBody SemanticModel model) { @PutMapping("/{id}") @ResponseBody - public ResponseEntity update(@PathVariable Long id, @RequestBody SemanticModel model) { + public ResponseEntity update(@PathVariable(value = "id") Long id, @RequestBody SemanticModel model) { if (semanticModelService.findById(id) == null) { return ResponseEntity.notFound().build(); } @@ -84,7 +84,7 @@ public ResponseEntity update(@PathVariable Long id, @RequestBody @DeleteMapping("/{id}") @ResponseBody - public ResponseEntity delete(@PathVariable Long id) { + public ResponseEntity delete(@PathVariable(value = "id") Long id) { if (semanticModelService.findById(id) == null) { return ResponseEntity.notFound().build(); } diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelPersistenceController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelPersistenceController.java index 4529799f7e..5c4d6c597a 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelPersistenceController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SemanticModelPersistenceController.java @@ -62,28 +62,29 @@ public ResponseEntity disableFields(@RequestBody List ids) { // Get data by agentId @GetMapping("/agent/{agentId}") - public ResponseEntity> getFieldsByAgentId(@PathVariable Long agentId) { + public ResponseEntity> getFieldsByAgentId(@PathVariable(value = "agentId") Long agentId) { List fields = semanticModelPersistenceService.getFieldByAgentId(agentId); return ResponseEntity.ok(fields); } // Search @GetMapping("/search") - public ResponseEntity> searchFields(@RequestParam String content) { + public ResponseEntity> searchFields(@RequestParam(value = "content") String content) { List fields = semanticModelPersistenceService.searchFields(content); return ResponseEntity.ok(fields); } // Delete by id @DeleteMapping("/{id}") - public ResponseEntity deleteFieldById(@PathVariable long id) { + public ResponseEntity deleteFieldById(@PathVariable(value = "id") long id) { semanticModelPersistenceService.deleteFieldById(id); return ResponseEntity.ok().build(); } // Edit update @PutMapping("/{id}") - public ResponseEntity updateField(@PathVariable long id, @RequestBody SemanticModelDTO semanticModelDTO) { + public ResponseEntity updateField(@PathVariable(value = "id") long id, + @RequestBody SemanticModelDTO semanticModelDTO) { semanticModelPersistenceService.updateField(semanticModelDTO, id); return ResponseEntity.ok().build(); } diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SimpleChatController.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SimpleChatController.java index 79d237c5bb..2acda4ec2c 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SimpleChatController.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/controller/SimpleChatController.java @@ -19,6 +19,7 @@ import com.alibaba.cloud.ai.request.SchemaInitRequest; import com.alibaba.cloud.ai.service.simple.SimpleNl2SqlService; import com.alibaba.cloud.ai.service.simple.SimpleVectorStoreService; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -34,7 +35,7 @@ public class SimpleChatController { private final DbConfig dbConfig; - public SimpleChatController(SimpleNl2SqlService simpleNl2SqlService, + public SimpleChatController(@Qualifier("simpleNl2SqlService") SimpleNl2SqlService simpleNl2SqlService, SimpleVectorStoreService simpleVectorStoreService, DbConfig dbConfig) { this.simpleNl2SqlService = simpleNl2SqlService; this.simpleVectorStoreService = simpleVectorStoreService; diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/service/AgentService.java b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/service/AgentService.java index c7881623ce..cbda209cb0 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/service/AgentService.java +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/java/com/alibaba/cloud/ai/service/AgentService.java @@ -41,7 +41,7 @@ public class AgentService { @Autowired private JdbcTemplate jdbcTemplate; - @Autowired(required = false) + @Autowired private AgentVectorService agentVectorService; private static final String SELECT_ALL = """ diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/resources/application.yml b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/resources/application.yml index c143d3f105..cc98822f54 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/resources/application.yml +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-management/src/main/resources/application.yml @@ -2,7 +2,7 @@ server: port: 8065 spring: datasource: - url: ${NL2SQL_DATASOURCE_URL:jdbc:mysql://127.0.0.1:3306/nl2sql_database?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai} + url: ${NL2SQL_DATASOURCE_URL:jdbc:mysql://127.0.0.1:3306/nl2sql?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowMultiQueries=true&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai} username: ${NL2SQL_DATASOURCE_USERNAME:root} password: ${NL2SQL_DATASOURCE_PASSWORD:root} driver-class-name: com.mysql.cj.jdbc.Driver diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/package-lock.json b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/package-lock.json index dda0049db0..23c335cc66 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/package-lock.json +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/package-lock.json @@ -877,9 +877,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -1375,9 +1375,9 @@ } }, "node_modules/vite": { - "version": "5.4.19", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", - "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "version": "5.4.20", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", + "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", "dev": true, "license": "MIT", "dependencies": { diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/utils/api.js b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/utils/api.js index 861e07d465..61848cf3e9 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/utils/api.js +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/utils/api.js @@ -18,7 +18,8 @@ * 统一处理 API 请求和响应 */ -const API_BASE_URL = '/api' +// 这个是后端服务接口地址 +const API_BASE_URL = 'http://localhost:8065/api' /** * 发送 HTTP 请求的通用方法 @@ -45,7 +46,11 @@ async function request(url, options = {}) { errorData = await response.json() } catch (e) { // 如果无法解析JSON,使用默认错误信息 - errorData = { message: response.statusText } + errorData = { + message: response.statusText, + status: response.status, + url: `${API_BASE_URL}${url}` + } } const error = new Error(`HTTP ${response.status}: ${response.statusText}`) @@ -69,6 +74,10 @@ async function request(url, options = {}) { } } catch (error) { console.error('API 请求失败:', error) + // 提供更详细的错误信息 + if (!error.response) { + error.message = `网络错误或服务器无响应: ${error.message}` + } throw error } } @@ -125,7 +134,7 @@ export const presetQuestionApi = { export const agentApi = { // 获取智能体列表 getList(params) { - return get('/agent', params) + return get('/agent/list', params) }, // 创建智能体 @@ -181,11 +190,13 @@ export const businessKnowledgeApi = { // 搜索业务知识 search(keyword) { return get('/knowledge/search', { content: keyword }) + }, // 在智能体范围内搜索业务知识 searchInAgent(agentId, keyword) { return get(`/knowledge/agent/${agentId}/search`, { content: keyword }) + }, // 创建业务知识 @@ -240,6 +251,7 @@ export const businessKnowledgeApi = { export const semanticModelApi = { // 获取语义模型列表 getList(params) { + // 处理params可能为空的情况 if (params && params.agentId) { // 如果有agentId参数,使用agent端点 return get(`/fields/agent/${params.agentId}`) diff --git a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/views/AgentList.vue b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/views/AgentList.vue index af77000927..a35c5fa5fe 100644 --- a/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/views/AgentList.vue +++ b/spring-ai-alibaba-nl2sql/spring-ai-alibaba-nl2sql-web-ui/src/views/AgentList.vue @@ -318,10 +318,25 @@ export default { } } catch (error) { console.error('加载智能体列表失败:', error) + let errorMessage = '加载失败,请重试' + + // 提供更具体的错误信息 + if (error.response) { + if (error.response.status === 500) { + errorMessage = '服务器内部错误,请稍后重试或联系管理员' + } else if (error.response.status === 404) { + errorMessage = '请求的资源未找到' + } else if (error.response.data && error.response.data.message) { + errorMessage = error.response.data.message + } + } else if (error.message) { + errorMessage = error.message + } + if (useMockData.value) { agents.value = mockAgents } else { - alert('加载失败,请重试') + alert(errorMessage) } } finally { loading.value = false