Skip to content

Commit 82de172

Browse files
committed
feat(file): make fileStorage can switch, get file resource by storage type
1 parent b132bfb commit 82de172

12 files changed

Lines changed: 208 additions & 115 deletions

data-agent-management/src/main/java/com/alibaba/cloud/ai/dataagent/config/DataAgentConfiguration.java

Lines changed: 103 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,120 @@
1515
*/
1616
package com.alibaba.cloud.ai.dataagent.config;
1717

18+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.AGENT_ID;
19+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.COLUMN_DOCUMENTS__FOR_SCHEMA_OUTPUT;
20+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.DB_DIALECT_TYPE;
21+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.EVIDENCE;
22+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.EVIDENCE_RECALL_NODE;
23+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.FEASIBILITY_ASSESSMENT_NODE;
24+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.FEASIBILITY_ASSESSMENT_NODE_OUTPUT;
25+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.GENEGRATED_SEMANTIC_MODEL_PROMPT;
26+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.HUMAN_FEEDBACK_DATA;
27+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.HUMAN_FEEDBACK_NODE;
28+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.HUMAN_REVIEW_ENABLED;
29+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.INPUT_KEY;
30+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.INTENT_RECOGNITION_NODE;
31+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.INTENT_RECOGNITION_NODE_OUTPUT;
32+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.IS_ONLY_NL2SQL;
33+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.MULTI_TURN_CONTEXT;
34+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.NL2SQL_GRAPH_NAME;
35+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLANNER_NODE;
36+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLANNER_NODE_OUTPUT;
37+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLAN_CURRENT_STEP;
38+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLAN_EXECUTOR_NODE;
39+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLAN_NEXT_NODE;
40+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLAN_REPAIR_COUNT;
41+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLAN_VALIDATION_ERROR;
42+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PLAN_VALIDATION_STATUS;
43+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_ANALYSIS_NODE_OUTPUT;
44+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_ANALYZE_NODE;
45+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_EXECUTE_NODE;
46+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_EXECUTE_NODE_OUTPUT;
47+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_FALLBACK_MODE;
48+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_GENERATE_NODE;
49+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_GENERATE_NODE_OUTPUT;
50+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_IS_SUCCESS;
51+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.PYTHON_TRIES_COUNT;
52+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.QUERY_ENHANCE_NODE;
53+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.QUERY_ENHANCE_NODE_OUTPUT;
54+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.REPORT_GENERATOR_NODE;
55+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.RESULT;
56+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SCHEMA_RECALL_NODE;
57+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SEMANTIC_CONSISTENCY_NODE;
58+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SEMANTIC_CONSISTENCY_NODE_OUTPUT;
59+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_EXECUTE_NODE;
60+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_EXECUTE_NODE_OUTPUT;
61+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_GENERATE_COUNT;
62+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_GENERATE_NODE;
63+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_GENERATE_OUTPUT;
64+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_GENERATE_SCHEMA_MISSING_ADVICE;
65+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_REGENERATE_REASON;
66+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.SQL_RESULT_LIST_MEMORY;
67+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.TABLE_DOCUMENTS_FOR_SCHEMA_OUTPUT;
68+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.TABLE_RELATION_EXCEPTION_OUTPUT;
69+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.TABLE_RELATION_NODE;
70+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.TABLE_RELATION_OUTPUT;
71+
import static com.alibaba.cloud.ai.dataagent.constant.Constant.TABLE_RELATION_RETRY_COUNT;
72+
import static com.alibaba.cloud.ai.graph.StateGraph.END;
73+
import static com.alibaba.cloud.ai.graph.StateGraph.START;
74+
import static com.alibaba.cloud.ai.graph.action.AsyncEdgeAction.edge_async;
75+
1876
import com.alibaba.cloud.ai.dataagent.properties.CodeExecutorProperties;
1977
import com.alibaba.cloud.ai.dataagent.properties.DataAgentProperties;
20-
import com.alibaba.cloud.ai.dataagent.properties.FileStorageProperties;
78+
import com.alibaba.cloud.ai.dataagent.service.aimodelconfig.AiModelRegistry;
2179
import com.alibaba.cloud.ai.dataagent.service.vectorstore.SimpleVectorStoreInitialization;
22-
import com.alibaba.cloud.ai.dataagent.splitter.SentenceSplitter;
23-
import com.alibaba.cloud.ai.transformer.splitter.RecursiveCharacterTextSplitter;
24-
import com.alibaba.cloud.ai.dataagent.splitter.SemanticTextSplitter;
2580
import com.alibaba.cloud.ai.dataagent.splitter.ParagraphTextSplitter;
81+
import com.alibaba.cloud.ai.dataagent.splitter.SemanticTextSplitter;
82+
import com.alibaba.cloud.ai.dataagent.splitter.SentenceSplitter;
83+
import com.alibaba.cloud.ai.dataagent.strategy.EnhancedTokenCountBatchingStrategy;
2684
import com.alibaba.cloud.ai.dataagent.util.McpServerToolUtil;
2785
import com.alibaba.cloud.ai.dataagent.util.NodeBeanUtil;
28-
import com.alibaba.cloud.ai.dataagent.service.aimodelconfig.AiModelRegistry;
29-
import com.alibaba.cloud.ai.dataagent.strategy.EnhancedTokenCountBatchingStrategy;
30-
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.*;
31-
import com.alibaba.cloud.ai.dataagent.workflow.node.*;
86+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.FeasibilityAssessmentDispatcher;
87+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.HumanFeedbackDispatcher;
88+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.IntentRecognitionDispatcher;
89+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.PlanExecutorDispatcher;
90+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.PythonExecutorDispatcher;
91+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.QueryEnhanceDispatcher;
92+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.SQLExecutorDispatcher;
93+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.SchemaRecallDispatcher;
94+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.SemanticConsistenceDispatcher;
95+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.SqlGenerateDispatcher;
96+
import com.alibaba.cloud.ai.dataagent.workflow.dispatcher.TableRelationDispatcher;
97+
import com.alibaba.cloud.ai.dataagent.workflow.node.EvidenceRecallNode;
98+
import com.alibaba.cloud.ai.dataagent.workflow.node.FeasibilityAssessmentNode;
99+
import com.alibaba.cloud.ai.dataagent.workflow.node.HumanFeedbackNode;
100+
import com.alibaba.cloud.ai.dataagent.workflow.node.IntentRecognitionNode;
101+
import com.alibaba.cloud.ai.dataagent.workflow.node.PlanExecutorNode;
102+
import com.alibaba.cloud.ai.dataagent.workflow.node.PlannerNode;
103+
import com.alibaba.cloud.ai.dataagent.workflow.node.PythonAnalyzeNode;
104+
import com.alibaba.cloud.ai.dataagent.workflow.node.PythonExecuteNode;
105+
import com.alibaba.cloud.ai.dataagent.workflow.node.PythonGenerateNode;
106+
import com.alibaba.cloud.ai.dataagent.workflow.node.QueryEnhanceNode;
107+
import com.alibaba.cloud.ai.dataagent.workflow.node.ReportGeneratorNode;
108+
import com.alibaba.cloud.ai.dataagent.workflow.node.SchemaRecallNode;
109+
import com.alibaba.cloud.ai.dataagent.workflow.node.SemanticConsistencyNode;
110+
import com.alibaba.cloud.ai.dataagent.workflow.node.SqlExecuteNode;
111+
import com.alibaba.cloud.ai.dataagent.workflow.node.SqlGenerateNode;
112+
import com.alibaba.cloud.ai.dataagent.workflow.node.TableRelationNode;
32113
import com.alibaba.cloud.ai.graph.GraphRepresentation;
33114
import com.alibaba.cloud.ai.graph.KeyStrategy;
34115
import com.alibaba.cloud.ai.graph.KeyStrategyFactory;
35116
import com.alibaba.cloud.ai.graph.StateGraph;
36117
import com.alibaba.cloud.ai.graph.exception.GraphStateException;
118+
import com.alibaba.cloud.ai.transformer.splitter.RecursiveCharacterTextSplitter;
37119
import com.knuddels.jtokkit.api.EncodingType;
120+
import java.time.Duration;
121+
import java.util.ArrayList;
122+
import java.util.HashMap;
123+
import java.util.List;
124+
import java.util.Map;
125+
import java.util.Optional;
126+
import java.util.concurrent.ExecutorService;
127+
import java.util.concurrent.LinkedBlockingQueue;
128+
import java.util.concurrent.ThreadFactory;
129+
import java.util.concurrent.ThreadPoolExecutor;
130+
import java.util.concurrent.TimeUnit;
131+
import java.util.concurrent.atomic.AtomicInteger;
38132
import lombok.extern.slf4j.Slf4j;
39133
import org.springframework.ai.embedding.BatchingStrategy;
40134
import org.springframework.ai.embedding.EmbeddingModel;
@@ -67,16 +161,6 @@
67161
import org.springframework.web.reactive.function.client.WebClient;
68162
import reactor.netty.http.client.HttpClient;
69163

