Devextremeai est une bibliothèque avec une implémentation complète et complète de toutes les API d'OpenAI. Cette bibliothèque est entièrement conforme aux spécifications OpenAI et implémente également la réponse d'erreur OpenAI. Il est très facile à utiliser avec ASP.NET Core et a un support complet à l'injection de dépendance (avec une seule ligne de code comme modèle standard ASP.NET). Il est également facile à utiliser dans les bibliothèques sans injection de dépendance (voir les échantillons ci-dessous).
Veuillez noter qu'il s'agit de la bibliothèque OpenAPI non officielle (elle n'est pas entretenue par Openai Company).
| Construire | Statut | Version actuelle |
|---|---|---|
| CI |
Pour utiliser cette bibliothèque, vous avez besoin de la touche API OpenAI (et éventuellement ID d'organisation). Pour obtenir la clé API, vous devez enregistrer votre compte sur OpenAI.com. Après enregistrer, allez sur votre compte OpenAI et recherchez «Afficher les touches API», dans cette page, vous pouvez créer votre apikey. À partir de votre page de compte, vous pouvez trouver la page Paramètres où est placé votre identifiant d'organisation.
Vous pouvez utiliser cette bibliothèque via le package NuGet Devextremeai
Note importante que cette bibliothèque prend en charge l'iconfiguration du point net et l'injection de dépendance afin qu'il puisse lire Apikey et l'organisation d'eux au lieu du codage dur dans le code source. (Veuillez ne pas code dur apikey et ID d'organisation dans le code source et ne les poussez pas vers GIT ou aucun référentiel source).
Cette bibliothèque adhère pleinement aux spécifications OpenAI et son modèle d'objet est le même d'OpenAI (avec des particularités dotnet). Cette bibliothèque implémente également les codes d'erreur OpenAI qui ne sont pas documentés dans la référence API d'OpenAI.
Installez le package NuGet Devextremeai dans Program.cs Ajouter ceci en utilisant:
using DevExtremeAI . AspNet ; Cette utilisation vous permet d'utiliser l'extension de service ASP.NET. Avec le Builder WebApplication maintenant, vous pouvez utiliser la méthode AddDevExtremeAI() qui enregistre tout ce dont vous avez besoin avec l'injection de dépendance.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI ( ) ; Cette surcharge AddDevExtremeAI() recherche l'apikey dans AppSettings.json ou appsettings.development.json afin que vous puissiez les éviter de les coder dans le code source. Je vous suggère d'utiliser des secrets d'action GitHub.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < DevExtremeAI . Settings . CurrentEnvironmentData > ( ) ;De cette façon, la clé API et l'ID d'organisation sont lus à partir de variables d'environnement nommées Openai_organisation et OpenAI_API_KEY.
var builder = WebApplication . CreateBuilder ( args ) ;
// Add services to the container.
builder . Services . AddDevExtremeAI < MyEnvironmentReader > ( ) ; Dans l'exemple ci-dessus, vous pouvez utiliser la surcharge AddDevExtremeAI<TEnvironment> qui nécessite un type d'objet qui implémente l'interface DevExtremeAI.Settings.IAIEnvironment afin que vous puissiez lire Apikey ou ID d'organisation d'où vous voulez. (Votre mise en œuvre de IAIEnvironment sera utilisée à Singleton Way).
Enfin, vous pouvez utiliser la surcharge AddDevExtremeAI(string apiKey, string? organization) et passer les valeurs d'ID APIKEY et d'organisation en cours où vous voulez (veuillez les lire d'où vous voulez, mais ne cachez pas le code source dans aucun code source).
C'est tout! À partir de maintenant, vous pouvez utiliser OpenAI dans votre projet ASP.NET via une injection de dépendance.
Maintenant, vous pouvez déclarer le constructeur de votre contrôleur et amis avec DevExtremeAI.OpenAIClient.IOpenAIAPIClient argument comme ceci:
private DevExtremeAI . OpenAIClient . IOpenAIAPIClient _openAIApiClient ;
public TestAIController ( DevExtremeAI . OpenAIClient . IOpenAIAPIClient openAIApiClient )
{
_openAIApiClient = openAIApiClient ;
}Un exemple d'utilisation de l'iopénaineiaplient dans le contrôleur ou l'apicontroller pourrait être:
// 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 } " ;
}Remarque Vous pouvez trouver la documentation complète de l'API et du DTO dans Intellisense, des exemples ci-dessous ou une référence API officielle OpenAI car sont les mêmes.
Si vous utilisez un noyau ASP.NET extérieur ou sans Hostbuilder ou injection de dépendance comme dans l'application Console ou la bibliothèque DOTNET, vous pouvez utiliser des méthodes d'usine.
Dans ce scénario, vous avez besoin du même package Nuget Package Devextremeai
Après avoir installé ce package, vous pouvez utiliser la bibliothèque Devextremeai.
Dans programme.cs ad this using:
using DevExtremeAI . OpenAIClient ; Maintenant, vous pouvez utiliser l' OpenAIClientFactory
À l'intérieur de votre bibliothèque ou de la méthode principale de l'application de console, vous pouvez créer un instace d' IOpenAIAPIClient comme dans cet exemple:
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 ) ;
}
} La méthode d'usine ( CreateInstance ) Dans l'exemple ci-dessus, utilisez la surcharge sans arguments, cette surcharge recherche ApikeyValue et Organisation Ind dans AppSettings.json ou appsettings.development.json. Les noms de clés AppSettings doivent être openai_api_key et openai_organisation.
var openAIClient = OpenAIClientFactory . CreateInstance < CurrentEnvironmentData > ( ) ; //create an instance o IOpenAIAPIClient var openAIClient = OpenAIClientFactory . CreateInstance ( new CurrentEnvironmentData ( ) ) ; //create an instance o IOpenAIAPIClient De cette façon, la clé API et l'ID d'organisation sont lus à partir de variables d'environnement nommées Openai_organisation et OpenAI_API_KEY.
var openAIClient = OpenAIClientFactory . CreateInstance < MyEnvironmentValueReader > ( ) ; //create an instance o IOpenAIAPIClient Vous pouvez utiliser la surcharge qui nécessite une instance de DevExtremeAI.Settings.IAIEnvironment implémentée par vous-même afin que vous puissiez lire la valeur Apikey et l'ID d'organisation d'où vous voulez.
Vous pouvez également utiliser la surcharge qui reqire la valeur Apikey et l'ID d'organisation comme arguments (mais les plaidoyers ne les cocodent pas dans le code source).
Cependant, ne cachez pas Hardcode Apikey et ID d'organisation dans un fichier (code source ou fichiers AppSettings), n'appuyez pas dans le référentiel source dans les secrets appsettings.development.json et utilisez des secrets d'action GitHub.
Toutes les méthodes de DevExtremeAI.OpenAIClient.IOpenAIAPIClient sont les mêmes d'Openai, vous pouvez donc utiliser le
Référence officielle de l'API OpenAI. Les objets de demande DTO sont également décrits avec une documentation .NET standard afin que vous puissiez utiliser Intellisese. Toutes les méthodes d' IOpenAIAPIClient sont présentes dans les tests d'intégration Xunit, donc vous pouvez les regarder là-bas (répertoire devextremeailibtest).
Chaque réponse est de type DevExtremeAI.OpenAIDTO.ResponseDTO<T> . Ce type a trois propriétés:
ErrorResponse qui contient les détails d'erreur renvoyés par l'API OpenAI en cas de problème.HasError , c'est vrai si une erreur s'est produite sinon est fausse.OpenAIResponse qui est la même de la réponse OpenAI.Cette version prend en charge l'API OpenAI et les modèles d'objets se plaintes de GPT-4 et GPT-3.5-turbo. Dans cette version OpenAI API, une API a été obsolète et un modèle d'objet a changé. Vous pouvez voir le modèle d'objet mis à jour dans le schéma UML. Pour l'API de chat maintenant, vous pouvez utiliser des objets qui héritent de la classe de base «ChatCompletionRoleRequestMessage».
Object ChatCompletionRoleStringContentMessage est pour la compatibilité vers l'arrière uniquement. Avec cet objet, vous pouvez définir la propriété de rôle comme l'ancienne version du modèle d'objet.
Par exemple, un vieux code comme ceci:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRequestMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Peut être mis à jour de cette manière:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionRoleStringContentMessage ( )
{
Role = ChatCompletionMessageRoleEnum . User ,
Content = " Who are you? "
} ) ;Les changements sont:
Pour mettre à jour entièrement la dernière mise à jour de version doit être effectuée de cette manière:
CreateChatCompletionRequest createCompletionRequest = new CreateChatCompletionRequest ( ) ;
createCompletionRequest . Model = " gpt-3.5-turbo-1106 " ;
createCompletionRequest . Messages . Add ( new ChatCompletionUserContentMessage ( )
{
Content = " Who are you? "
} ) ;Les changements sont:
Sont couverts tous les types d'API Openai:
Vous pouvez trouver les exemples de chaque API dans le projet d'unité de test. Si vous le souhaitez, vous pouvez contribuer à étendre ce fichier ReadMe avec des exemples;)
Copyright (C) 2023 Andrea Piccioni
L'autorisation est accordée gratuitement à toute personne qui obtient une copie de ce logiciel et des fichiers de documentation associés (le "logiciel"), pour traiter le logiciel sans restriction, y compris sans limiter les droits d'utilisation, de copie, de modification, de fusion, de publication, de distribution, de sublince et / ou de vendre des copies des conditions suivantes.
L'avis de droit d'auteur ci-dessus et le présent avis d'autorisation sont inclus dans toutes les copies ou des parties substantielles du logiciel.
Le logiciel est fourni "tel quel", sans garantie d'aucune sorte, express ou implicite, y compris, mais sans s'y limiter, les garanties de qualité marchande, d'adéquation à un usage particulier et de non-contrefaçon. En aucun cas, les auteurs ou les détenteurs de droits d'auteur ne seront pas responsables de toute réclamation, dommage ou autre responsabilité, que ce soit dans une action de contrat, de délit ou autre, découlant de, hors du logiciel ou de l'utilisation ou d'autres relations dans le logiciel.