SpringAi筆記

簡介 :: Spring AI 中文文檔

Spring AI 解決了 AI 集成的根本難題:將企業數據和 API 與 AI 模型連接起來。

聊天客戶端 API (ChatClient )

發起對模型的調用和響應

  1. 創建:其中可以通過bean來注入創建好的chatClient
    可以使用@Qualifier注解,使用多模型,創建多chatClient
  2. ChatClient 響應
    1. 多種格式,包括flux
  1. 提示模板
    TemplateRenderer 作為模板引擎
  2. call返回值: 返回相應對象或字符串
  3. stream返回值:多種flux對象
  4. advisor
    1. Advisor API 為 Spring 應用中的 AI 驅動交互提供靈活強大的攔截、修改和增強能力。
interface AdvisorSpec {AdvisorSpec param(String k, Object v);AdvisorSpec params(Map<String, Object> p);AdvisorSpec advisors(Advisor... advisors);AdvisorSpec advisors(List<Advisor> advisors);
}
ChatClient.builder(chatModel).build().prompt().advisors(MessageChatMemoryAdvisor.builder(chatMemory).build(),QuestionAnswerAdvisor.builder(vectorStore).build()).user(userText).call().content();
  1. 聊天記憶:
    ChatMemory 接口定義了聊天對話存儲機制,當前內置實現MessageWindowChatMemory, 包括jdbc在內的多種存儲方案

Advisor API

執行流程
?

  1. 實現示例,定義一個LoggerAdvisor
public class SimpleLoggerAdvisor implements CallAroundAdvisor, StreamAroundAdvisor {@Overridepublic AdvisedResponse aroundCall(AdvisedRequest advisedRequest, CallAroundAdvisorChain chain) {logger.debug("BEFORE: {}", advisedRequest);AdvisedResponse advisedResponse = chain.nextAroundCall(advisedRequest);logger.debug("AFTER: {}", advisedResponse);return advisedResponse;}@Overridepublic Flux<AdvisedResponse> aroundStream(AdvisedRequest advisedRequest, StreamAroundAdvisorChain chain) {logger.debug("BEFORE: {}", advisedRequest);Flux<AdvisedResponse> advisedResponses = chain.nextAroundStream(advisedRequest);return new MessageAggregator().aggregateAdvisedResponse(advisedResponses,advisedResponse -> logger.debug("AFTER: {}", advisedResponse)); }
}

Prompt

  1. 主要角色
System 角色:指導 AI 的行為和響應風格,設定 AI 解釋和回復輸入的參數或規則,類似于在開始對話前向 AI 提供指令。
User 角色:代表用戶的輸入 — 包括問題、命令或對 AI 的陳述。該角色構成 AI 響應的基礎,具有根本重要性。
Assistant 角色:AI 對用戶輸入的響應,不僅是答案或反應,更對維持對話流至關重要。通過追蹤 AI 之前的響應(其 "Assistant Role" 消息),系統確保連貫且上下文相關的交互。助手消息也可能包含函數工具調用請求信息 — 這是 AI 的特殊功能,在需要時執行計算、獲取數據等超越對話的特定任務。
Tool/Function 角色:專注于響應工具調用類助手消息,返回附加信息。

PromptTemplate

PromptTemplate promptTemplate = PromptTemplate.builder().renderer(StTemplateRenderer.builder().startDelimiterToken('<').endDelimiterToken('>').build()).template("""Tell me the names of 5 movies whose soundtrack was composed by <composer>.""").build();String prompt = promptTemplate.render(Map.of("composer", "John Williams"));
PromptTemplate promptTemplate = new PromptTemplate("Tell me a {adjective} joke about {topic}");
Prompt prompt = promptTemplate.create(Map.of("adjective", adjective, "topic", topic));
return chatModel.call(prompt).getResult();

TOOlS

  1. 示例
class DateTimeTools {@Tool(description = "Get the current date and time in the user's timezone")String getCurrentDateTime() {return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();}@Tool(description = "Set a user alarm for the given time, provided in ISO-8601 format")void setAlarm(String time) {LocalDateTime alarmTime = LocalDateTime.parse(time, DateTimeFormatter.ISO_DATE_TIME);System.out.println("Alarm set for " + alarmTime);}}ChatModel chatModel = ...
String response = ChatClient.create(chatModel).prompt("Can you set an alarm 10 minutes from now?").tools(new DateTimeTools()).call().content();System.out.println(response);

  1. 創建tools的兩種方式, tools注解,和通過MethodToolCallback的編程式配置

