Devextremeai是一個圖書館,可以完整實施所有OpenAI的API。該庫完全符合OpenAI規格,並且還實現了OpenAI錯誤響應。它非常易於與ASP.NET核心一起使用,並且對依賴項注入具有全部支持(用單行代碼為ASP.NET標準模式)。它也易於在沒有依賴注入的圖書館中使用(請參見下面的樣本)。
請注意,這是非正式的OpenAPI庫(這不是由Openai Company批准的)。
| 建造 | 地位 | 當前版本 |
|---|---|---|
| CI |
要使用此庫,您需要OpenAI API密鑰(以及可選的組織ID)。要獲取API密鑰,您必須將您的帳戶註冊到OpenAi.com。註冊後,轉到您的OpenAI帳戶並蒐索“查看API密鑰”,在此頁面中,您可以創建Apikey。在您的帳戶頁面上,您可以找到“設置”頁面放置您的組織ID的位置。
您可以通過Nuget軟件包DeVextremeai使用此庫
重要的一點是,該庫支持點網絡iConfiguration和依賴注入,因此它可以從它們中讀取Apikey和組織,而不是在源代碼中進行硬編碼。 (請不要在源代碼中硬代碼Apikey和組織ID,也不要將其推向Git或任何源存儲庫)。
該庫完全遵守OpenAI規格,其對像模型與OpenAI(具有dotnet特點)相同。該庫還實現了OpenAI錯誤代碼,該代碼未記錄在OpenAI的API參考中。
在program.cs中安裝nuget package devextremeai。
using DevExtremeAI . AspNet ;此使用允許您使用ASP.NET服務擴展。現在,使用WebApplication Builder,您可以使用AddDevExtremeAI()方法,該方法將所需的所有內容註冊依賴項注入。
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ;此AddDevExtremeAI()過載在appsettings.json或appsettings.development.json中查找apikey,以便您可以避免在源代碼中進行硬碼。我建議您使用GitHub動作秘密。
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;這樣,從名為OpenAI_organization和OpenAI_API_KEY的環境變量中讀取API密鑰和組織ID。
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ;在上面的示例中,您可以使用ORVIROAD AddDevExtremeAI<TEnvironment>需要實現DevExtremeAI.Settings.IAIEnvironment接口的對像類型,以便您可以從所需的位置讀取Apikey或組織ID。 (您的實施IAIEnvironment將以單人的方式使用)。
最後,您可以使用Overload AddDevExtremeAI(string apiKey, string? organization) ,並通過所需的位置讀取的Apikey和組織ID值(請從您想要的位置讀取它們,但不要在任何源代碼中進行硬碼)。
就這樣!從現在開始,您可以通過依賴注入在ASP.NET項目中使用OpenAI。
現在,您可以使用DevExtremeAI.OpenAIClient.IOpenAIAPIClient論點來聲明您的控制器和朋友的構造函數:
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}在控制器或apicontroller中使用Iopenaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaia的一個示例可能是:
// GET api/<TestAIController>/5
[ HttpGet ( " {id} " ) ]
public async Task < string > Get ( int id )
{
var chat = new CreateChatCompletionRequest ( ) ;
chat . Model = " gpt-3.5-turbo-1106 " ;
string prompt = $" Is the number { id } even or odd? " ;
chat . AddMessage ( new ChatCompletionUserContentMessage ( ) { Content = prompt } ) ;
var response = await _openAIApiClient . CreateChatCompletionAsync ( chat ) ;
return $" { prompt } -> { response ? . OpenAIResponse ? . Choices [ 0 ] ? . Message ? . Content } " ;
}請注意,您可以在Intellisense中找到API和DTO的完整文檔,以下示例或OpenAI官方API參考,因為相同。
如果您使用ASP.NET核心外部或不使用主機構建器或依賴項注入(例如在Console Application或Dotnet庫中),則可以使用出廠方法。
在這種情況下,您需要相同的軟件包nuget軟件包devextremeai
安裝此軟件包後,您可以使用DeVextremeai庫。
在program.cs ad this中使用:
using DevExtremeAI . OpenAIClient ;現在,您可以使用OpenAIClientFactory
在您的庫或主機應用程序的主要方法內,您可以像以下示例一樣創建一個IOpenAIAPIClient :
internal class Program
{
static async Task Main ( string [ ] args )
{
var openAIClient = OpenAIClientFactory . CreateInstance ( ) ; //create an instance o IOpenAIAPIClient
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Hello! " ,
} ) ;
var response = await openAIClient . CreateChatCompletionAsync ( createCompletionRequest ) ;
Console . WriteLine ( response . OpenAIResponse . Choices [ 0 ] . Message . Content ) ;
}
}在上面的示例中,工廠方法( CreateInstance )使用無參數的過載,此過載在AppSettings.json或AppSettings.development.json中查找ApikeYvalue和組織IND。 AppSettings密鑰名稱必須為OpenAI_API_KEY和OPENAI_ORGARIZIADY。
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient 這樣,從名為OpenAI_organization和OpenAI_API_KEY的環境變量中讀取API密鑰和組織ID。
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient 您可以使用需要DevExtremeAI.Settings.IAIEnvironment實例的過載,以便您可以從所需的位置讀取Apikey值和組織ID。
另外,您可以將Reqire Apikey值和組織ID的過載作為參數(但請不要在源代碼中進行硬編碼)。
但是,請勿在任何文件(源代碼或AppSetting文件)中的硬碼Apikey和組織ID,不要將其推入源存儲庫AppSettings.development.json並使用GitHub Action Secrets。
DevExtremeAI.OpenAIClient.IOpenAIAPIClient is openai均相同,因此您可以使用該方法,因此您可以使用
官方OpenAI API參考。請求DTO對像也用標準.NET文檔描述,因此您可以使用Intellisese。 Xunit集成測試中存在IOpenAIAPIClient的方法(devextremeailibtest目錄)。
每個響應都是DevExtremeAI.OpenAIDTO.ResponseDTO<T>類型的響應。這種類型具有三個屬性:
ErrorResponse包含OpenAI API返回的錯誤詳細信息。HasError ,否則否則是錯誤的。OpenAIResponse是Openai響應的相同。該版本支持OpenAI API和對像模型投訴GPT-4和GPT-3.5-Turbo。在此OpenAI API版本中,一些API已棄用,並且某些對像模型已更改。您可以在UML模式中看到更新的對像模型。對於聊天API,您可以使用從基類“ ChatCompletionrolerequestMessage”繼承的對象。
對象ChatCompletionRolestrestrestrestMessage僅用於向後兼容性。使用此對象,您可以設置諸如舊對像模型版本之類的角色屬性。
例如這樣的舊代碼:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;可以以這種方式更新:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;更改是:
要完全更新到最新版本的更新必須以這種方式進行:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;更改是:
涵蓋所有OpenAI API類型:
您可以在測試單元項目中找到每個API的示例。如果願意,可以用示例貢獻擴展此讀數文件;)
版權(C)2023 Andrea Piccioni
特此免費授予獲得此軟件副本和相關文檔文件副本(“軟件”)的任何人,以無限制處理該軟件,包括無限制的使用權,複製,複製,修改,合併,合併,發布,分發,分發,分發,訂婚,和/或允許軟件的副本,並允許對以下條件提供以下條件,以下是以下條件。
上述版權通知和此許可通知應包含在軟件的所有副本或大量部分中。
該軟件是“原樣”提供的,沒有任何形式的明示或暗示保證,包括但不限於適銷性,特定目的的適用性和非侵權的保證。在任何情況下,作者或版權持有人都不應對任何索賠,損害賠償或其他責任責任,無論是在合同,侵權的訴訟中還是其他責任,是由軟件,使用或與軟件中的使用或其他交易有關的。