AI超級智能體教程(五)---自定義advisor擴展+結構化json輸出

文章目錄

  • 1.自定義攔截器
    • 1.2自定義Advisor
    • 1.2打斷點調試過程
    • 1.3Re-reading Advisor自定義實現
  • 2.戀愛報告開發--json結構化輸出
    • 2.1原理介紹
    • 2.1代碼實現
    • 2.3編寫測試用例
    • 2.4結構化輸出效果

1.自定義攔截器

1.2自定義Advisor

spring里面的這個默認的是SimpleloggerAdvisor,但是這個默認的但因的日志級別是debug級別的,正常情況下,我們是看不到的,我們可以在源碼里面去看一下:

為了方便我們快速地定位這個源碼里面去:我們可以使用這個new的方法,然后右鍵選擇goto這樣的方法進行跳轉

image-20250502142854478

可以看到這個攔截器默認的日志級別就是debug級別的,也就是我們默認情況下是無法輸出的:

image-20250502143245056

如果你想要改變這個默認輸出級別,這個也是有方法的,在這個配置文件里面進行指定就可以了:

image-20250502143330867

如果你想要看到這個.java文件,因為我們自己去實現的時候需要在這個原來的官方實現的基礎上面去進行修改,因此這個時候我們需要找到原來的這個java文件,我自己點擊去之后發現是class文件,顯然不是我們想要的:

image-20250502144812618

這個時候的做法就是選擇上面的藍色框里面的download resource這個選項,就可以把這個對應的java文件進行下載了;

下載之后的這個文件就是我們的官方是如何實現這個simpleadvisor的相關的方法的,這個時候我們直接把這個里面的所有的代碼復制到我們的包包下面,然后再官方的基礎上面進行整合和修改即可:

首先我們需要不同的方法之間的調用關系,before就是我們上面說的這個攔截器,對于這個用戶的輸入進行處理after就是對于響應的處理,因此這個方法需要保留,原來的這個log事debug模式的,現在我們自定義他成為info格式的,方便我們的后續的輸出查看效果;

image-20250502150409421

其次就是這個里面的兩個方法了:流式調用和非流式調用的兩個方法:非流式調用就是下面的這個aroundcall這個方法,流式調用就是下面的這個stream方法,stream在英文里面的解釋就是小溪,小河的意思,這個也是很容易理解的;

每一個方法里面的都有這個next方法,也就是繼續往這個下面去走,flux就是對于相應進行聚合處理,方便我們對于整個響應進行觀察和處理;

image-20250502150617022

這個時候,大家就可以看到這個打印的日志和我們自定義的advisor輸出的這個內容了,都是使用的這個requst和response這個樣子的格式書寫的;

image-20250502145952295

1.2打斷點調試過程

為什么要額外的去做一下這個部分,因為對于初學者而言,通過調試能夠讓我們更好的理解這個調用的過程,以及我們的輸入是如何被大模型進行處理的,以及這個輸出是如何被得到的;

這個時候我們可以發現:系統得到了我們的用戶輸入的內容usertext,而這個systemytext就是我們的系統默認的預設,這個也是我們的代碼里面就有設計的;

image-20250502151345845

在這個調試的信息里面,我們可以看到我們的個人的調用大模型的設置:

image-20250502151547190

以及我們可以看到這個messageChatMemory對應的這個優先級的信息,這個order是一個負數,這個數字越小,證明這個對應的優先級就是越高的;

image-20250502151720844

在接下來繼續執行的過程中:我們也是可以看到這個輸出的內容的,也就是我們的response相關的內容,在這個調試的過程里面我們也是可以看到的;

image-20250502152059201

1.3Re-reading Advisor自定義實現

英語學的不錯的小伙伴這個時候大概也是可以猜到的,就是這個re-reading表示的就是重讀,也就是把我們給的這個提示詞重新復述一下,這個時候AI的回答就有可能產生不一樣的這個效果;

下面的這個使用的其實是模版字符串,也就是下面的這個re2_input_query實際上是把我們的用戶的輸入整成一個模版,放到我們的文本信息里面去;

下面的這個代碼來自于官方文檔,主要是了解這個特性,實際上我們不會經常使用,因為這個重述的操作是消耗了2倍的這個token的,因此我們只會在特定的場景下面進行使用;

image-20250503174731704

這個是重讀,所以這個代碼里面的aroundcall和aroundstream沒有進行其他的處理,直接返回即可;

2.戀愛報告開發–json結構化輸出

2.1原理介紹

這個事我們的戀愛報告開發里面的很重要的一個步驟,就是理解什么是結構化輸出??

通過下面的這個圖片,希望可以幫助大家去更好的理解什么是結構化輸出:實際上就是交給大模型處理之前進行相關的設置,例如,告訴這個大模型我們需要以json格式進行格式化輸出,輸出的結果啥的最后經過機構化轉換器的處理,把原始的文本處理成為結構化的輸出內容,這個過程里面結構化轉換器發揮了一個非常重要的作用;