70-
import java.time.Duration;
71-
import java.util.*;
72-
import java.util.concurrent.*;
73-
import java.util.concurrent.atomic.AtomicInteger;
74-
75-
import static com.alibaba.cloud.ai.dataagent.constant.Constant.*;
76-
import static com.alibaba.cloud.ai.graph.StateGraph.END;
77-
import static com.alibaba.cloud.ai.graph.StateGraph.START;
78-
import static com.alibaba.cloud.ai.graph.action.AsyncEdgeAction.edge_async;
79-
80164
/**
81165
* DataAgent的自动配置类
82166
*
@@ -86,7 +170,7 @@
86170
@Slf4j
87171
@Configuration
88172
@EnableAsync
89-
@EnableConfigurationProperties({ CodeExecutorProperties.class, DataAgentProperties.class, FileStorageProperties.class })
173+
@EnableConfigurationProperties({ CodeExecutorProperties.class, DataAgentProperties.class })
90174
public class DataAgentConfiguration implements DisposableBean {
91175

92176
/**
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* Copyright 2026 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.alibaba.cloud.ai.dataagent.config;
17+
18+
import com.alibaba.cloud.ai.dataagent.constant.Constant;
19+
import com.alibaba.cloud.ai.dataagent.properties.FileStorageProperties;
20+
import com.alibaba.cloud.ai.dataagent.properties.OssStorageProperties;
21+
import com.alibaba.cloud.ai.dataagent.service.file.FileStorageProvider;
22+
import com.alibaba.cloud.ai.dataagent.service.file.impls.LocalFileStorageProviderImpl;
23+
import com.alibaba.cloud.ai.dataagent.service.file.impls.OssFileStorageProviderImpl;
24+
import lombok.RequiredArgsConstructor;
25+
import lombok.extern.slf4j.Slf4j;
26+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
27+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
28+
import org.springframework.context.annotation.Bean;
29+
import org.springframework.context.annotation.Configuration;
30+
31+
@Slf4j
32+
@Configuration
33+
@EnableConfigurationProperties({ FileStorageProperties.class, OssStorageProperties.class })
34+
@RequiredArgsConstructor
35+
public class FileStorageConfiguration {
36+
37+
private final FileStorageProperties fileStorageProperties;
38+
39+
private final OssStorageProperties ossStorageProperties;
40+
41+
@Bean("local")
42+
public FileStorageProvider localFileStorageProvider() {
43+
return new LocalFileStorageProviderImpl(fileStorageProperties);
44+
}
45+
46+
@Bean("oss")
47+
@ConditionalOnProperty(name = Constant.PROJECT_PROPERTIES_PREFIX + ".file.oss.enabled", havingValue = "true")
48+
public FileStorageProvider ossFileStorageProvider() {
49+
return new OssFileStorageProviderImpl(fileStorageProperties, ossStorageProperties);
50+
}
51+
52+
}

data-agent-management/src/main/java/com/alibaba/cloud/ai/dataagent/controller/AgentKnowledgeController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public Mono<ApiResponse<AgentKnowledgeVO>> createKnowledge(@RequestPart("agentId
8585
@RequestPart(value = "content", required = false) String content,
8686
@RequestPart(value = "file", required = false) FilePart filePart,
8787
@RequestPart(value = "splitterType", required = false) String splitterType) {
88-
88+
8989
return Mono.fromCallable(() -> {
9090
CreateKnowledgeDTO dto = buildCreateKnowledgeDTO(agentId, title, type, question, content, filePart,
9191
splitterType);

data-agent-management/src/main/java/com/alibaba/cloud/ai/dataagent/event/AgentKnowledgeEventListener.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,18 @@
1515
*/
1616
package com.alibaba.cloud.ai.dataagent.event;
1717

