前言 上一章我們熟悉了Semantic Kernel中的內(nèi)置插件和對ConversationSummaryPlugin插件進(jìn)行了實(shí)戰(zhàn),本章我們講解一下另一個(gè)常用的內(nèi)置插件HttpPlugin的應(yīng)用。 上一章對ConversationSummaryPlugin總結(jié)進(jìn)行了調(diào)整之后,順便給Semantic
上一章我們熟悉了Semantic Kernel中的內(nèi)置插件和對ConversationSummaryPlugin插件進(jìn)行了實(shí)戰(zhàn),本章我們將深入探討另一個(gè)常用的內(nèi)置插件HttpPlugin的應(yīng)用。
上一章對ConversationSummaryPlugin總結(jié)進(jìn)行了調(diào)整之后,順便給Semantic Kernel提了一個(gè)PR已經(jīng)被采納了,在此記錄一下!
.Net: refactor : SummarizeConversation #6719
HttpPlugin插件屬于Native Plugins原生插件。它提供了Http的功能,允許用戶通過Http協(xié)議與外部進(jìn)行交互。
我們對這個(gè)插件的整體進(jìn)行分析一下
構(gòu)造函數(shù)
提供了兩個(gè)構(gòu)造函數(shù)。第一個(gè)構(gòu)造函數(shù)沒有參數(shù),它調(diào)用了第二個(gè)構(gòu)造函數(shù),并傳遞null作為參數(shù)。
第二個(gè)構(gòu)造函數(shù)接受一個(gè)HttpClient類型的參數(shù),如果未提供,則使用HttpClientProvider.GetHttpClient()方法獲取一個(gè)新的HttpClient實(shí)例。
這里重點(diǎn)說一下第二個(gè)構(gòu)造函數(shù),支持HttpClient的構(gòu)造函數(shù),這就有更多的可玩性了,比如可以定義一個(gè)HttpclientHandler對請求進(jìn)行添加自定義的HttpHeader或者進(jìn)行參數(shù)的拼接轉(zhuǎn)發(fā)等操作。
Native functions
GetAsync:發(fā)送一個(gè)HTTP GET請求,并返回響應(yīng)體作為字符串。
PostAsync:發(fā)送一個(gè)HTTP POST請求,帶有請求體,并返回響應(yīng)體作為字符串。
PutAsync:發(fā)送一個(gè)HTTP PUT請求,帶有請求體,并返回響應(yīng)體作為字符串。
DeleteAsync:發(fā)送一個(gè)HTTP DELETE請求,并返回響應(yīng)體作為字符串。
第一步需要安裝Nuget包
NuGet\Install-Package Microsoft.SemanticKernel.Plugins.Core -Version 1.14.1-alpha
該包目前只有預(yù)覽版本,如果用VS的包管理器安裝,那需要勾選包括預(yù)覽發(fā)行版
Semantic Kernel注冊插件有兩種方式:
kernel.ImportPluginFromType
var httpclient = new HttpClient(); kernel.ImportPluginFromObject(new HttpPlugin(httpclient));
以上兩種方式對應(yīng)兩種生命周期的注冊
這個(gè)接口都很簡單 對我們Student對象的增刪改查
public class Student { public string Name { get; set; } public int Age { get; set; } }
我們的測試程序還是以Semantic Kernel的會話服務(wù),自動觸發(fā)function calling的形式
// Get chat completion service var chatCompletionService = kernel.GetRequiredService
User > 幫我向https://localhost:7014/Student發(fā)一個(gè)get請求 Assistant > 向https://localhost:7014/Student發(fā)起GET請求后成功得到了響應(yīng),返回的數(shù)據(jù)顯示包含了一個(gè)學(xué)生的信息。該學(xué)生名為 張三,年齡為16歲。這表明請求執(zhí)行成功,獲取到了預(yù)期的數(shù)據(jù)。
HttpPlugin的這個(gè)功能比較雞肋,可以看一下代碼
[KernelFunction] [Description("Makes a POST request to a uri")] public Task
參數(shù)形式是new StringContent(body),也就是說MediaTypeHeaderValue媒體類型默認(rèn)為StringContent text/plain。
Asp.Net Core只能接收Post請求json格式的string,不能接收原始string
即content-type為text/plain的post請求,如果支持需要自定義實(shí)現(xiàn)沒有提供對應(yīng)的MediaTypeFormatter。
所以說這個(gè)插件的Post請求場景局限,真正用到生產(chǎn)還需要自己去實(shí)現(xiàn)一個(gè)插件。!
User > 向https://localhost:7014/student 發(fā)一個(gè)post請求 Assistant > 已成功向 https://localhost:7014/student 發(fā)送了 POST 請求。如果需要發(fā)送具體的數(shù)據(jù),請?zhí)峁┮谡埱篌w內(nèi)的 JSON 數(shù)據(jù)。
Put和Delete類似。
可以借鑒HttpPlugin的實(shí)現(xiàn)思路在項(xiàng)目中靈活的運(yùn)行,如果不支持那就可以自定義插件來完成需求的開發(fā),還是比較期待這個(gè)插件能夠更加完善的一點(diǎn),在未來以更靈活的方式支持Post等請求的多種形式。
小編推薦閱讀機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動態(tài)代理的對比分析
閱讀Win11筆記本“自動管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)