Una biblioteca simple de peso ligero que envuelve la API de IA abierta con soporte para la inyección de dependencia.
Las características compatibles incluyen:
Para obtener un tutorial de video de una aplicación web Blazor construida en esta biblioteca, consulte:
Esto se implementa en las páginas de GitHub y está disponible en: Open AI UI. La fuente de la aplicación web Blazor está en Whetstone.Chatgpt.Blazor.App.
Los ejemplos incluyen:
services . Configure < ChatGPTCredentials > ( options =>
{
options . ApiKey = " YOURAPIKEY " ;
options . Organization = " YOURORGANIZATIONID " ;
} ) ;Usar:
services . AddHttpClient ( ) ;o:
services . AddHttpClient < IChatGPTClient , ChatGPTClient > ( ) ; Configurar el servicio IChatGPTClient :
services . AddScoped < IChatGPTClient , ChatGPTClient > ( ) ; Las finalizaciones de chat son un tipo especial de finalización que están optimizados para el chat. Están diseñados para ser utilizados en un contexto de conversación.
Esto muestra un uso del modelo Turbo GPT-3.5.
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 ( ) ) ;Los modelos GPT-4 también se pueden usar siempre que su cuenta haya recibido acceso a la beta limitada.
Las terminaciones usan modelos para responder una amplia variedad de tareas, incluidas, entre otros, la clasificación, el análisis de sentimientos, responder preguntas, etc.
This shows a direct useage of the gpt-3.5-turbo-instruct model without any prompts.
Please note, CreateCompletionAsync is obsolete. Use ChatGPTChatCompletionRequest , ChatGPTChatCompletionResponse , and the CreateChatCompletionAsync method instead.
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 no es determinista. Una de las pruebas de la muestra anteriormente devuelta:
El clima puede variar mucho dependiendo de la ubicación. En general, puede esperar que las temperaturas sean moderadas y el clima sean cómodos, pero siempre es mejor verificar el pronóstico de su área específica.
La aplicación de consola AC# que usa finalizaciones está disponible en:
Whetstone.chatgpt.commandlinebot (chatgpt-marv)
Esta muestra incluye:
Cómo crear una carga de un nuevo archivo de ajuste fino.
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 ) ;
} Una vez que se haya creado el archivo, obtenga el FILEID y haga referencia al crear un nuevo ajuste fino.
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 ;Procesar la solicitud de ajuste fino llevará algún tiempo. Una vez que termine, el estado informará "tuvió éxito" y está listo para ser utilizado en una solicitud de finalización.
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 ( ) ) ; Aquí hay un ejemplo que genera una imagen 1024x1024.
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 ) ;
} Es un ejemplo que transcribe un archivo de audio usando el susurro.
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 ) ;