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.pswp.cn/pingmian/78096.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78096.shtml
英文地址,請注明出處:http://en.pswp.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;就可以用混用的方式來復用它。 二、…