使用.NET開發搭建OpenAI模型的中間服務端

WeskyNet發表於2022-12-16

前言:前不久微信上大家玩ChatGPT聊天機器人玩的不亦樂乎;不過隨著ChatGPT被封殺,所以用微信聊天機器人有可能導致封號的風險。那如果自己不想每次都去OpenAI官網上進行對話【PS:官網上面聊天對話有侷限性,例如回覆的內容比較長,AI回答是一個一個字寫的,就可能導致超過一定時間以後,變成請求超時之類的異常;而透過API直接訪問,可以避免這個情況發生】,想要自己搭建一個服務來本地呼叫,是不是也可以?

於是,找了官方的一些資料,就動手我們們自己搭建一個服務端,方便給別人呼叫來提供服務。

官網文件地址:

https://beta.openai.com/docs/introduction

如果不知道怎麼註冊OpenAI賬號,也可以參考我的上一篇文章,裡面有一個申請英國手機號碼的方式,地址:

https://www.cnblogs.com/weskynet/p/16973956.html

 

好了,接下來開始我們自己的表演。

1、新建一個webapi服務程式

 

2、我選擇的是.NET6,大家也可以自己選擇自己喜歡的環境,問題都不大。為了方便閱讀,我選擇了使用控制器和啟用OpenAPI支援(swagger)。

 

3、建立好以後,在program裡面,新增HttpClient服務的註冊,用來訪問openai的api會用到。

4、新建一個控制器,就叫 RobotController,用來提供webapi介面做測試使用。

5、在新建的控制器裡面,做點最初的準備,例如對IHttpClientFactory注入進來備用。

6、官網上有一些資料,例如text-davinci-003模型的最大tokens是4000,所以後面有個請求引數的部分,不能超過這個數。

 

7、這個是一個引數建議,把temperature設為0.9f,把top_p設為1. 按照文件的解釋,temperature的值會影響回答的內容的一些特性,例如可能設計不友好的回覆的內容的比重等。

8、我們做個通用的請求實體類,用來當作訪問我們提供的webapi介面所需的引數資訊。三個資訊比較重要的,當作引數,可以進行微調,例如文件建議的temp為0.9f,max tokens最大為4000,我們可以設為其他的值進行微調,等等。而message欄位就是我們本身的請求引數,用來和機器人對話使用的。

9、然後是返回體,這個格式是解析openai的返回值進行配置的,大家也可以隨意參考,或者不做解析直接返回字串也是OK的,反正是一串Json資料,問題不大。

10、然後對剛才的Call方法做個完善,大體內容如下所示。其中,openaiKey是我個人的key,所以為了隱私洩露,我稍微打了馬賽克,希望理解。其他程式碼內容,可以直接看截圖程式碼。

11、最後,啟動服務程式,進入到swagger裡面進行呼叫介面。例如,message欄位我傳的 “幫我寫一個C#版本的Hello World”,得到的返回值體裡面,位於choises[]陣列的第一條資料,text就是機器人回覆的內容。

 

防盜鏈專用:本文部落格原始連結為:https://www.cnblogs.com/weskynet/p/16987108.html

12、以上只是一個簡單的寫法,大家可以根據自己需要進行擴充或者改造。比如說,用已有的key和規律,寫個其他語言的聊天服務,或者寫個聊天客戶端進行訪問,等等,一切皆有可能。或者微信被封殺了,那就可以嘗試自己搭建一個服務來間接繼續實現某些APP的智慧聊天服務等等。

如果不想自己擼程式碼的,也可以在我個人微信公眾號【Dotnet Dancer】後臺回覆【robot】,即可獲取本篇部落格的原始碼。或者掃以下二維碼,也可進入公眾號後臺:

 

以上就是該文章的全部內容,如果覺得有幫助,歡迎點贊、轉發或評論,謝謝大家,祝大家和機器人玩的愉快~

 

相關文章