springAI
关于最近看了很多SpringAi,阅读很多代码都感觉特别陌生
SpringAI依赖的springBoot版本都是3.3以上,
以及很多SpringAi都是依赖JDK版本最低17,
并且出现了很多新关键字例如 var,record 等写法,
烟花缭乱得lambda 表达式,
到处都是使用build 构建对象(创建型模式)
JDK版本下载:
OPENJDK
事例代码地址:
spring-ai-examples
public class ClientStdio {public static void main(String[] args) {// var 新特性只能声明局部变量,声明变量时候必须初始化,并且不能再方法做形式参数,不用注意对象类型。var stdioParams = ServerParameters.builder("java").args("-jar","model-context-protocol/weather/starter-stdio-server/target/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar").build();var transport = new StdioClientTransport(stdioParams);var client = McpClient.sync(transport).build();client.initialize();// List and demonstrate toolsListToolsResult toolsList = client.listTools();System.out.println("Available Tools = " + toolsList);CallToolResult weatherForcastResult = client.callTool(new CallToolRequest("getWeatherForecastByLocation",Map.of("latitude", "47.6062", "longitude", "-122.3321")));System.out.println("Weather Forcast: " + weatherForcastResult);CallToolResult alertResult = client.callTool(new CallToolRequest("getAlerts", Map.of("state", "NY")));System.out.println("Alert Response = " + alertResult);client.closeGracefully();}}
/** Copyright 2024-2024 the original author or authors.*/package io.modelcontextprotocol.client.transport;import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.modelcontextprotocol.util.Assert;/*** Server parameters for stdio client.** @author Christian Tzolov* @author Dariusz Jędrzejczyk*/
@JsonInclude(JsonInclude.Include.NON_ABSENT)
public class ServerParameters {// Environment variables to inherit by defaultprivate static final List<String> DEFAULT_INHERITED_ENV_VARS = System.getProperty("os.name").toLowerCase().contains("win")? Arrays.asList("APPDATA", "HOMEDRIVE", "HOMEPATH", "LOCALAPPDATA", "PATH", "PROCESSOR_ARCHITECTURE","SYSTEMDRIVE", "SYSTEMROOT", "TEMP", "USERNAME", "USERPROFILE"): Arrays.asList("HOME", "LOGNAME", "PATH", "SHELL", "TERM", "USER");@JsonProperty("command")private String command;@JsonProperty("args")private List<String> args = new ArrayList<>();@JsonProperty("env")private Map<String, String> env;//私有化构造器 不让你直接new 关键字实例化对象private ServerParameters(String command, List<String> args, Map<String, String> env) {Assert.notNull(command, "The command can not be null");Assert.notNull(args, "The args can not be null");this.command = command;this.args = args;this.env = new HashMap<>(getDefaultEnvironment());if (env != null && !env.isEmpty()) {this.env.putAll(env);}}public String getCommand() {return this.command;}public List<String> getArgs() {return this.args;}public Map<String, String> getEnv() {return this.env;}//var stdioParams = ServerParameters.builder("java")
// .args("-jar",
// "model-context-protocol/weather/starter-stdio-server/target/mcp-weather-stdio-server-0.0.1-SNAPSHOT.jar")
// .build();public static Builder builder(String command) {return new Builder(command);}
// builder构建器在这里,构建器里面接了入参public static class Builder {private String command;private List<String> args = new ArrayList<>();private Map<String, String> env = new HashMap<>();public Builder(String command) {Assert.notNull(command, "The command can not be null");this.command = command;}// 上面注解的 入参方法 ,返回builder对象public Builder args(String... args) {Assert.notNull(args, "The args can not be null");this.args = Arrays.asList(args);return this;}public Builder args(List<String> args) {Assert.notNull(args, "The args can not be null");this.args = new ArrayList<>(args);return this;}public Builder arg(String arg) {Assert.notNull(arg, "The arg can not be null");this.args.add(arg);return this;}public Builder env(Map<String, String> env) {if (env != null && !env.isEmpty()) {this.env.putAll(env);}return this;}public Builder addEnvVar(String key, String value) {Assert.notNull(key, "The key can not be null");Assert.notNull(value, "The value can not be null");this.env.put(key, value);return this;}//最后使用build 对象,实例化我们的ServerParameters public ServerParameters build() {//内部可以调用私有化构造器return new ServerParameters(command, args, env);}}/*** Returns a default environment object including only environment variables deemed 本地方法获取你系统的环境变量信息* safe to inherit.*/private static Map<String, String> getDefaultEnvironment() {return System.getenv().entrySet().stream().filter(entry -> DEFAULT_INHERITED_ENV_VARS.contains(entry.getKey())).filter(entry -> entry.getValue() != null).filter(entry -> !entry.getValue().startsWith("()")).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));}}
reocrd 关键字
参考学习:record详解
public record Love(Long id, String name) {public static void main(String[] args) {String name1 = new Love(1L, "张三").name();System.out.println(name1);}
}
相当于传统的
public class Love2 {Long id;String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Love2(Long id, String name) {this.id = id;this.name = name;}}
最后:先说这些