Devextremeai ist eine Bibliothek mit vollständiger und vollständiger Implementierung aller APIs von OpenAI. Diese Bibliothek entspricht vollständig den OpenAI -Spezifikationen und implementiert auch die OpenAI -Fehlerantwort. Mit ASP.NET Core ist es sehr einfach zu bedienen und bietet die Abhängigkeitsinjektion (mit einer einzigen Codezeile als ASP.NET -Standardmuster) voll und ganz unterstützt. Es ist auch einfach in Bibliotheken ohne Abhängigkeitsinjektion zu verwenden (siehe Beispiele unten).
Bitte beachten Sie, dass dies eine inoffizielle OpenAPI -Bibliothek ist (sie wird nicht von Openai Company mantiniert).
| Bauen | Status | Aktuelle Version |
|---|---|---|
| CI |
Um diese Bibliothek zu verwenden, benötigen Sie einen OpenAI -API -Schlüssel (und optional Organisations -ID). Um den API -Schlüssel zu erhalten, müssen Sie Ihr Konto bei openai.com registrieren. Nach der Registrierung gehen Sie zu Ihrem OpenAI -Konto und durchsuchen Sie "API -Keys anzeigen". Auf dieser Seite können Sie Ihre Apikey erstellen. Auf Ihrer Kontoseite finden Sie die Einstellungsseite, auf der Ihre Organisations -ID platziert wird.
Sie können diese Bibliothek über das Nuget -Paket devextremeai verwenden
Wichtiger Hinweis darauf, dass diese Bibliothek das Dot -Netto -Symbol und die Abhängigkeitsinjektion unterstützt, damit sie Apikey und Organisation anstelle einer harten Codierung im Quellcode lesen kann. (Bitte keine Hardcode -Apikey und Organisations -ID im Quellcode und drücken Sie sie nicht zu Git oder einem Quell -Repository.)
Diese Bibliothek hält sich voll und ganz an OpenAI -Spezifikationen und ihr Objektmodell ist das gleiche von OpenAI (mit Dotnet -Besonderheiten). Diese Bibliothek implementiert auch OpenAI -Fehlercodes, die in der APIS -Referenz von OpenAI nicht dokumentiert sind.
Installieren Sie das Nuget -Paket devextremeai im Programm.
using DevExtremeAI . AspNet ; Auf diese Weise können Sie die ASP.NET -Dienstweiterung verwenden. Mit dem WebApplication -Builder können Sie jetzt die AddDevExtremeAI() -Methode verwenden, die alles, was Sie mit Abhängigkeitsinjektion benötigen, registrieren.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ; Diese AddDevExtremeAI() Überladung sucht nach dem Apikey in AppStings.json oder AppSettings.development.json, damit Sie vermeiden können, sie im Quellcode zu harten. Ich empfehle Ihnen, Github -Aktionsgeheimnisse zu verwenden.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;Auf diese Weise werden API -Schlüssel und Organisations -ID aus Umgebungsvariablen mit dem Namen OpenAI_Organization und OpenAI_API_Key gelesen.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ; Im obigen Beispiel können Sie die Überlastung AddDevExtremeAI<TEnvironment> verwenden, für die ein Objekttyp erforderlich ist, das die Schnittstelle DevExtremeAI.Settings.IAIEnvironment implementiert, damit Sie Apikey oder Organisations -ID von Ihrem gewünschten Ort lesen können. (Ihre Implementierung von IAIEnvironment wird auf Singleton -Weise verwendet).
Schließlich können Sie die Überladung AddDevExtremeAI(string apiKey, string? organization) verwenden und Apikey- und Organisations -ID -Werte übergeben, die von Ihrem gewünschten Standort gelesen werden (bitte lesen Sie sie von Ihrem gewünschten, aber nicht hardcode in einem Quellcode).
Das ist alles! Ab sofort können Sie OpenAI in Ihrem ASP.NET -Projekt über Abhängigkeitsinjektion verwenden.
Jetzt können Sie den Konstruktor Ihres Controllers und Freunden mit DevExtremeAI.OpenAIClient.IOpenAIAPIClient -Argumentation wie folgt erklären:
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}Ein Beispiel für die Verwendung von Iopenaiapiclient in Controller oder Apicontroller könnte sein:
// 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 } " ;
}Beachten Sie, dass Sie die vollständige Dokumentation von API und DTO in IntelliSense, Beispielen unten oder OpenAI -API -Referenz finden, da dieselben sind.
Wenn Sie außerhalb von ASP.NET Core oder ohne Hostbuilder- oder Abhängigkeitsinjektion wie in der Konsolenanwendung oder in der DOTNET -Bibliothek verwenden, können Sie Werksmethoden verwenden.
In diesem Szenario benötigen Sie dasselbe Paket Nuget -Paket devextremeai
Nach der Installation dieses Pakets können Sie die Devextremai -Bibliothek verwenden.
In Program.cs ad this mit:
using DevExtremeAI . OpenAIClient ; Jetzt können Sie die OpenAIClientFactory verwenden
In Ihrer Bibliothek oder Hauptmethode der Konsolenanwendung können Sie wie in diesem Beispiel ein Instace of IOpenAIAPIClient erstellen:
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 ) ;
}
} Die Fabrikmethode ( CreateInstance ) In der obigen Beispiel verwendet die Überladung ohne Argumente. Diese Überladung sucht nach ApikeyValue und Organisation IND in AppStings.json oder Appsetings.development.json. Die Schlüsselnamen der Appsetings müssen openai_api_key und openai_organisation sein.
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient Auf diese Weise werden API -Schlüssel und Organisations -ID aus Umgebungsvariablen mit dem Namen OpenAI_Organization und OpenAI_API_Key gelesen.
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient Sie können die Überlastung verwenden, die eine Instanz von DevExtremeAI.Settings.IAIEnvironment .
Sie können auch die Überlastung verwenden, die den Wert und die Organisations -ID von APICEY -Wert und Organisations -ID als Argumente (Schadensfälle nicht im Quellcode feststellen).
HardCode Apikey und Organisations -ID in einer Datei (Quellcode oder AppSettings -Dateien) jedoch nicht in das Quell -Repository the AppSetings.development.json und verwenden Sie GitHub -Aktionsgeheimnisse.
Alle Methoden von DevExtremeAI.OpenAIClient.IOpenAIAPIClient sind die gleichen von Openai, sodass Sie die verwenden können
offizielle OpenAI -API -Referenz. Anfrage -DTO -Objekte werden auch mit Standard -.NET -Dokumentation beschrieben, damit Sie intellissisch verwenden können. Alle Methoden von IOpenAIAPIClient sind in den Xunit -Integrationstests vorhanden, daher können Sie sie dort betrachten (DevextremAiliBtest -Verzeichnis).
Jede Antwort ist von DevExtremeAI.OpenAIDTO.ResponseDTO<T> Typ. Dieser Typ hat drei Eigenschaften:
ErrorResponse , das die von OpenAI API zurückgegebenen Fehlerdetails im Problem enthält.HasError , das wahr ist, wenn ein Fehler sonst aufgetreten ist, ist falsch.OpenAIResponse das die gleiche Reaktion der OpenAI entspricht.Diese Version unterstützt OpenAI-API und Objektmodelle Beschwerde bei GPT-4 und GPT-3.5-Turbo. In dieser OpenAI -API -Version wurde eine API veraltet und ein Objektmodell hat sich geändert. Sie können das aktualisierte Objektmodell im UML -Schema sehen. Für die Chat -API können Sie jetzt Objekte verwenden, die aus der Basisklasse 'ChatCompletionRoleRequestMessage' erbt.
Object ChatCompletionRolestringContentMessage dient nur zur Rückwärtskompatibilität. Mit diesem Objekt können Sie die Rolleneigenschaft wie die alte Objektmodellversion festlegen.
Zum Beispiel alter Code wie diesen:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Kann auf diese Weise aktualisiert werden:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Änderungen sind:
Um das neueste Versions -Update vollständig zu aktualisieren, muss auf diese Weise durchgeführt werden:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;Änderungen sind:
Sind alle OpenAI -API -Typen abgedeckt:
Sie finden die Beispiele für jede API im Testeinheitsprojekt. Wenn Sie möchten, können Sie diese Readme -Datei mit Beispielen erweitern;)
Copyright (C) 2023 Andrea Piccioni
Die Erlaubnis wird hiermit einer Person, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien (der "Software") erhält, kostenlos erteilt, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte, zu verwenden, zu kopieren, zu modifizieren, zusammenzufassen, zu veröffentlichen, zu veröffentlichen, zu verteilen, zu verteilt, und/oder Kopien der Software zu ermöglichen, um Personen zu beanstanden, an denen die Software zugänglich ist, um die folgenden Bedingungen zu beantragen.
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall sind die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen haftbar, sei es in einer Vertragsklage, unerbittlich oder auf andere Weise, die sich aus oder im Zusammenhang mit der Software oder anderen Geschäften in der Software ergeben.