image-20250503185443384

2.1代碼實現

接下來,我們需要去實現一下這個結構化輸出的特性:

首先,我們在原來的這個基礎上面去cv代碼,大部分框架都是不變的,我們把這個名字修改一下,可以看到這個prompy每次用戶的輸入之后都會加上圖示里面的“內容建議為列表”,這個實際上就是結構化輸出的prompt,相當于針對用戶輸入,進行額外的處理,然后在發送到這個大模型那邊去;

其中這個結構化輸出的方法里面添加了這個entity,里面的參數是我們的record,實際上這個就是我們的title和suggestions,這個實際上是我們的結構化輸出里面的標題和json內容,在下面的調試過程里面你就會看到;

image-20250503190023415

2.3編寫測試用例

測試里面就是調用上面寫的這個方法,看看這個結構化輸出的結果,其他的都是保持不變的,我們的這個message直接使用上面的提示詞也是沒有問題的;

image-20250503190351478

2.4結構化輸出效果

如何看到這個結構化輸出的結果,我們可以使用斷點調試的方式對于這個過程進行監控和處理:然后就可以在斷點里面看到這個過程里面的非常詳細的這個數據了;可以看到這個就是使用json的格式進行輸出的;

為什么要達到這個結構化輸出的目的,這個實際上是為了下面的持久化保存進行鋪墊的,因為結構化輸出的這個數據方便我們進行這個保存之類的,諸如放到這個數據庫里面,非常的方便,普通的原始文本不具備這樣的特性,當然,這都是后話了;

image-20250503185650060
數據方便我們進行這個保存之類的,諸如放到這個數據庫里面,非常的方便,普通的原始文本不具備這樣的特性,當然,這都是后話了;

[外鏈圖片轉存中…(img-cqkgzaVB-1746270376115)]

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

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

相關文章

02_使用 AES 算法實現文件加密上傳至阿里云、解密下載

02_使用 AES 算法實現文件加密上傳至阿里云、解密下載 一、文件上傳下載接口 controller 層 RestController RequestMapping("/api/common/file") Api(tags "公共文件上傳") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…

力扣:24兩兩交換鏈表的節點

