SPRING-AI 官方事例

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;}}

最后:先说这些

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio Code 使用tab键往左和往右缩进内容

使用VSCode写东西&#xff0c;经常遇到多行内容同时缩进的情况&#xff0c;今天写文档的时候就碰到&#xff0c;记录下来&#xff1a; 往右缩进 选中多行内容&#xff0c;点tab键&#xff0c;会整体往右缩进&#xff1a; 往左缩进 选中多行内容&#xff0c;按shifttab&am…

机器学习(7)——K均值聚类

文章目录 1. K均值&#xff08;K-means&#xff09;聚类是什么算法&#xff1f;2. 核心思想2. 数学目标3. 算法步骤3.1. 选择K个初始质心&#xff1a;3.2.迭代优化3.3. 重复步骤2和步骤3&#xff1a; 4. 关键参数5. 优缺点6. 改进变种7. K值选择方法8. Python示例9. 应用场景10…

爬虫案例-爬取某企数据

文章目录 1、准备要爬取企业名称数据表2、爬取代码3、查看效果 1、准备要爬取企业名称数据表 企业名称绍兴市袍江王新国家庭农场绍兴市郑杜粮油专业合作社绍兴市越城区兴华家庭农场绍兴市越城区锐意家庭农场绍兴市越城区青甸畈家庭农场绍兴市袍江王新国家庭农场绍兴市袍江月明…

足球 AI 智能体技术解析:从数据采集到比赛预测的全链路架构

一、引言 在足球运动数字化转型的浪潮中&#xff0c;AI 智能体正成为理解比赛、预测赛果的核心技术引擎。本文从工程实现角度&#xff0c;深度解析足球 AI 的技术架构&#xff0c;涵盖数据采集、特征工程、模型构建、实时计算到决策支持的全链路技术方案&#xff0c;揭示其背后…

怎么配置一个kubectl客户端访问多个k8s集群

怎么配置一个kubectl客户端访问多个k8s集群 为什么有的客户端用token也访问不了k8s集群&#xff0c;因为有的是把~/.kube/config文件&#xff0c;改为了~/.kube/.config文件&#xff0c;文件设置成隐藏文件了。 按照kubectl的寻找配置的逻辑&#xff0c;kubectl找不到要访问集群…

[QMT量化交易小白入门]-四十六、年化收益率118%的回测参数,如何用贪心算法挑选50个两两相关性最小的ETF组合

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读准备工作安装所需库导入所需模块下载所有ETF数…

几何编码:启用矢量模式地理空间机器学习

在 ML 模型中使用点、线和多边形&#xff0c;将它们编码为捕捉其空间属性的向量。 自地理信息系统 (GIS) 诞生之初&#xff0c;“栅格模式”和“矢量模式”之间就存在着显著的区别。在栅格模式下&#xff0c;数据以值的形式呈现在规则的网格上。这包括任何形式的图像&#xff0…

Leetcode98、230:二叉搜索树——递归学习

什么是二叉搜索树&#xff1a;右子树节点 > 根节点 > 左子树节点&#xff0c; 二叉搜索树中的搜索&#xff0c;返回给定值val所在的树节点 终止条件为传进来的节点为空、或者节点的值 val值&#xff0c;返回这个节点&#xff1b; 单程递归逻辑&#xff1a;定义一个resu…

每天学一个 Linux 命令(30):cut

​​可访问网站查看,视觉品味拉满: http://www.616vip.cn/30/index.html cut 命令用于从文件或输入流中提取文本的特定部分(如列、字符或字节位置)。它常用于处理结构化数据(如 CSV、TSV)或按固定格式分割的文本。以下是详细说明和示例: 命令格式 cut [选项] [文件...]…

Tauri 2.3.1+Leptos 0.7.8开发桌面应用--Sqlite数据库选中数据的表格输出

