Eine einfache leichte Bibliothek, die die Open AI-API mit Unterstützung für die Abhängigkeitsinjektion umhüllt.
Unterstützte Funktionen umfassen:
Für eine Video -Vorgehensweise einer Blazor -Web -App, die in dieser Bibliothek erstellt wird, finden Sie unter:
Dies wird auf Github -Seiten eingesetzt und erhältlich unter: Open AI UI. Quelle für die Blazor -Web -App finden Sie unter whetstone.chatgpt.blazor.app.
Beispiele sind:
services . Configure < ChatGPTCredentials > ( options =>
{
options . ApiKey = " YOURAPIKEY " ;
options . Organization = " YOURORGANIZATIONID " ;
} ) ;Verwenden:
services . AddHttpClient ( ) ;oder:
services . AddHttpClient < IChatGPTClient , ChatGPTClient > ( ) ; Konfigurieren Sie IChatGPTClient Service:
services . AddScoped < IChatGPTClient , ChatGPTClient > ( ) ; Die CHAT -Abschlüsse sind eine spezielle Art von Fertigstellung, die für den Chat optimiert sind. Sie sind so konzipiert, dass sie in einem Konversationskontext verwendet werden.
Dies zeigt eine Verwendung des GPT-3,5-Turbo-Modells.
using Whetstone . ChatGPT ;
using Whetstone . ChatGPT . Models ;
. . .
var gptRequest = new ChatGPTChatCompletionRequest
{
Model = ChatGPT35Models . Turbo ,
Messages = new List < ChatGPTChatCompletionMessage > ( )
{
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . System , " You are a helpful assistant. " ) ,
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . User , " Who won the world series in 2020? " ) ,
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . Assistant , " The Los Angeles Dodgers won the World Series in 2020. " ) ,
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . User , " Where was it played? " )
} ,
Temperature = 0.9f ,
MaxTokens = 100
} ;
using IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) ;
var response = await client . CreateChatCompletionAsync ( gptRequest ) ;
Console . WriteLine ( response ? . GetCompletionText ( ) ) ;GPT-4-Modelle können auch verwendet werden, sofern Ihr Konto Zugriff auf die begrenzte Beta erhalten hat.
Abschlüsse verwenden Modelle, um eine Vielzahl von Aufgaben zu beantworten, einschließlich, aber nicht beschränkt auf Klassifizierung, Stimmungsanalyse, Beantwortung von Fragen usw.
Dies zeigt eine direkte Verwendung des GPT-3,5-Turbo-Instrukturmodells ohne Eingabeaufforderungen.
Bitte beachten Sie, dass CreateCompletionaSync veraltet ist. Verwenden Sie stattdessen ChatgptchatCompletionRequest , ChatgptchatCompletionResponse und die Methode createChatCompletionAsync .
using Whetstone . ChatGPT ;
using Whetstone . ChatGPT . Models ;
. . .
var gptRequest = new ChatGPTCompletionRequest
{
Model = ChatGPT35Models . Gpt35TurboInstruct ,
Prompt = " How is the weather? "
} ;
using IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) ;
var response = await client . CreateCompletionAsync ( gptRequest ) ;
Console . WriteLine ( response . GetCompletionText ( ) ) ;GPT-3.5 ist nicht deterministisch. Einer der Testläufe der obigen Probe wurde zurückgegeben:
Das Wetter kann je nach Ort stark variieren. Im Allgemeinen können Sie erwarten, dass die Temperaturen mittelschwer und das Klima bequem sind, aber es ist immer am besten, die Prognose für Ihren spezifischen Bereich zu überprüfen.
AC# -Konsole -Anwendung, die Fertigstellungen verwendet, ist verfügbar unter:
Whetstone.chatgpt.CommandlineBot (Chatgpt-Marv)
Dieses Beispiel enthält:
So erstellen Sie eine neue Feinabstimmungsdatei hoch.
List < ChatGPTTurboFineTuneLine > tuningInput = new ( )
{
new ChatGPTTurboFineTuneLine ( )
{
Messages = new List < ChatGPTTurboFineTuneLineMessage > ( )
{
new ( ChatGPTMessageRoles . System , " Marv is a factual chatbot that is also sarcastic. " ) ,
new ( ChatGPTMessageRoles . User , " What's the capital of France? " ) ,
new ( ChatGPTMessageRoles . Assistant , " Paris, as if everyone doesn't know that already. " )
} ,
} ,
new ChatGPTTurboFineTuneLine ( )
{
Messages = new List < ChatGPTTurboFineTuneLineMessage > ( )
{
new ( ChatGPTMessageRoles . System , " Marv is a factual chatbot that is also sarcastic. " ) ,
new ( ChatGPTMessageRoles . User , " Who wrote 'Romeo and Juliet'? " ) ,
new ( ChatGPTMessageRoles . Assistant , " Oh, just some guy named William Shakespeare. Ever heard of him? " )
} ,
} ,
. . .
} ;
byte [ ] tuningText = tuningInput . ToJsonLBinary ( ) ;
string fileName = " marvin.jsonl " ;
ChatGPTUploadFileRequest ? uploadRequest = new ChatGPTUploadFileRequest
{
File = new ChatGPTFileContent
{
FileName = fileName ,
Content = tuningText
}
} ;
ChatGPTFileInfo ? newTurboTestFile ;
using ( IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) )
{
newTurboTestFile = await client . UploadFileAsync ( uploadRequest ) ;
} Sobald die Datei erstellt wurde, erhalten Sie die DateiId und verweisen Sie sie beim Erstellen einer neuen Feinabstimmung.
IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) ;
uploadedFileInfo = await client . UploadFileAsync ( uploadRequest ) ;
var fileList = await client . ListFilesAsync ( ) ;
var foundFile = fileList ? . Data ? . First ( x => x . Filename . Equals ( " marvin.jsonl " ) ) ;
ChatGPTCreateFineTuneRequest tuningRequest = new ChatGPTCreateFineTuneRequest
{
TrainingFileId = foundFile ? . Id ,
Model = " gpt-3.5-turbo-1106 "
} ;
ChatGPTFineTuneJob ? tuneResponse = await client . CreateFineTuneAsync ( tuningRequest ) ;
string ? fineTuneId = tuneResponse ? . Id ;Die Bearbeitung der Feinabstimmungsanforderung dauert einige Zeit. Sobald es beendet ist, wird der Status "erfolgreich" gemeldet und ist bereit, in einer Abschlussanfrage verwendet zu werden.
using IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) ;
ChatGPTFineTuneJob ? tuneResponse = await client . RetrieveFineTuneAsync ( " FINETUNEID " ) ;
if ( tuneResponse . Status . Equals ( " succeeded " ) )
{
var gptRequest = new ChatGPTChatCompletionRequest
{
Model = " FINETUNEID " ,
Messages = new List < ChatGPTChatCompletionMessage > ( )
{
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . System , " You are a helpful assistant. " ) ,
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . User , " Who won the world series in 2020? " ) ,
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . Assistant , " The Los Angeles Dodgers won the World Series in 2020. " ) ,
new ChatGPTChatCompletionMessage ( ChatGPTMessageRoles . User , " Where was it played? " )
} ,
Temperature = 0.9f ,
MaxTokens = 100
} ;
var response = await client . CreateChatCompletionAsync ( gptRequest ) ;
Console . WriteLine ( response ? . GetCompletionText ( ) ) ; Hier ist ein Beispiel, das ein 1024x1024 -Bild generiert.
ChatGPTCreateImageRequest imageRequest = new ( )
{
Prompt = " A sail boat " ,
Size = CreatedImageSize . Size1024 ,
ResponseFormat = CreatedImageFormat . Base64
} ;
using IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) ;
ChatGPTImageResponse ? imageResponse = await client . CreateImageAsync ( imageRequest ) ;
var imageData = imageResponse ? . Data ? [ 0 ] ;
if ( imageData != null )
{
byte [ ] ? imageBytes = await client . DownloadImageAsync ( imageData ) ;
} Sie ist ein Beispiel, das eine Audiodatei mit dem Flüsterung transkribiert.
string audioFile = @"audiofilestranscriptiontest.mp3" ;
byte [ ] fileContents = File . ReadAllBytes ( audioFile ) ;
ChatGPTFileContent gptFile = new ChatGPTFileContent
{
FileName = audioFile ,
Content = fileContents
} ;
ChatGPTAudioTranscriptionRequest ? transcriptionRequest = new ChatGPTAudioTranscriptionRequest
{
File = gptFile
} ;
using IChatGPTClient client = new ChatGPTClient ( " YOURAPIKEY " ) ;
ChatGPTAudioResponse ? audioResponse = await client . CreateTranscriptionAsync ( transcriptionRequest , true ) ;
Console . WriteLine ( audioResponse ? . Text ) ;