MCP

  1. mcp client

  2. mcp server

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

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

相關文章

基于SD-WAN的智慧高速解決方案:高效、低成本的智能交通實踐

隨著交通網絡的智能化需求逐漸增加&#xff0c;智慧高速建設已成為提升通行效率、優化安全性、實現交通現代化管理的重要方向。在本文中&#xff0c;我們將以某智慧高速項目為例&#xff0c;詳細探討如何通過 SD-WAN 技術與多種智能化手段結合&#xff0c;實現“低成本、高效率…

Towards Low Light Enhancement with RAW Images 論文閱讀

利用 RAW 圖像實現低光增強 摘要 在本文中&#xff0c;我們首次進行了基準研究&#xff0c;詳細闡述了在低光增強中使用 RAW 圖像的優越性&#xff0c;并提出了一種新穎的替代方案&#xff0c;以更靈活和實用的方式利用 RAW 圖像。受對典型圖像處理流程的全面考慮啟發&#xff…

smolagents - 如何在mac用agents做簡單算術題

smolagent是hf推出的agent開發庫&#xff0c;簡潔易用。這里嘗試用smolagents完成簡單數學題目。 1 smolagents安裝 conda create -n smolagents python3.12 conda activate smolagents pip install smolagents pip install smolagents[mlx-lm] 由于是在mac使用mlx&#xff0c;…

【無標題】LighthouseGS:面向全景式移動拍攝的室內結構感知三維高斯潑濺

標題&#xff1a;<LighthouseGS: Indoor Structure-aware 3D Gaussian Splatting for Panorama-Style Mobile Captures> 論文&#xff1a;https://arxiv.org/pdf/2507.06109 來源&#xff1a;南京大學&#xff1b;復旦大學&#xff1b;華為諾亞實驗室 文章目錄摘要一、前…

el-table中type=“selection“選中數據如何回顯

效果如下代碼如下 關鍵函數&#xff1a;toggleRowSelection(this.tableData[i])設置默認選中數據。 <template><el-tableref"multipleTable":data"tableData"tooltip-effect"dark"style"width: 100%"selection-change"h…

為來時路,OCM拿證學習和考試

為何選擇OCM&#xff1f;OCM的含金量無需多言。全球持證人數不足萬人&#xff0c;中國地區更是寥寥千人。它不僅是技術實力的象征&#xff0c;更是通往金融、互聯網、通信等核心企業高薪崗位的“通行證”。據行業數據顯示&#xff0c;持有OCM認證的技術人員&#xff0c;薪資普遍…

beautiful-react-hooks庫——入門實踐常用hook詳解

簡介 beautiful-react-hooks 是一個專為 React 設計的高質量自定義 Hooks 集合&#xff0c;涵蓋了事件、狀態、生命周期、DOM 操作、性能優化等多個方面&#xff0c;極大提升了函數組件的開發效率和代碼復用性。 安裝方法 npm install beautiful-react-hooks # 或 yarn add …

DOM 規范中的 MutationObserver 接口

MutationObserver 接口DOM規范中的 MutationObserver 接口可以在DOM被修改時異步執行回調。使用MutationObserver可以觀察整個文檔、DOM樹的一部分或某個元素&#xff0c;元素屬性、字節點、文本等。新引進的MutationObserver接口取代了已廢棄的MutationEvent。MutationObserve…

3.7 小結

圖3-7-1點云可視化點云可視化工具就像是打開點云數據寶藏大門的鑰匙&#xff0c;能讓我們直觀地理解和分析這些復雜的數據。本章節&#xff0c;主要介紹了PCL、Open3D、Matplotlib、PCShow、VTK 這幾種點云可視化工具。PCL&#xff08;Point Cloud Library&#xff09;是專注于…

對稱二叉樹、二叉樹直徑

101. 對稱二叉樹 - 力扣&#xff08;LeetCode&#xff09; 法一&#xff1a;遞歸。 對于兩個對稱位置的節點L和R&#xff08;L在左子樹&#xff0c;R在右子樹&#xff09;&#xff0c;只有當L的左節點值R的右節點值且L的右節點值R的左節點值時&#xff0c;這棵二叉樹才有可能對…