目錄 1.題目描述: 2.算法思路: 3.代碼展示: 1.題目描述: 給你一個鏈表,兩兩交換其中相鄰的節點,并返回交換后鏈表的頭節點。你必須在不修改節點內部的值的情況下完成本題(即,只能…

smss源代碼分析之smss!SmpLoadSubSystemsForMuSession函數分析加載csrss.exe

第一部分: Next SmpSubSystemsToLoad.Flink; while ( Next ! &SmpSubSystemsToLoad ) { p CONTAINING_RECORD( Next, SMP_REGISTRY_VALUE, Entry )…

MIT6.S081-lab8前置

MIT6.S081-lab8前置 注:本部分除了文件系統還包含了調度的內容。 調度 調度涉及到保存寄存器,恢復寄存器,就這一點而言,和我們的 trap 很像,但是實際上,我們實現并不是復用了 trap 的邏輯,我…

哈希函數詳解(SHA-2系列、SHA-3系列、SM3國密)案例:構建簡單的區塊鏈——密碼學基礎

文章目錄 一、密碼哈希函數概述1.1 哈希函數的基本概念1.2 哈希函數在數據安全中的應用 二、SHA-2系列算法詳解2.1 SHA-2的起源與發展2.2 SHA-256技術細節與實現2.3 SHA-384和SHA-512的特點2.4 SHA-2系列算法的安全性評估 三、SHA-3系列算法詳解3.1 SHA-3的起源與設計理念3.2 K…

待驗證---Oracle 19c 在 CentOS 7 上的快速安裝部署指南

Oracle 19c 在 CentOS 7 上的快速安裝部署指南 Oracle Database 19c 是一個功能強大的企業級數據庫系統,下面我將為您提供在 CentOS 7 上快速安裝部署 Oracle 19c 的詳細步驟。 一、準備工作 1. 系統要求 CentOS 7 (64位)最小內存: 2GB (推薦 8GB 以上)最小磁盤…

stm32 HAI庫 SPI(一)原理

基本特點 通信方式:同步、串行(串行、并行、并發,別再傻傻分不清了!_串行和并行的區別-CSDN博客)、全雙工 (也可以選擇半雙工)速率:50MHZ以下數據格式:8位/16位傳輸順序…

OpenResty技術深度解析:原理、應用與生態對比-優雅草卓伊凡

OpenResty技術深度解析:原理、應用與生態對比-優雅草卓伊凡 一、OpenResty技術概述 1.1 OpenResty是什么? OpenResty是一個基于Nginx的高性能Web平臺,它將標準的Nginx核心與一系列強大的第三方模塊(主要是LuaJIT)捆綁在一起,形成了一個全功能的Web應用服務器。不同于傳…

二維碼批量識別—混亂多張二維碼識別-物品分揀—-未來之窗-仙盟創夢IDE

仙盟模型 用途 精準分揀:快速準確識別物品上復雜或多個二維碼,依據碼中信息(如目的地、品類等)實現物品自動化分揀,提高分揀效率與準確性。庫存管理:識別入庫、出庫物品二維碼,更新庫存數據&am…

scikit-learn在監督學習算法的應用

shiyonguyu大家好,我是我不是小upper!最近行業大環境不是很好,有人苦惱別人都開始著手項目實戰了,自己卻還卡在 scikit-learn 的代碼語法上,連簡單的示例運行起來都磕磕絆絆。確實,對很多機器學習初學者來說…

dragonfly docker pull 報錯 error parsing HTTP 404 response body

問題描述 在部署了 dragonfly 的機器上 docker pull 鏡像發現如下報錯 docker pull uhub.service.ucloud.cn/openbayes/test-job-sidecar:latest Error response from daemon: error parsing HTTP 404 response body: invalid character p after top-level value: "404 …

C++11新特性_標準庫_正則表達式庫

C11 引入了標準正則表達式庫 <regex>&#xff0c;它提供了強大且靈活的文本匹配和替換功能。下面為你詳細介紹該庫的相關內容&#xff0c;包括主要組件、使用方法、示例代碼等。 主要組件 std::regex&#xff1a;用于表示一個正則表達式對象&#xff0c;可通過構造函數…

【多線程】七、POSIX信號量 環形隊列的生產者消費者模型

文章目錄 Ⅰ. 信號量一、POSIX 信號量的概念二、POSIX 信號量的類型區別三、POSIX 信號量與 SystemV 信號量的區別Ⅱ. 線程信號量基本原理一、為什么要引入信號量?二、PV 操作三、POSIX 信號量的實現原理四、CAS操作介紹Ⅲ. POSIX未命名信號量接口一、初始化無名信號量二、銷毀…

ES基本使用方式

ES基本使用 文章目錄 ES基本使用1.es的訪問使用URL訪問 2.mapping的理解Dynamic Mappingkeyword 與 text的區別?基礎定義與核心差異主字段&#xff0c;子字段 創建mapping 3.創建索引4.查看索引列表5.刪除索引6.添加數據7.查詢數據 重置es密碼&#xff0c;初始用戶elastic el…

玩轉Docker | 使用Docker部署AI證件照工具

玩轉Docker | 使用Docker部署AI證件照工具 前言一、HivisionIDPhotos介紹項目簡介主要特點二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署HivisionIDPhotos服務下載鏡像創建容器創建容器檢查容器狀態檢查服務端口安全設置四、訪問HivisionIDPhotos服務訪…

【掌握 DDL】:SQL 中的數據庫與表管理

掌握 DDL&#xff1a;SQL 中的數據庫與表管理 掌握 DDL&#xff1a;SQL 中的數據庫與表管理數據庫 DDL創建數據庫查看數據庫查看所有數據庫查看數據庫創建語句 進入數據庫刪除數據庫備份數據庫備份恢復 查看數據庫連接深入理解數據庫創建與刪除數據庫字符集與校驗規則 表 DLL創…

基于「騎手外賣系統」串聯7大設計原則

你說得對&#xff01;這些設計原則聽起來都很抽象、很“玄”&#xff0c;如果不是實際開發過系統&#xff0c;很難理解“到底為什么要這樣設計”。 那我現在就用一個你能想象得很清楚的真實例子&#xff0c;幫你把這7個設計原則一一落地到具體情境里&#xff0c;你會一眼明白。…

基于輕量化YOLO的車載設備實時視頻目標檢測方案

一、背景與需求 在智能汽車后裝市場,設備的視覺感知能力日益成為差異化競爭點。傳統后裝產品主要關注車輛診斷和位置跟蹤,但在智能輔助駕駛(ADAS)與車聯網(V2X)大潮下,如果能在已有硬件平臺上新增“視頻級行人、車輛、交通標志檢測”功能,不僅可提升安全預警,也能為后…

HTTPS協議:更安全的HTTP

目錄 1. 前言 2. HTTP 與 HTTPS&#xff1a;安全的分水嶺 2.1 HTTP 的安全隱患 2.2 HTTPS 的安全提升 3. HTTPS 的核心概念 3.1 加密三劍客&#xff1a;對稱加密、非對稱加密與哈希算法 3.2 SSL/TLS 握手過程&#xff1a;建立安全通道的關鍵步驟 3.3 數字證書&#xff…

使用 Go 和 Gorgonia 實現圖像驗證碼識別系統

本文將介紹如何使用 Go 語言結合 Gorgonia 構建一個簡單的圖像驗證碼識別模型。Gorgonia 是一個專為機器學習打造的計算圖庫&#xff0c;在 Go 中支持自動微分與深度學習構建。 1. 項目依賴 首先安裝 Go 語言環境和 Gorgonia&#xff1a; 登錄后復制 go install gorgonia.org/g…