在前期工作的基础上&#xff08;Tauri 2.3.1Leptos 0.7.8开发桌面应用--Sqlite数据库的写入、展示和选择删除_tauri leptos sqlite 选择删除-CSDN博客&#xff09;&#xff0c;实现将选中的数据实时用表格展示出来&#xff0c;效果如下&#xff1a; 1. 后台invoke调用命令 Tau…

使用Tauri 2.3.1+Leptos 0.7.8开发桌面小程序汇总

近期断断续续学习了Rust编程&#xff0c;使用Tauri 2.3.1Leptos 0.7.8开发了一个自用的桌面小程序。Win10操作系统&#xff0c;使用VS Code及rust analyzer插件搭建的开发环境&#xff0c;后期开始使用Roo Code绑定DeepSeek API 辅助编程&#xff0c;对我这个初学者编程帮助很大…

考研英一学习笔记

2024 年全国硕士研究生招生考试 英语&#xff08;一&#xff09;试题 &#xff08;科目代码&#xff1a;201&#xff09; Section Ⅰ Use of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANS…

【技术笔记】Cadence实现Orcad与Allegro软件交互式布局设置

【技术笔记】Cadence实现Orcad与Allegro软件交互式布局设置 更多内容见专栏&#xff1a;【硬件设计遇到了不少问题】、【Cadence从原理图到PCB设计】 在做硬件pcb设计的时候&#xff0c;原理图选中一个元器件&#xff0c;希望可以再PCB中可以直接选中。 为了达到原理图和PCB两两…

卷积神经网络(CNN)详解

文章目录 引言1.卷积神经网络&#xff08;CNN&#xff09;的诞生背景2.卷积神经网络&#xff08;CNN&#xff09;介绍2.1 什么是卷积神经网络&#xff1f;2.2 卷积神经网络&#xff08;CNN&#xff09;的基本特征2.2.1 局部感知&#xff08;Local Connectivity&#xff09;2.2.…

8051单片机所有Keil C51汇编伪指令和C语言关键字大全

8051单片机所有Keil C51汇编伪指令和C语言关键字大全 作者将狼才鲸创建日期2025-04-21 CSDN阅读地址&#xff1a;8051单片机所有Keil汇编伪指令和C语言关键字的详细解释 8051单片机所有Keil汇编伪指令和C语言关键字的详细解释&#xff0c;在Keil已安装文件夹D:\Keil_v5\C51\H…

机器视觉的智能手机屏贴合应用

在智能手机制造领域&#xff0c;屏幕贴合工艺堪称"微米级的指尖芭蕾"。作为影响触控灵敏度、显示效果和产品可靠性的关键工序&#xff0c;屏幕贴合精度直接决定了用户体验。传统人工对位方式已无法满足全面屏时代对极窄边框和超高屏占比的严苛要求&#xff0c;而Mast…

运维打铁:网络基础知识

文章目录 一、网络架构1. 网络架构图2. 各层级功能3. 机房网络常见问题及解决方案 二、交换技术1. 交换技术基础2. 交换技术分类3. 广播域相关概念4. ARP 协议5. 三层交换机6. VLAN&#xff08;虚拟局域网&#xff09; 三、路由技术1. 路由器端口类型及功能2. 路由器功能3. 路由…

使用C#和FFmpeg开发RTSP视频播放器的完整指南

RTSP(Real Time Streaming Protocol)是流媒体技术中广泛使用的协议&#xff0c;广泛应用于视频监控、视频会议和在线直播等领域。本文将详细介绍如何使用C#和FFmpeg开发一个功能完整的RTSP视频播放器&#xff0c;涵盖从环境搭建到核心功能实现的全部过程。 一、开发环境准备 …

前端基础之《Vue(9)—混入》

一、什么是混入 1、是一种代码复用的技巧 Vue组件是由若干选项组成的&#xff0c;向组件中混入可复用的选项。 2、作用 比如我封装两个组件&#xff0c;一个是A组件&#xff0c;一个是B组件&#xff0c;发现它里面有相同的选项&#xff0c;就可以用混用的方式来复用它。 二、…