-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathEnterpriseSolutionClientApplication.java
More file actions
98 lines (79 loc) · 3.84 KB
/
EnterpriseSolutionClientApplication.java
File metadata and controls
98 lines (79 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package io.xiaozhug.demo.enterprise;
import io.xiaozhug.ai.mcp.client.tool.autoconfigure.discovery.transport.creator.RequestHeaderContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.Set;
@Slf4j
@SpringBootApplication
public class EnterpriseSolutionClientApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(EnterpriseSolutionClientApplication.class, args);
System.out.println("=== AI助手控制台 ===");
System.out.println("输入 'exit' 或 'quit' 退出程序");
System.out.println("输入 'help' 查看命令帮助");
System.out.println("====================");
DiscoveryClient discoveryClient = applicationContext.getBean(DiscoveryClient.class);
discoveryClient.getServices().forEach(serviceId -> {
discoveryClient.getInstances(serviceId).forEach(instance -> {
Map<String, String> metadata = instance.getMetadata();
Set<String> key = metadata.keySet();
log.info("发现服务 - 服务ID: {}, 地址: {}, 端口: {}, 元数据: {}", serviceId, instance.getHost(), instance.getPort(), key);
});
});
ChatClient chatClient = applicationContext.getBean(ChatClient.class);
// 控制台交互
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
String input;
while (true) {
System.out.print("\n请输入指令: ");
input = reader.readLine();
if (input == null || input.trim().isEmpty()) {
continue;
}
input = input.trim();
// 退出命令
if (input.equalsIgnoreCase("exit") || input.equalsIgnoreCase("quit")) {
System.out.println("程序已退出");
break;
}
// 处理用户输入
processCommand(input, chatClient);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void processCommand(String command, ChatClient chatClient) {
try {
System.out.println("正在处理指令...");
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add("Authorization", "token-xxxxxx");
RequestHeaderContextHolder.setHeaders(headers);
String content = chatClient.prompt(command).call().content();
System.out.println("\n=== AI响应 ===");
System.out.println(content);
System.out.println("==============");
} catch (Exception e) {
e.printStackTrace();
}
}
@Bean
public ChatClient syncMcpToolCallbackProvider(ChatClient.Builder chatClientBuilder, ObjectProvider<ToolCallbackProvider> httpToolCallbackProviderProvider) {
ToolCallbackProvider[] toolCallbackProviders = httpToolCallbackProviderProvider.stream().toList().toArray(new ToolCallbackProvider[0]);
chatClientBuilder.defaultToolCallbacks(toolCallbackProviders);
return chatClientBuilder.build();
}
}