diff --git a/pom.xml b/pom.xml index 3dc8b7f..d8dc16c 100644 --- a/pom.xml +++ b/pom.xml @@ -64,7 +64,13 @@ org.jsoup jsoup 1.20.1 + + + dev.langchain4j + langchain4j-mcp + 1.1.0-beta7 + diff --git a/src/main/java/com/huangge1199/ai/config/LangChainConfig.java b/src/main/java/com/huangge1199/ai/config/LangChainConfig.java index 659a794..32be567 100644 --- a/src/main/java/com/huangge1199/ai/config/LangChainConfig.java +++ b/src/main/java/com/huangge1199/ai/config/LangChainConfig.java @@ -2,6 +2,7 @@ package com.huangge1199.ai.config; import com.huangge1199.ai.service.LangChainService; import com.huangge1199.ai.tool.InterviewQuestionTool; +import dev.langchain4j.mcp.McpToolProvider; import dev.langchain4j.memory.ChatMemory; import dev.langchain4j.memory.chat.MessageWindowChatMemory; import dev.langchain4j.model.chat.ChatModel; @@ -26,6 +27,9 @@ public class LangChainConfig { @Resource private ContentRetriever contentRetriever; + @Resource + private McpToolProvider mcpToolProvider; + @Bean public LangChainService langChainService() { ChatMemory chatMemory = MessageWindowChatMemory.withMaxMessages(10); @@ -35,6 +39,7 @@ public class LangChainConfig { .chatMemoryProvider(memoryId->MessageWindowChatMemory.withMaxMessages(10)) .contentRetriever(contentRetriever) .tools(new InterviewQuestionTool()) + .toolProvider(mcpToolProvider) .build(); } } diff --git a/src/main/java/com/huangge1199/ai/config/McpConfig.java b/src/main/java/com/huangge1199/ai/config/McpConfig.java new file mode 100644 index 0000000..c4d044a --- /dev/null +++ b/src/main/java/com/huangge1199/ai/config/McpConfig.java @@ -0,0 +1,44 @@ +package com.huangge1199.ai.config; + +import dev.langchain4j.mcp.McpToolProvider; +import dev.langchain4j.mcp.client.DefaultMcpClient; +import dev.langchain4j.mcp.client.McpClient; +import dev.langchain4j.mcp.client.transport.McpTransport; +import dev.langchain4j.mcp.client.transport.http.HttpMcpTransport; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * McpConfig + * + * @author huangge1199 + * @since 2025/7/14 10:13:43 + */ +@Configuration +public class McpConfig { + + @Value("${bigmodel.api-key}") + private String apiKey; + + @Bean + public McpToolProvider mcpToolProvider() { + // 和 MCP 服务通讯 + McpTransport transport = new HttpMcpTransport.Builder() + .sseUrl("https://open.bigmodel.cn/api/mcp/web_search/sse?Authorization=" + apiKey) + .logRequests(true) + .logResponses(true) + .build(); + + // 创建 MCP 客户端 + McpClient mcpClient = new DefaultMcpClient.Builder() + .key("test") + .transport(transport) + .build(); + // 从 MCP 客户端获取工具 + return McpToolProvider.builder() + .mcpClients(mcpClient) + .build(); + } +} + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 19bb20d..b403f4c 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,6 +4,8 @@ spring: name: ai-langChain4j profiles: active: local +server: + port: 8888 langchain4j: community: dashscope: @@ -13,5 +15,5 @@ langchain4j: embedding-model: model-name: text-embedding-v4 api-key: -server: - port: 8888 \ No newline at end of file +bigmodel: + api-key: