diff --git a/long-image-search-mcp-server/pom.xml b/long-image-search-mcp-server/pom.xml
index 2bd5ba2..fa6ec11 100644
--- a/long-image-search-mcp-server/pom.xml
+++ b/long-image-search-mcp-server/pom.xml
@@ -29,6 +29,17 @@
21
+
+
+
+ org.springframework.ai
+ spring-ai-bom
+ 1.0.0
+ pom
+ import
+
+
+
org.springframework.boot
@@ -47,11 +58,32 @@
org.springframework.ai
- spring-ai-mcp-server-webmvc-spring-boot-starter
- 1.0.0-M6
+ spring-ai-starter-mcp-server-webmvc
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ false
+
+
+
+ Central Portal Snapshots
+ central-portal-snapshots
+ https://central.sonatype.com/repository/maven-snapshots/
+
+ false
+
+
+ true
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 46ae2c2..ea7908a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,21 +23,117 @@
21
+
+
+
+ com.baomidou
+ mybatis-plus-bom
+ 3.5.12
+ pom
+ import
+
+
+ com.alibaba.cloud.ai
+ spring-ai-alibaba-bom
+ 1.0.0.2
+ pom
+ import
+
+
+ org.springframework.ai
+ spring-ai-bom
+ 1.0.0
+ pom
+ import
+
+
+
org.springframework.boot
spring-boot-starter-web
-
+
- org.projectlombok
- lombok
- true
- 1.18.38
+ com.alibaba
+ dashscope-sdk-java
+ 2.20.0
+
+
+ com.alibaba.cloud.ai
+ spring-ai-alibaba-starter-dashscope
+
+
+
+ org.springframework.ai
+ spring-ai-starter-model-ollama
+
+
+
+ org.springframework.ai
+ spring-ai-markdown-document-reader
+
+
org.springframework.boot
- spring-boot-starter-test
+ spring-boot-starter-jdbc
+
+
+ org.postgresql
+ postgresql
+ runtime
+
+
+ org.springframework.ai
+ spring-ai-pgvector-store
+
+
+
+ org.springframework.ai
+ spring-ai-starter-mcp-client
+
+
+ org.springframework.ai
+ spring-ai-advisors-vector-store
+
+
+
+ dev.langchain4j
+ langchain4j-community-dashscope
+ 1.0.0-beta2
+
+
+
+ com.github.victools
+ jsonschema-generator
+ 4.38.0
+
+
+
+ com.esotericsoftware
+ kryo
+ 5.6.2
+
+
+
+ org.jsoup
+ jsoup
+ 1.20.1
+
+
+
+
+ com.itextpdf
+ itext-core
+ 9.1.0
+ pom
+
+
+
+ com.itextpdf
+ font-asian
+ 9.1.0
test
@@ -52,6 +148,17 @@
knife4j-openapi3-jakarta-spring-boot-starter
4.4.0
+
+ org.projectlombok
+ lombok
+ true
+ 1.18.38
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
com.mysql
@@ -69,104 +176,8 @@
com.baomidou
mybatis-plus-jsqlparser
-
-
- com.alibaba
- dashscope-sdk-java
- 2.20.0
-
-
-
- com.alibaba.cloud.ai
- spring-ai-alibaba-starter
- 1.0.0-M6.1
-
-
-
- org.springframework.ai
- spring-ai-ollama-spring-boot-starter
- 1.0.0-M6
-
-
-
- com.github.victools
- jsonschema-generator
- 4.38.0
-
-
-
- org.springframework.ai
- spring-ai-markdown-document-reader
- 1.0.0-M6
-
-
-
- org.springframework.boot
- spring-boot-starter-jdbc
-
-
- org.postgresql
- postgresql
- runtime
-
-
- org.springframework.ai
- spring-ai-pgvector-store
- 1.0.0-M6
-
-
-
- org.jsoup
- jsoup
- 1.20.1
-
-
-
- com.itextpdf
- itext-core
- 9.1.0
- pom
-
-
-
- com.itextpdf
- font-asian
- 9.1.0
- test
-
-
-
- org.springframework.ai
- spring-ai-mcp-client-spring-boot-starter
- 1.0.0-M6
-
-
-
-
-
- spring-milestones
- Spring Milestones
- https://repo.spring.io/milestone
-
- false
-
-
-
-
-
-
-
-
- com.baomidou
- mybatis-plus-bom
- 3.5.12
- pom
- import
-
-
-
@@ -202,4 +213,34 @@
+
+
+ spring-milestones
+ Spring Milestones
+ https://repo.spring.io/milestone
+
+ false
+
+
+
+ spring-snapshots
+ Spring Snapshots
+ https://repo.spring.io/snapshot
+
+ false
+
+
+
+ Central Portal Snapshots
+ central-portal-snapshots
+ https://central.sonatype.com/repository/maven-snapshots/
+
+ false
+
+
+ true
+
+
+
+
diff --git a/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java b/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java
index c9d81e1..6181653 100644
--- a/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java
+++ b/src/main/java/com/huangge1199/aiagent/LongAiAgentApplication.java
@@ -1,13 +1,12 @@
package com.huangge1199.aiagent;
-import org.springframework.ai.autoconfigure.vectorstore.pgvector.PgVectorStoreAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author hyy
*/
-@SpringBootApplication(exclude = PgVectorStoreAutoConfiguration.class)
+@SpringBootApplication
public class LongAiAgentApplication {
public static void main(String[] args) {
diff --git a/src/main/java/com/huangge1199/aiagent/Service/impl/AiServiceImpl.java b/src/main/java/com/huangge1199/aiagent/Service/impl/AiServiceImpl.java
index 520d440..fc7de33 100644
--- a/src/main/java/com/huangge1199/aiagent/Service/impl/AiServiceImpl.java
+++ b/src/main/java/com/huangge1199/aiagent/Service/impl/AiServiceImpl.java
@@ -5,13 +5,11 @@ import com.huangge1199.aiagent.config.MyLoggerAdvisor;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
-import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_CONVERSATION_ID_KEY;
-import static org.springframework.ai.chat.client.advisor.AbstractChatMemoryAdvisor.CHAT_MEMORY_RETRIEVE_SIZE_KEY;
-
/**
* AiServiceImpl
*
@@ -31,11 +29,11 @@ public class AiServiceImpl implements AiService {
ChatResponse chatResponse = chatClient
.prompt()
.user(message)
- .advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
- .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))
+ .advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, chatId))
.advisors(new MyLoggerAdvisor())
.call()
.chatResponse();
+ assert chatResponse != null;
return chatResponse.getResult().getOutput().getText();
}
@@ -44,8 +42,7 @@ public class AiServiceImpl implements AiService {
return chatClient
.prompt()
.user(message)
- .advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId)
- .param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 10))
+ .advisors(spec -> spec.param(ChatMemory.CONVERSATION_ID, chatId))
.stream()
.content();
}
diff --git a/src/main/java/com/huangge1199/aiagent/Service/impl/RagServiceImpl.java b/src/main/java/com/huangge1199/aiagent/Service/impl/RagServiceImpl.java
index 5b1305e..1d33e32 100644
--- a/src/main/java/com/huangge1199/aiagent/Service/impl/RagServiceImpl.java
+++ b/src/main/java/com/huangge1199/aiagent/Service/impl/RagServiceImpl.java
@@ -5,15 +5,15 @@ import com.huangge1199.aiagent.config.MyLoggerAdvisor;
import com.huangge1199.aiagent.rag.MyMultiQueryExpander;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
-import org.springframework.ai.chat.client.advisor.QuestionAnswerAdvisor;
-import org.springframework.ai.chat.client.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
+import org.springframework.ai.chat.client.advisor.vectorstore.QuestionAnswerAdvisor;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.document.Document;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.rag.Query;
+import org.springframework.ai.rag.advisor.RetrievalAugmentationAdvisor;
import org.springframework.ai.rag.generation.augmentation.ContextualQueryAugmenter;
import org.springframework.ai.rag.preretrieval.query.transformation.CompressionQueryTransformer;
import org.springframework.ai.rag.preretrieval.query.transformation.QueryTransformer;
diff --git a/src/main/java/com/huangge1199/aiagent/agent/ToolCallAgent.java b/src/main/java/com/huangge1199/aiagent/agent/ToolCallAgent.java
index a1bec00..5c96aee 100644
--- a/src/main/java/com/huangge1199/aiagent/agent/ToolCallAgent.java
+++ b/src/main/java/com/huangge1199/aiagent/agent/ToolCallAgent.java
@@ -51,7 +51,7 @@ public class ToolCallAgent extends ReActAgent {
this.toolCallingManager = ToolCallingManager.builder().build();
// 禁用 Spring AI 内置的工具调用机制,自己维护选项和消息上下文
this.chatOptions = DashScopeChatOptions.builder()
- .withProxyToolCalls(true)
+ .withInternalToolExecutionEnabled(false)
.build();
}
diff --git a/src/main/java/com/huangge1199/aiagent/config/MyLoggerAdvisor.java b/src/main/java/com/huangge1199/aiagent/config/MyLoggerAdvisor.java
index 5f22029..ec77dad 100644
--- a/src/main/java/com/huangge1199/aiagent/config/MyLoggerAdvisor.java
+++ b/src/main/java/com/huangge1199/aiagent/config/MyLoggerAdvisor.java
@@ -1,15 +1,16 @@
package com.huangge1199.aiagent.config;
import lombok.extern.slf4j.Slf4j;
+import org.jetbrains.annotations.NotNull;
import reactor.core.publisher.Flux;
-import org.springframework.ai.chat.client.advisor.api.AdvisedRequest;
-import org.springframework.ai.chat.client.advisor.api.AdvisedResponse;
-import org.springframework.ai.chat.client.advisor.api.CallAroundAdvisor;
-import org.springframework.ai.chat.client.advisor.api.CallAroundAdvisorChain;
-import org.springframework.ai.chat.client.advisor.api.StreamAroundAdvisor;
-import org.springframework.ai.chat.client.advisor.api.StreamAroundAdvisorChain;
-import org.springframework.ai.chat.model.MessageAggregator;
+import org.springframework.ai.chat.client.ChatClientMessageAggregator;
+import org.springframework.ai.chat.client.ChatClientRequest;
+import org.springframework.ai.chat.client.ChatClientResponse;
+import org.springframework.ai.chat.client.advisor.api.CallAdvisor;
+import org.springframework.ai.chat.client.advisor.api.CallAdvisorChain;
+import org.springframework.ai.chat.client.advisor.api.StreamAdvisor;
+import org.springframework.ai.chat.client.advisor.api.StreamAdvisorChain;
/**
* MyLoggerAdvisor
@@ -20,8 +21,9 @@ import org.springframework.ai.chat.model.MessageAggregator;
* @since 2025/5/24 9:12:54
*/
@Slf4j
-public class MyLoggerAdvisor implements CallAroundAdvisor, StreamAroundAdvisor {
+public class MyLoggerAdvisor implements CallAdvisor, StreamAdvisor {
+ @NotNull
@Override
public String getName() {
return this.getClass().getSimpleName();
@@ -32,35 +34,28 @@ public class MyLoggerAdvisor implements CallAroundAdvisor, StreamAroundAdvisor {
return 0;
}
- private AdvisedRequest before(AdvisedRequest request) {
- log.info("AI Request: {}", request.userText());
- return request;
- }
+ private ChatClientRequest before(ChatClientRequest request) {
+ log.info("AI Request: {}", request.prompt());
+ return request;
+ }
- private void observeAfter(AdvisedResponse advisedResponse) {
- log.info("AI Response: {}", advisedResponse.response().getResult().getOutput().getText());
- }
+ private void observeAfter(ChatClientResponse chatClientResponse) {
+ log.info("AI Response: {}", chatClientResponse.chatResponse().getResult().getOutput().getText());
+ }
+ @NotNull
@Override
- public AdvisedResponse aroundCall(AdvisedRequest advisedRequest, CallAroundAdvisorChain chain) {
-
- advisedRequest = before(advisedRequest);
-
- AdvisedResponse advisedResponse = chain.nextAroundCall(advisedRequest);
-
- observeAfter(advisedResponse);
-
- return advisedResponse;
- }
+ public ChatClientResponse adviseCall(@NotNull ChatClientRequest chatClientRequest, CallAdvisorChain chain) {
+ ChatClientResponse chatClientResponse = chain.nextCall(chatClientRequest);
+ observeAfter(chatClientResponse);
+ return chatClientResponse;
+ }
+ @NotNull
@Override
- public Flux aroundStream(AdvisedRequest advisedRequest, StreamAroundAdvisorChain chain) {
-
- advisedRequest = before(advisedRequest);
-
- Flux advisedResponses = chain.nextAroundStream(advisedRequest);
-
- return new MessageAggregator().aggregateAdvisedResponse(advisedResponses, this::observeAfter);
- }
+ public Flux adviseStream(@NotNull ChatClientRequest chatClientRequest, StreamAdvisorChain chain) {
+ Flux chatClientResponseFlux = chain.nextStream(chatClientRequest);
+ return (new ChatClientMessageAggregator()).aggregateChatClientResponse(chatClientResponseFlux, this::observeAfter);
+ }
}
diff --git a/src/main/java/com/huangge1199/aiagent/config/ToolRegistration.java b/src/main/java/com/huangge1199/aiagent/config/ToolRegistration.java
index cd2aaec..fbe912b 100644
--- a/src/main/java/com/huangge1199/aiagent/config/ToolRegistration.java
+++ b/src/main/java/com/huangge1199/aiagent/config/ToolRegistration.java
@@ -1,8 +1,8 @@
package com.huangge1199.aiagent.config;
import com.huangge1199.aiagent.tools.*;
+import org.springframework.ai.support.ToolCallbacks;
import org.springframework.ai.tool.ToolCallback;
-import org.springframework.ai.tool.ToolCallbacks;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/src/main/java/com/huangge1199/aiagent/rag/MyKeywordEnricher.java b/src/main/java/com/huangge1199/aiagent/rag/MyKeywordEnricher.java
index c2af543..4a91a53 100644
--- a/src/main/java/com/huangge1199/aiagent/rag/MyKeywordEnricher.java
+++ b/src/main/java/com/huangge1199/aiagent/rag/MyKeywordEnricher.java
@@ -3,7 +3,7 @@ package com.huangge1199.aiagent.rag;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.document.Document;
-import org.springframework.ai.transformer.KeywordMetadataEnricher;
+import org.springframework.ai.model.transformer.KeywordMetadataEnricher;
import org.springframework.stereotype.Component;
import java.util.List;
diff --git a/src/main/java/com/huangge1199/aiagent/rag/MyMultiQueryExpander.java b/src/main/java/com/huangge1199/aiagent/rag/MyMultiQueryExpander.java
index 26be770..a8112d8 100644
--- a/src/main/java/com/huangge1199/aiagent/rag/MyMultiQueryExpander.java
+++ b/src/main/java/com/huangge1199/aiagent/rag/MyMultiQueryExpander.java
@@ -6,7 +6,7 @@ import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.rag.Query;
import org.springframework.ai.rag.preretrieval.query.expansion.QueryExpander;
-import org.springframework.ai.util.PromptAssert;
+import org.springframework.ai.rag.util.PromptAssert;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;