Explorar el Código

fix webSearch component & docker-compose

tycoding hace 1 año
padre
commit
a977a09f4a

+ 1 - 1
docs/pgvector/docker-compose.yml

@@ -12,4 +12,4 @@ services:
       - POSTGRES_PASSWORD=root
     volumes:
       - ./pgdata:/var/lib/postgresql/data
-    #  - ./init.sql:/docker-entrypoint-initdb.d/init.sql
+      - ./init.sql:/docker-entrypoint-initdb.d/init.sql

+ 1 - 0
docs/pgvector/init.sql

@@ -0,0 +1 @@
+CREATE DATABASE langchat;

+ 1 - 1
langchat-common/src/main/java/cn/tycoding/langchat/common/component/SpringContextHolder.java

@@ -25,7 +25,7 @@ public class SpringContextHolder implements ApplicationContextAware {
         applicationContext.publishEvent(event);
     }
 
-    public static <T> T getBean(Class<T> requiredType) {
+    public <T> T getBean(Class<T> requiredType) {
         return applicationContext.getBean(requiredType);
     }
 

+ 1 - 1
langchat-core/src/main/java/cn/tycoding/langchat/core/component/WebSearchComponent.java

@@ -21,7 +21,7 @@ public class WebSearchComponent {
     private final WebSearchProps props;
 
     @Bean
-    @ConditionalOnProperty(GOOGLE_CON)
+    @ConditionalOnProperty(value = GOOGLE_CON)
     public GoogleCustomWebSearchEngine googleCustomWebSearchEngine() {
         GoogleProps google = props.getGoogle();
         return GoogleCustomWebSearchEngine

+ 28 - 0
langchat-core/src/main/java/cn/tycoding/langchat/core/provider/SearchProvider.java

@@ -0,0 +1,28 @@
+package cn.tycoding.langchat.core.provider;
+
+import cn.tycoding.langchat.common.component.SpringContextHolder;
+import dev.langchain4j.web.search.google.customsearch.GoogleCustomWebSearchEngine;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author tycoding
+ * @since 2024/7/16
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class SearchProvider {
+
+    private final SpringContextHolder springContextHolder;
+
+    public GoogleCustomWebSearchEngine get() {
+        try {
+            return springContextHolder.getBean(GoogleCustomWebSearchEngine.class);
+        } catch (Exception e) {
+            log.error("GoogleWebSearch is not configured");
+            return null;
+        }
+    }
+}

+ 9 - 6
langchat-core/src/main/java/cn/tycoding/langchat/core/service/impl/LangChatServiceImpl.java

@@ -3,6 +3,7 @@ package cn.tycoding.langchat.core.service.impl;
 import cn.tycoding.langchat.common.dto.ChatReq;
 import cn.tycoding.langchat.common.dto.ImageR;
 import cn.tycoding.langchat.core.provider.ModelProvider;
+import cn.tycoding.langchat.core.provider.SearchProvider;
 import cn.tycoding.langchat.core.service.Assistant;
 import cn.tycoding.langchat.core.service.LangChatService;
 import dev.langchain4j.data.image.Image;
@@ -19,7 +20,6 @@ import dev.langchain4j.rag.query.router.DefaultQueryRouter;
 import dev.langchain4j.rag.query.router.QueryRouter;
 import dev.langchain4j.service.AiServices;
 import dev.langchain4j.service.TokenStream;
-import dev.langchain4j.web.search.google.customsearch.GoogleCustomWebSearchEngine;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -34,7 +34,7 @@ import org.springframework.stereotype.Service;
 public class LangChatServiceImpl implements LangChatService {
 
     private final ModelProvider provider;
-    private final GoogleCustomWebSearchEngine googleCustomWebSearchEngine;
+    private final SearchProvider searchProvider;
 
     @Override
     public TokenStream chat(ChatReq req) {
@@ -42,10 +42,13 @@ public class LangChatServiceImpl implements LangChatService {
 
         Assistant assistant;
         if (req.getIsGoogleSearch()) {
-            ContentRetriever webSearchContentRetriever = WebSearchContentRetriever.builder()
-                    .webSearchEngine(googleCustomWebSearchEngine)
-                    .maxResults(3)
-                    .build();
+            ContentRetriever webSearchContentRetriever;
+            if (searchProvider.get() == null) {
+                webSearchContentRetriever = WebSearchContentRetriever.builder().maxResults(3).build();
+            } else {
+                webSearchContentRetriever = WebSearchContentRetriever.builder().maxResults(3).webSearchEngine(searchProvider.get()).build();
+            }
+
             QueryRouter queryRouter = new DefaultQueryRouter(webSearchContentRetriever);
             RetrievalAugmentor retrievalAugmentor = DefaultRetrievalAugmentor.builder()
                     .queryRouter(queryRouter)