SpringAI:AI工程應用框架新選擇

Spring AI 是一個用于 AI 工程的應用框架

Spring AI 是一個用于 AI 工程的應用框架。其目標是將可移植性和模塊化設計等 Spring 生態系統設計原則應用于 AI 領域,并推廣使用 POJO 作為應用程序的構建塊到 AI 領域。

 Spring AI 的核心是解決 AI 集成的基本挑戰:將企業數據和 API 與 AI 模型連接起來。

特征

支持所有主要的 AI 模型提供商,例如 Anthropic、OpenAI、Microsoft、Amazon、Google 和 Ollama。支持的模型類型包括

基于Spring AI與Cassandra整合

以下是基于Spring AI與Cassandra整合的實用示例,涵蓋從基礎操作到高級應用場景,代碼均以Spring Boot為框架。

基礎CRUD操作

1. 實體類定義

@Table
public class Product {@PrimaryKeyprivate UUID id;private String name;private double price;// Lombok注解省略
}

2. 插入數據

@Repository
public interface ProductRepository extends CassandraRepository<Product, UUID> {@InsertProduct save(Product product);
}

3. 批量插入

List<Product> products = Arrays.asList(new Product(...));
productRepository.saveAll(products);

4. 按ID查詢

Optional<Product> product = productRepository.findById(uuid);

5. 更新數據

product.setPrice(29.99);
productRepository.save(product);


查詢與條件操作

6. 自定義查詢方法

@Query("SELECT * FROM products WHERE price > ?0 ALLOW FILTERING")
List<Product> findByPriceGreaterThan(double price);

7. 分頁查詢

Page<Product> page = productRepository.findAll(PageRequest.of(0, 10));

8. 排序查詢

Sort sort = Sort.by(Sort.Direction.DESC, "price");
List<Product> products = productRepository.findAll(sort);

9. IN條件查詢

@Query("SELECT * FROM products WHERE id IN ?0")
List<Product> findByIds(List<UUID> ids);

10. 使用CassandraTemplate

cassandraTemplate.select("SELECT * FROM products", Product.class);


高級數據建模

11. 使用UDT(用戶定義類型)

@UserDefinedType("address")
public class Address {private String city;private String street;
}

12. 集合類型字段

@Table
public class User {private Set<String> tags;private Map<String, String> attributes;
}

13. 時間序列數據建模

@PrimaryKeyClass
public class SensorReadingKey {@PrimaryKeyColumn(type = PrimaryKeyType.PARTITIONED)private String sensorId;@PrimaryKeyColumn(type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING)private Instant timestamp;
}


AI集成示例

14. 存儲AI模型輸出

@Table
public class ModelPrediction {@PrimaryKeyprivate UUID id;private String modelName;private Map<String, Double> probabilities;
}

15. 特征向量存儲

@Table
public class FeatureVector {@PrimaryKeyprivate String entityId;private List<Float> vector;  // 用于相似性搜索
}

16. 推薦結果緩存

@Table
public class UserRecommendation {@PrimaryKeyprivate String userId;private List<String> recommendedItems;
}


性能優化

17. 批量異步寫入

ListenableFuture<Void> future = cassandraTemplate.insertAsynchron(entities);

18. 輕量級事務

@Insert(ifNotExists = true)
boolean insertIfNotExists(Product product);

19. 物化視圖查詢

@Table
@MaterializedView("products_by_price")
public class ProductByPrice {@PrimaryKeyprivate double price;private UUID productId;
}


錯誤處理與監控

20. 重試策略配置

@Retryable(maxAttempts = 3, backoff = @Backoff(delay = 100))
public void saveWithRetry(Product product) {productRepository.save(product);
}

21. 指標監控

@Timed("cassandra.query.time")
public List<Product> findAllProducts() {return productRepository.findAll();
}


分布式場景

22. 多數據中心配置

spring:data:cassandra:keyspace-name: my_keyspacelocal-datacenter: DC1contact-points: host1,host2

23. 跨分區查詢

@Query("SELECT * FROM products WHERE token(id) > token(?0) LIMIT 100")
List<Product> findAfterToken(UUID lastId);


測試與調試

24. 單元測試配置

@TestConfiguration
@EmbeddedCassandra
static class TestConfig {@BeanCassandraTemplate testTemplate() {return new CassandraTemplate(session);}
}

25. 查詢日志打印

logging:level:org.springframework.data.cassandra.core.CassandraTemplate: DEBUG

以上示例覆蓋了Spring Data Cassandra的核心功能,結合AI場景的特性存儲需求,可根據實際業務擴展修改。注意生產環境中需優化分區鍵設計、添加適當的索引策略。

基于Spring和Azure Vector Search的實例

以下是一些基于Spring和Azure Vector Search的實例示例,涵蓋不同場景和使用方法:

基礎配置與初始化

application.propertiesapplication.yml中配置Azure Vector Search的連接信息:

azure.search.endpoint=https://{your-service-name}.search.windows.net
azure.search.api-key={your-api-key}
azure.search.index-name={your-index-name}

在Spring Boot中注入SearchClient

@Bean
public SearchClient searchClient(@Value("${azure.search.endpoint}") String endpoint,@Value("${azure.search.api-key}") String apiKey,@Value("${azure.search.index-name}") String indexName) {return new SearchClientBuilder().endpoint(endpoint).credential(new AzureKeyCredential(apiKey)).indexName(indexName).buildClient();
}


向量搜索基礎示例

使用預生成的向量進行相似性搜索:

public List<SearchResult> searchByVector(float[] vector, int k) {SearchOptions options = new SearchOptions().setVector(new SearchQueryVector().setValue(vector).setKNearestNeighborsCount(k));return searchClient.search(null, options, Context.NONE).stream().collect(Collectors.toList());
}


文本嵌入與搜索

結合Azure OpenAI生成文本嵌入后搜索:

public List<SearchResult> searchByText(String query, int k) {float[] embedding = openAIClient.generateEmbedding(query); // 假設已配置OpenAI客戶端return searchByVector(embedding, k);
}


混合搜索(向量+關鍵詞)

同時使用向量和關鍵詞進行搜索:

public List<SearchResult> hybridSearch(String query, float[] vector, int k) {SearchOptions options = new SearchOptions().setVector(new SearchQueryVector().setValue(vector).setKNearestNeighborsCount(k)).setSearchText(query);return searchClient.search(null, options, Context.NONE).stream().collect(

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91963.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91963.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91963.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kettle 開源ETL數據遷移工具從入門到實戰

ETL&#xff08;Extract, Transform, Load&#xff09;工具是用于數據抽取、轉換和加載的軟件工具&#xff0c;用于支持數據倉庫和數據集成過程。Kettle作為傳統的ETL工具是純 java 開發的開源的 ETL工具&#xff0c;用于數據庫間的數據遷移 。可以在 Linux、windows、unix 中運…

Maven中的bom和父依賴

maven最全避坑指南寫完后&#xff0c;發現自己對于bom和父pom的理解還是不夠深入&#xff0c;特此轉載DeepSeek的回答&#xff0c;和大家一起學習了。 在 Maven 的依賴管理中&#xff0c;父 POM (Parent POM) 和 BOM (Bill of Materials) 都是用于實現集中化管理和控制的核心機…

Python 操作 Word 文檔:主流庫對比與選擇指南

在辦公自動化、報告生成、數據處理等領域&#xff0c;利用 Python 程序化地創建、讀取或修改 Microsoft Word 文檔 (.docx 格式) 是一項非常實用的技能。Python 生態中有多個優秀的庫可以完成這項任務&#xff0c;但它們各有側重和優缺點。選擇哪一個“最好用”&#xff0c;關鍵…

怎么修改論文格式呢?提供一份論文格式模板

注!!!本文內容是作者自己整理的一份模板,僅供參考,各位如何修改,還需要看學校的要求。 一、參考文獻 1、有一定數量的近幾年參考文獻、不宜過多中文文獻 英文期刊模板 [1] Taesoo K, Sooyoung K, Kyunghan L, et al. Special issue on 6G and satellite communication…

MVC 發布

MVC 發布 引言 MVC(Model-View-Controller)模式是一種廣泛應用于軟件開發的架構模式。它將應用程序分為三個主要部分:模型(Model)、視圖(View)和控制器(Controller)。這種模式不僅提高了代碼的可維護性和可擴展性,而且使得開發者可以更加專注于各個組件的開發。本文…

arkui 動畫曲線

參考文檔 https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-curve#curvesinterpolatingspring10 可視化工具網站 https://easingwizard.com/ https://www.desmos.com/calculator/k01p40v0ct?langzh-CN 基本介紹 import { curves } from kit.A…

大語言模型(LLM)技術架構與工程實踐:從原理到部署

在自然語言處理領域,大語言模型(LLM)已成為顛覆性技術。從 GPT 系列到 LLaMA、ChatGLM,這些參數規模動輒百億甚至萬億的模型,不僅實現了流暢的自然語言交互,更在代碼生成、邏輯推理等復雜任務中展現出驚人能力。本文將從技術底層拆解 LLM 的核心架構,分析訓練與推理的關…

python后端之DRF框架(上篇)

一、DRF框架介紹 1、web應用開發模式 1.1、前后端不分離1.2、前后端分離2、RESTful介紹 RESTful是目前最流行的API設計風格 &#xff0c; REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。 1、每一個URI代表1種資源&#xff1b; 2、客…

信創數據庫-DM(達夢)數據庫安裝教程

官方安裝文檔在這&#xff1a;安裝前準備 | 達夢技術文檔 本文也是基于這個來寫的&#xff0c;微調了一下。 1&#xff0c;下載安裝包 體驗版直接到官方下載即可&#xff1a;產品下載 | 達夢在線服務平臺 如果是有需要商業版等&#xff0c;需要聯系客服申請。 安裝包要選擇CPU…

docker常用命令集(6)

接前一篇文章&#xff1a;docker常用命令集&#xff08;5&#xff09; 本文內容參考&#xff1a; Docker login/logout 命令 | 菜鳥教程 Docker命令_docker login-CSDN博客 特此致謝&#xff01; 9. docker login 簡介 docker login命令用于登錄到docker注冊表&#xff08…

[LINUX操作系統]shell腳本之循環

1.編寫腳本for1.sh,使用for循環創建20賬戶&#xff0c;賬戶名前綴由用戶從鍵盤輸入&#xff0c;賬戶初始密碼由用戶輸入&#xff0c;例如:test1、test2、test3......[rootmaster ~]# vim for1.sh #!/bin/bashread -p "請輸入賬戶名稱前綴&#xff1a;" prefixread -p…

空間設計:不是餐廳的裝飾游戲

餐廳空間設計&#xff0c;是通過布局規劃與環境營造&#xff0c;將功能需求、品牌調性與顧客體驗融合的系統性工程 —— 它不僅決定顧客「坐得舒不舒服」&#xff0c;更影響「愿不愿意再來」「會不會主動分享」的消費決策。體驗感知的第一觸點&#xff1a;顧客進門 3 秒內&…

XSS-DOM 2

目錄 1 DOMPurify 1.1 漏洞源碼 1.2 加載框架 ?編輯 setTimeout 1.3 ok&#xff1f; 1.4 window和document 1.5 Overwrite&#xff08;document.x&#xff09; 1.5.1 打印cookie 1.6 Overwrite2&#xff08;document.x.y&#xff09; 1.6.1 form表單 1.7 toString…

從數據丟失到動畫流暢:React狀態同步與遠程數據加載全解析

在前端開發中&#xff0c;數據狀態管理與界面同步始終是核心挑戰。近期我在處理一個書簽管理應用時&#xff0c;遇到了遠程數據加載后無法顯示、界面更新異常&#xff0c;甚至動畫閃爍等一系列問題。經過多輪調試與優化&#xff0c;最終實現了數據的正確加載與流暢的界面交互。…

MySQL半同步復制機制詳解:AFTER_SYNC vs AFTER_COMMIT 的優劣與選擇

目錄深入分析與利弊對比1. AFTER_COMMIT (不推薦)2. AFTER_SYNC (強烈推薦&#xff0c;MySQL 8.0 默認)總結與強烈建議最佳實踐 MySQL 半同步復制主要有兩種實現方式&#xff0c;其核心區別在于主庫何時回復客戶端事務提交成功&#xff08;即何時認為事務完成&#xff09;&…

GEE實戰 | 4種非監督分類算法深度解析,附可直接運行的完整代碼

在遙感影像處理領域&#xff0c;非監督分類憑借其無需人工標注樣本的優勢&#xff0c;成為快速了解地物分布的得力助手。它能自動依據像素光譜特征的相似性完成聚類&#xff0c;這種“無師自通”的特性&#xff0c;讓地理空間分析變得更加高效。 今天&#xff0c;我們就來深入…

基于落霞歸雁思維框架的軟件需求管理實踐指南

作者&#xff1a;落霞歸雁 日期&#xff1a;2025-08-02 摘要 在 VUCA 時代&#xff0c;需求變更成本已占軟件總成本的 40% 以上。本文將“落霞歸雁”思維框架&#xff08;觀察現象 → 找規律 → 應用規律 → 實踐驗證&#xff09;引入需求工程全生命周期&#xff0c;通過 4 個階…

企業級AI Agent構建實踐:從理論到落地的完整指南

&#x1f680; 引言 隨著人工智能技術的快速發展&#xff0c;AI應用正在從簡單的工具轉變為智能伙伴。企業級AI Agent作為這一變革的核心載體&#xff0c;正在重新定義我們與軟件系統的交互方式。本文將深入探討如何構建一個真正意義上的企業級AI Agent系統。 &#x1f3af; …

電商項目_性能優化_限流-降級-熔斷

針對電商系統&#xff0c;在遇到大流量時&#xff0c;必須要考慮如何保障系統的穩定運行&#xff0c;常用的手段&#xff1a;限流&#xff0c;降級&#xff0c;拒絕服務。 一、限流 限流算法&#xff1a;計數器、滑動窗口、漏銅算法、令牌桶算法。 限流的方案 前端限流接入…

javaweb開發之Servlet筆記

第五章 Servlet 一 Servlet簡介 1.1 動態資源和靜態資源 靜態資源 無需在程序運行時通過代碼運行生成的資源,在程序運行之前就寫好的資源. 例如:html css js img ,音頻文件和視頻文件 動態資源 需要在程序運行時通過代碼運行生成的資源,在程序運行之前無法確定的數據,運行時…