前言:前一天寫的一個ChatGPT服務端,貌似大家用起來還不是那麼方便,所以我順便用WPF和AspNetCore的webapi程式做個客戶端吧,透過客戶端來快速訪問chatgpt模型生成對話。
1、新建一個WPF專案,用來做第一個客戶端示例。
![](https://i.iter01.com/images/670f406eb5441ae7edaa48fd08f469c7574ba5c9d22c0772ac3a57a6924d87a6.png)
2、專案框架我這邊選擇的是.NET6,建議大家選擇.NET CORE2.2或以上環境,不然ChatGPT的庫會引用不成功。
![](https://i.iter01.com/images/e20260c1d361d165aea9ef7b4764f639cbdc1027d6d171d4c2d4bc3cde7d8376.png)
3、引用下圖這兩個包,如圖。第一個是用來提供依賴注入的核心元件,第二個是用來快捷訪問OpenAI的我提前寫好的一個通用客戶端類庫。
![](https://i.iter01.com/images/1ea4aa83d6a09487bca7a4f58a5f6711bcb34e3ff66ca90a7857d438d8b652da.png)
4、WPF專案做點小調整,在App.Xaml裡面,把啟動項幹掉先。
![](https://i.iter01.com/images/1fb01c1af2da8aaa4866746eb58cedcbbc6e4a1561b77b56e5f3016c1569c972.png)
5、App.xaml.cs裡面,新增如下功能程式碼。因為通用庫的方法實現使用了依賴注入的形式,所以此處就弄一個簡單的註冊方式來意思一下,就不搞別的IOC容器來做了,怎麼簡單怎麼來。
核心的兩個註冊選項:HttpClient、IOpenAiServices介面以及實現
![](https://i.iter01.com/images/6843fa4d75034c4cb18b5b19e35604c0b725466c23d688fe286702abcb26b280.png)
6、隨便搞兩個輸入框和一個按鈕,給倆輸入框命個名,區分一哈,例如 Receive和Send。大家可以自己自定義,不用在意這些細節。
![](https://i.iter01.com/images/29230ecac1b75487410692c003a763e881a6057eafaacc4fcd819af9e0185a4b.png)
7、提供的客戶端訪問介面是非同步的,建議也用非同步的形式呼叫。在按鈕事件裡面進行實現,如圖所示。其他備註可以直接看圖文字描述。
![](https://i.iter01.com/images/ccc8b2d7c8f802e462e55d32a7f7313f2a6b43791dea01ceb2f37af641557a54.png)
8、執行程式,做個簡單測試,例如寫一個hello world。提供的答案是一個C程式程式碼的Hello world,看來訪問是沒得問題的,Bingo~
![](https://i.iter01.com/images/3181697a5953bfcbb36967e9b3dc78998108a5f078b76b93e201b41a833314a6.png)
9、接下來,再做一個基於aspnetcore的webapi的客戶端試試。新建一個webapi專案。
![](https://i.iter01.com/images/49eae7be0047ff16f671fb2c2e98fe6d17a0b8e46d1a2c13c41bdde0cc75e805.png)
10、此處我也選擇的是.NET 6框架版本。大佬們自己喜歡就行,版本不重要,.NET CORE2.2以及以上都可以用。
![](https://i.iter01.com/images/272782a78e40c438e88f64dbbcd29219f37a09ae8b775f4687362b7abcea2e74.png)
11、新增上面同款引用
![](https://i.iter01.com/images/8dd9db956b5612e6d950bc5a7fd8d66ef93adc13f210e8b74929bc3488baf36c.png)
12、新增註冊。
![](https://i.iter01.com/images/cfe243a0eb0f5e660a5296ac8dfdb2a312628082ea0dd1ccbae4328dd5a1dac2.png)
13、對IOpenAiServices服務進行注入。簡單起見,直接在預設的控制器裡面注入吧。
![](https://i.iter01.com/images/9761ff37ecf9503aef22c315da46c795e214e499285ecd72fdeb2a8487c8be3f.png)
14、改造一下預設的方法,看圖即可。
![](https://i.iter01.com/images/5ba4aafae024518e96a83af84144af333084672ebc0d50e67948ef031a79d311.png)
中途插播我文章的原文連結,防止盜鏈。本文最初發表於:https://www.cnblogs.com/weskynet/p/16990125.html
如果其他地方看見該文章,作者不是Wesky或者WeskyNet,則大機率是盜版文章。
繼續~繼續~~~
15、啟動程式,走一個。例如寫一個Vue前端登入程式碼
![](https://i.iter01.com/images/968012fa1dfa210565298ce93bb20a3a4f4ce8d47757ba2093eb3b113a385b7a.png)
16、大概可以看出內容,但是返回值直接看字串是比較頭大,剛好上面WPF有輸入框,那就丟過去看看效果。
![](https://i.iter01.com/images/e17619d065e5909d3cde60466a41187664eb9b8b2798558407374c6c1381303b.png)
17、啟動,瞅一眼效果,看起來好像還可以,基本上功能都涵蓋到了。比自己擼,還是快很多的。
![](https://i.iter01.com/images/1140080663418bfce33ffa5b17b8044741f7474496e7f3ec216021b109348ba9.png)
18、既然WPF的客戶端都開了,那就順便我也再問一下WPF的前端程式碼,並使用MVVM模式,看看排版怎麼樣。貌似也幾乎寫的不差,包括了Xaml程式碼和ViewModel程式碼
![](https://i.iter01.com/images/8b8328ad7ddb4115e9b604a0dded164c306df7a7aa67f925d9cf52d5030c0c05.png)
19、切換回webapi專案,CallGPT3引數如下所示,所以message引數後面也可以自定義為我們自己的個性化調參使用。
![](https://i.iter01.com/images/f7bcffca9bfa1b50c00a074c6633734c167f445e775717626ed8adb47e151ce7.png)
例如,內建的key過期了或者沒錢了,我要傳一個自己的key來訪問:
![](https://i.iter01.com/images/d3d7cb947e8595b4f45e6aebbb3ba63778d52b3a02f78680c48c1d159603997c.png)
20、走一個,輸入請求對話的內容,以及自己的key,走一個。內容和返回,自行看圖~
![](https://i.iter01.com/images/90cbc1ca55c73adb63e7d4e4b7eef777f554df10a952053a8247f5fbeaf9c4f2.png)
21、以上就是本篇文章的全部內容,大佬們感興趣,歡迎自己把玩一番。要是覺得對你有幫助,歡迎轉發、評論、推薦點贊,謝謝各位大佬~
如果需要上面客戶端原始碼,也可以在我的個人公眾號【Dotnet Dancer】後臺回覆【聊天神器】即可獲取。