diff --git a/pom.xml b/pom.xml index 54a8c7d..336e5ef 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ 17 - 1.1.0 + 1.2.0 @@ -32,6 +32,7 @@ default + @@ -102,6 +103,12 @@ 1.0.0-beta2 + + dev.langchain4j + langchain4j-mcp + 1.2.0-beta8 + + com.hankcs @@ -120,6 +127,7 @@ slf4j-api 1.7.32 + diff --git a/src/main/java/xyz/wbsite/ai/Helper.java b/src/main/java/xyz/wbsite/ai/Helper.java index 851fda6..b0e576a 100644 --- a/src/main/java/xyz/wbsite/ai/Helper.java +++ b/src/main/java/xyz/wbsite/ai/Helper.java @@ -75,8 +75,8 @@ public class Helper { .apiKey("1") .modelName("qwen2.5:0.5b") .maxTokens(4096) - .timeout(Duration.ofMinutes(50)) - .responseFormat("json") + .timeout(Duration.ofSeconds(5)) + //.responseFormat("json") .logRequests(true) .logResponses(true) .build(); @@ -89,13 +89,13 @@ public class Helper { .build(); private static OpenAiChatModel toolChatModel = OpenAiChatModel.builder() - .baseUrl("http://192.168.88.106:11434/v1") + .baseUrl("http://192.168.88.105:11434/v1") .apiKey("1") .modelName("qwen2.5:0.5b") .build(); private static OpenAiChatModel gemmaModel = OpenAiChatModel.builder() - .baseUrl("http://192.168.88.106:11434/v1") + .baseUrl("http://192.168.88.105:11434/v1") .apiKey("1") .modelName("gemma3:4b") .build(); diff --git a/src/main/java/xyz/wbsite/ai/Json_Example.java b/src/main/java/xyz/wbsite/ai/Json_Example.java index c6f60d1..23a1749 100644 --- a/src/main/java/xyz/wbsite/ai/Json_Example.java +++ b/src/main/java/xyz/wbsite/ai/Json_Example.java @@ -35,6 +35,8 @@ public class Json_Example { ).build() ).build(); + System.out.println(build1.toString()); + ChatRequest build = ChatRequest.builder() .messages(UserMessage.from("返回中国古代任意三个朝代")) .responseFormat(build1) diff --git a/src/main/java/xyz/wbsite/ai/Mcp_Example.java b/src/main/java/xyz/wbsite/ai/Mcp_Example.java new file mode 100644 index 0000000..b5b4b70 --- /dev/null +++ b/src/main/java/xyz/wbsite/ai/Mcp_Example.java @@ -0,0 +1,77 @@ +package xyz.wbsite.ai; + +import dev.langchain4j.agent.tool.ToolSpecification; +import dev.langchain4j.mcp.McpToolProvider; +import dev.langchain4j.mcp.client.DefaultMcpClient; +import dev.langchain4j.mcp.client.McpClient; +import dev.langchain4j.mcp.client.McpPrompt; +import dev.langchain4j.mcp.client.McpResource; +import dev.langchain4j.mcp.client.McpResourceTemplate; +import dev.langchain4j.mcp.client.transport.McpTransport; +import dev.langchain4j.mcp.client.transport.http.HttpMcpTransport; +import dev.langchain4j.model.chat.ChatModel; +import dev.langchain4j.model.openai.OpenAiChatModel; +import dev.langchain4j.service.AiServices; +import dev.langchain4j.service.SystemMessage; +import dev.langchain4j.service.tool.ToolProvider; + +import java.time.Duration; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +/** + * Mcp_Example 示例 + */ +public class Mcp_Example { + + public static void main(String[] args) throws Exception { + OpenAiChatModel chatModel = Helper.getChatModel(); + + + // 1. 异步初始化 MCP 客户端 + HttpMcpTransport mcpTransport = new HttpMcpTransport.Builder() + .sseUrl("http://192.168.9.100:8080/sse") +// .sseUrl("http://192.168.9.100:8080/mcp/sse") + .logRequests(true) + .logResponses(true) + .timeout(Duration.ZERO) + .build(); + + McpClient mcpClient = new DefaultMcpClient.Builder() + .transport(mcpTransport) + .clientVersion("v1") + .protocolVersion("2024-11-05") + .toolExecutionTimeout(Duration.ZERO) + .build(); + +// List mcpPrompts = mcpClient.listPrompts(); +// List mcpResources = mcpClient.listResources(); +// List toolSpecifications = mcpClient.listTools(); +// List mcpResourceTemplates = mcpClient.listResourceTemplates(); + + McpToolProvider mcpToolProvider = new McpToolProvider.Builder() + .mcpClients(List.of(mcpClient)) + .build(); + + Assistant assistant = AiServices.builder(Assistant.class) + .chatModel(chatModel) + .toolProvider(mcpToolProvider) + .build(); + + String chat = assistant.chat("今天,泰州的天气怎么样"); + + System.out.println(chat); + } + + /** + * 助手 + */ + interface Assistant { + + @SystemMessage("请参考提供资料,不要发散,没有请直接回答没有") + String chat(String userMessage); + } +} \ No newline at end of file