Requisitos para usar la API:
- Php 8.0 o superior
- Librería openai-php client
- API Key de OpenAI de tu cuenta de OpenAI
- Haber registrado un Medio de Pago en OpenAI en OpenAI Platform.
- El uso de esta API conlleva un costo.
Aquí encontraras la Lista de precios actual.
A modo de resumen, estos son los precios en dolares.
Model Prompt Completion
8K context $0.03 / 1K tokens $0.06 / 1K tokens
32K context $0.06 / 1K tokens $0.12 / 1K tokens
Múltiples modelos, cada uno con diferentes capacidades y puntos de precio. Los precios son por 1.000 tokens.
Puedes pensar en los tokens como piezas de palabras, donde 1000 tokens equivalen a unas 750 palabras.
Este párrafo es de 35 tokens.
OpenAI PHP es un cliente de API de PHP mantenido por la comunidad que permite interactuar con la API de OpenAI.
A la fecha (25/05/2023) es lo mejorcito que hay.
-
- Instalar la librería mediante Composer:
composer require openai-php/client
- Instalar esta librería para poder usar los archivos .env para guardar la API-KEY de OpenAI
composer require vlucas/phpdotenv
- Crear un archivo oculto .env con este contenido y guardar en él tu API Key
// NOTA IMPORTANTE: Por razones de seguridad, SIEMPRE este archivo .env debe estar en el .gitignore
OPENAI_API_KEY="tu-api-key-de-open-ai"
Una vez tenemos instaladas las dos librerías necesarias, y nuestro archivo .env configurado, podemos usar la API:
require_once __DIR__ . '/vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
$open_ai_key = $_ENV['OPENAI_API_KEY']; // esto sale del archivo .env ,poner tu API KEY en la clave 'OPENAI_API_KEY' de tu .env
$client = OpenAI::client($open_ai_key);
En esta instancia tendremos nuestro cliente en la variable php $clien
De aqui en mas, ya se podrá interactuar de manera FULL con los Modelos de Lenguaje que OpenAI pone a disposición.
Esta sería la manera mas simplificada.
$yourApiKey = getenv('Tu_API-KEY_DE_OPENAI');
$client = OpenAI::client($yourApiKey);
$result = $client->completions()->create([
'model' => 'text-davinci-003',
'prompt' => 'Quisiera saber que son los kpi',
]);
echo $result['choices'][0]['text'];
Esto devolería:
KPI es un acrónimo que se traduce al español como Indicador Clave de
Desempeño, y en inglés es conocido como Key Performance Indicator.
Los KPI son métricas cuantitativas que...
$response = $client->completions()->create([
'model' => 'text-davinci-003',
'prompt' => 'Say this is a test',
'max_tokens' => 6,
'temperature' => 0
]);
$response->id; // 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7'
$response->object; // 'text_completion'
$response->created; // 1589478378
$response->model; // 'text-davinci-003'
foreach ($response->choices as $result) {
$result->text; // '\n\nThis is a test'
$result->index; // 0
$result->logprobs; // null
$result->finishReason; // 'length' or null
}
$response->usage->promptTokens; // 5,
$response->usage->completionTokens; // 6,
$response->usage->totalTokens; // 11
$response->toArray(); // ['id' => 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7', ...]
$response = $client->fineTunes()->create([
'training_file' => 'file-ajSREls59WBbvgSzJSVWxMCB',
'validation_file' => 'file-XjSREls59WBbvgSzJSVWxMCa',
'model' => 'curie',
'n_epochs' => 4,
'batch_size' => null,
'learning_rate_multiplier' => null,
'prompt_loss_weight' => 0.01,
'compute_classification_metrics' => false,
'classification_n_classes' => null,
'classification_positive_class' => null,
'classification_betas' => [],
'suffix' => null,
]);
$response->id; // 'ft-AF1WoRqd3aJAHsqc9NY7iL8F'
$response->object; // 'fine-tune'
// ...
$response->toArray(); // ['id' => 'ft-AF1WoRqd3aJAHsqc9NY7iL8F', ...]
FINE TUNE
Fine Tune se refiere a el proceso de ajustar los parámetros de un modelo
para que se ajuste mejor a los datos. Los parámetros son los valores numéricos que determinan cómo se comporta el modelo y
produce resultados. Por ejemplo, en un modelo de regresión lineal, los parámetros son la pendiente y la intersección de
la línea que mejor se ajusta a los puntos de datos.
Se puede obtener la lista de todos los modelos de la siguiente manera:
################## RECUPERO LA LISTA DE MODELOS ####################
$response = $client->models()->list();
$response->object; // 'list'
foreach ($response->data as $result) {
$result->id; // 'text-davinci-003'
$result->object; // 'model'
// ...
}
$response->toArray();
// Recupera una Instancia de Modelo y proporciona información básica sobre el Modelo,
// como el Propietario y los Permisos.
$response = $client->models()->retrieve('text-davinci-003');
$response->id; // 'text-davinci-003'
$response->object; // 'model'
$response->created; // 1642018370
$response->ownedBy; // 'openai'
$response->root; // 'text-davinci-003'
$response->parent; // null
foreach ($response->permission as $result) {
$result->id; // 'modelperm-7E53j9OtnMZggjqlwMxW4QG7'
$result->object; // 'model_permission'
$result->created; // 1664307523
$result->allowCreateEngine; // false
$result->allowSampling; // true
$result->allowLogprobs; // true
$result->allowSearchIndices; // false
$result->allowView; // true
$result->allowFineTuning; // false
$result->organization; // '*'
$result->group; // null
$result->isBlocking; // false
}
$response->toArray(); // ['id' => 'text-davinci-003', ...]
################################# TRADUCIR MP3 DE UN IDIOMA A OTRO #############################
$response = $client->audio()->translate([
'model' => 'whisper-1',
'file' => fopen('german.mp3', 'r'), // ACA HAY QUE REEMPLAZAR german.mp3 por el nombre de tu archivo a traducir.
'response_format' => 'verbose_json',
]);
$response->task; // 'translate'
$response->language; // 'english'
$response->duration; // 2.95
$response->text; // 'Hello, how are you?'
foreach ($response->segments as $segment) {
$segment->index; // 0
$segment->seek; // 0
$segment->start; // 0.0
$segment->end; // 4.0
$segment->text; // 'Hello, how are you?'
$segment->tokens; // [50364, 2425, 11, 577, 366, 291, 30, 50564]
$segment->temperature; // 0.0
$segment->avgLogprob; // -0.45045216878255206
$segment->compressionRatio; // 0.7037037037037037
$segment->noSpeechProb; // 0.1076972484588623
$segment->transient; // false
}
$response->toArray(); // ['task' => 'translate', ...]
#######################################################################################################################
################################# CORRECTOR DE ORTOGRAFIA #############################
$response = $client->edits()->create([
'model' => 'text-davinci-edit-001',
'input' => 'What day of the wek is it?',
'instruction' => 'Fix the spelling mistakes',
]);
$response->object; // 'edit'
$response->created; // 1589478378
foreach ($response->choices as $result) {
$result->text; // 'What day of the week is it?'
$result->index; // 0
}
$response->usage->promptTokens; // 25,
$response->usage->completionTokens; // 32,
$response->usage->totalTokens; // 57
$response->toArray(); // ['object' => 'edit', ...]
########################################################################################
################################# CREA UNA IMAGEN EN BASE A UN PROMPT #############################
$response = $client->images()->create([
'prompt' => 'Una linda nutria de mar bebé',
'n' => 1,
'size' => '256x256',
'response_format' => 'url',
]);
$response->created; // 1589478378
foreach ($response->data as $data) {
$data->url; // 'https://oaidalleapiprodscus.blob.core.windows.net/private/...'
$data->b64_json; // null
}
$response->toArray(); // ['created' => 1589478378, data => ['url' => 'https://oaidalleapiprodscus...', ...]]
########################################################################################
################################# MODIFICA IMAGENES #############################
$response = $client->images()->edit([
'image' => fopen('image_edit_original.png', 'r'),
'mask' => fopen('image_edit_mask.png', 'r'),
'prompt' => 'Un salón interior iluminado por el sol con una piscina con un flamenco',
'n' => 1,
'size' => '256x256',
'response_format' => 'url',
]);
$response->created; // 1589478378
foreach ($response->data as $data) {
$data->url; // 'https://oaidalleapiprodscus.blob.core.windows.net/private/...'
$data->b64_json; // null
}
$response->toArray(); // ['created' => 1589478378, data => ['url' => 'https://oaidalleapiprodscus...', ...]]
########################################################################################
Si usas Composer, simplemente clona este proyecto e instala las dependencias:
composer install
Si no usas Composer:
Dentro de la carpeta resources, hay un archivo project.zip con el proyecto funcionando,con todas estas pruebas, listo para usar, solo crear el .env
por el de ustedes.
Copy@ Ale DC. May2024