Java多線程1

線程是操作系統能夠運行調度的最小單位&#xff0c;它包含在進程之中&#xff0c;是進程的實際運作單位多線程有三種實現方式線程實現方法1&#xff0c;繼承Thread類&#xff08;無返回值&#xff09;&#xff1a;1、繼承Thread2、重寫run方法&#xff08;線程要執行的代碼&…

云計算如何提高企業的數據安全性和隱私保護

在企業數字化轉型加速推進的今天&#xff0c;數據安全與隱私保護已成為決定企業生存發展的核心命題。云計算憑借其靈活的架構優勢&#xff0c;不僅重塑了企業資源管理模式&#xff0c;更在數據安全防護領域構建起多層次保障體系。以下從六大維度解析云計算如何為企業數據安全與…

GaussDB 數據庫架構師修煉(二)數據庫計算容量評估

1 計算資源容量評估主要流程 一般地是經過以下5個流程評估GaussDB的計算容量: 2 TPC-C基準測試介紹 1)TPC-C是業界常用的一套Benchmark 由TPC (Transaction Processing Performance Council)委員會制定發布,用于 評測數據庫的聯機交易處理(偏向OLTP)能力,測試結果數據…

開源 python 應用 開發(六)網絡爬蟲

最近有個項目需要做視覺自動化處理的工具&#xff0c;最后選用的軟件為python&#xff0c;剛好這個機會進行系統學習。短時間學習&#xff0c;需要快速開發&#xff0c;所以記錄要點步驟&#xff0c;防止忘記。 鏈接&#xff1a; 開源 python 應用 開發&#xff08;一&#xf…

flink sql讀hive catalog數據,將string類型的時間戳數據排序后寫入kafka,如何保障寫入kafka的數據是有序的

在 Flink SQL 中&#xff0c;要確保從 Hive 讀取的 STRING 類型時間戳數據排序后有序寫入 Kafka&#xff0c;需要結合 批處理模式、時間類型轉換、單分區寫入 和 Kafka 生產者配置。以下是完整解決方案&#xff1a; 一、核心解決方案 1. 批處理模式 全局排序 將作業設置為批處…

7.17 滑動窗口 |assign |memo

lcp56. memo優化tle或者改用bfsclass Solution {int m, n;int dx[4] {0, 0, 1, -1};int dy[4] {1, -1, 0, 0};public:int conveyorBelt(vector<string>& matrix, vector<int>& start, vector<int>& end) {int ret INT_MAX;m matrix.size();n…

統計功效是什么?

統計功效的通俗理解可以把“統計功效”想象成偵探破案的能力——它代表統計檢驗&#xff08;偵探&#xff09;在犯罪事實確實存在&#xff08;真實效應存在&#xff09;時&#xff0c;成功發現真相&#xff08;檢測出效應&#xff09;的概率。核心比喻假設你是一個偵探&#xf…

大語言模型(LLM)訓練的教師強制(Teacher Forcing)方法

大語言模型&#xff08;LLM&#xff09;在訓練時使用一種名為“教師強制&#xff08;Teacher Forcing&#xff09;”的方法&#xff0c;而不是它們在推理&#xff08;生成文本&#xff09;時使用的“自回歸&#xff08;Autoregressive&#xff09;”方法 。闡明關于LLM訓練的一…

歸一化與激活函數:深度學習的雙引擎

歸一化和激活函數區別 歸一化和激活函數是深度學習中兩個不同但又存在關聯的技術,前者聚焦于“數據分布的調整”,后者聚焦于“引入非線性與輸出轉換”。 Softmax 既可以被視為一種歸一化操作,也屬于激活函數 因為它同時滿足兩者的核心特征,只是從不同角度定義:從“輸出…

C# --- 單例類錯誤初始化 + 沒有釋放資源導致線程泄漏

C# --- 單例類錯誤初始化 沒有釋放資源導致線程泄漏Background原因分析問題一&#xff1a; 錯誤初始化&#xff08;使用了箭頭函數&#xff09;問題一&#xff1a; 沒有Dispose資源Background 背景: service A的其中一個Api會向mq發送消息問題&#xff1a;線上發現這個服務經常…