18-
import com.alibaba.cloud.ai.dataagent.enums.EmbeddingStatus;
1918
import com.alibaba.cloud.ai.dataagent.entity.AgentKnowledge;
19+
import com.alibaba.cloud.ai.dataagent.enums.EmbeddingStatus;
2020
import com.alibaba.cloud.ai.dataagent.mapper.AgentKnowledgeMapper;
2121
import com.alibaba.cloud.ai.dataagent.service.knowledge.AgentKnowledgeResourceManager;
22+
import java.time.LocalDateTime;
2223
import lombok.RequiredArgsConstructor;
2324
import lombok.extern.slf4j.Slf4j;
2425
import org.springframework.scheduling.annotation.Async;
2526
import org.springframework.stereotype.Component;
2627
import org.springframework.transaction.event.TransactionPhase;
2728
import org.springframework.transaction.event.TransactionalEventListener;
2829

29-
import java.time.LocalDateTime;
30-
3130
@Component
3231
@Slf4j
3332
@RequiredArgsConstructor
@@ -58,7 +57,7 @@ public void handleEmbeddingEvent(AgentKnowledgeEmbeddingEvent event) {
5857
updateStatus(knowledge, EmbeddingStatus.PROCESSING, null);
5958

6059
// 3. 执行核心向量化逻辑
61-
agentKnowledgeResourceManager.doEmbedingToVectorStore(knowledge);
60+
agentKnowledgeResourceManager.doEmbeddingToVectorStore(knowledge);
6261

6362
// 4. 更新状态为 COMPLETED
6463
updateStatus(knowledge, EmbeddingStatus.COMPLETED, null);

data-agent-management/src/main/java/com/alibaba/cloud/ai/dataagent/properties/OssStorageProperties.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
@ConfigurationProperties(prefix = Constant.PROJECT_PROPERTIES_PREFIX + ".file.oss")
2929
public class OssStorageProperties {
3030

31+
private boolean enabled = false;
32+
3133
/**
3234
* OSS访问密钥ID
3335
*/

data-agent-management/src/main/java/com/alibaba/cloud/ai/dataagent/service/file/FileStorageProviderFactory.java

Lines changed: 0 additions & 49 deletions
This file was deleted.

data-agent-management/src/main/java/com/alibaba/cloud/ai/dataagent/service/file/FileStorageService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,16 +61,16 @@ public interface FileStorageService {
6161

6262
/**
6363
* 获取文件访问URL
64-
* @param filePath 文件路径
64+
* @param fileStorage 文件存储信息
6565
* @return 访问URL
6666
*/
67-
String getFileUrl(String filePath);
67+
String getFileUrl(FileStorage fileStorage);
6868

6969
/**
7070
* 获取文件资源对象
71-
* @param filePath 文件路径
71+
* @param fileStorage 文件路径
7272
* @return 文件资源对象
7373
*/
74-
Resource getFileResource(String filePath);
74+
Resource getFileResource(FileStorage fileStorage);
7575

7676
}

0 commit comments

Comments
 (0)