Fuente de datos: OpenAI
1Presentación
OpenAI ofrece grandes modelos de lenguaje (LLMs) accesibles a través de una API, que permiten generar texto, responder preguntas, traducir, resumir textos y mucho más.
La fuente de datos \Temma\Datasources\OpenAi ofrece un acceso sencillo a la API de Chat Completions de OpenAI.
Si has configurado correctamente los parámetros de conexión a OpenAI, Temma crea automáticamente un objeto de tipo \Temma\Datasources\OpenAi, con el que puedes consultar modelos de lenguaje. Por convención, supondremos que has llamado a esta conexión openai en el archivo etc/temma.php (consulta la documentación de configuración).
En los controladores, la conexión a OpenAI está disponible escribiendo:
$openai = $this->openai;
En otros objetos gestionados por el componente de inyección de dependencias, la conexión a OpenAI es accesible escribiendo:
$openai = $loader->dataSources->openai;
$openai = $loader->dataSources['openai'];
2Configuración
Para usar la API de OpenAI, necesitas una clave de API.
En el archivo etc/temma.php (consulta la documentación de configuración), declaras el DSN (Data Source Name) usado para conectarte a OpenAI.
El DSN de conexión a OpenAI se escribe como:
openai://chat/MODEL/API_KEY
Con MODEL el identificador del modelo de lenguaje a usar (por ejemplo, gpt-4o, gpt-4-turbo, etc.) y API_KEY tu clave de API de OpenAI.
Ejemplo de configuración en etc/temma.php:
<?php
return [
'application' => [
'dataSources' => [
'openai' => 'openai://chat/gpt-4o/sk-proj-xxxxxxxxxxxxx',
],
],
];
3Llamadas unificadas
3.1Acceso tipo array
// enviar un prompt y obtener la respuesta
$response = $openai['¿Cuál es la capital de Francia?'];
3.2Método avanzado
// enviar un prompt y obtener la respuesta
$response = $openai->read('¿Cuál es la capital de Francia?');
// con un valor por defecto en caso de error
$response = $openai->read(
'Traduce al francés: Hola mundo',
'Bonjour le monde'
);
// con una función de retorno en caso de error
$response = $openai->read(
'Traduce al francés: Hola mundo',
function() {
return 'Valor alternativo';
}
);
4Opciones
Los métodos read() y get() aceptan un tercer parámetro $options, un array asociativo para configurar la llamada:
- system: (string) Prompt de sistema que define el comportamiento del asistente.
- messages: (array) Array de mensajes anteriores para una conversación de varios turnos (ver la siguiente sección).
- temperature: (float) Temperatura de muestreo, entre 0 y 2. Los valores más bajos hacen las respuestas más deterministas, los valores más altos las hacen más aleatorias.
- max_tokens: (int) Número máximo de tokens en la respuesta.
Ejemplo:
$response = $openai->read('Explica la fotosíntesis', null, [
'system' => 'Eres un profesor de biología. Responde de forma concisa.',
'temperature' => 0.3,
'max_tokens' => 500,
]);
5Conversación de varios turnos
Es posible mantener conversaciones de varios turnos proporcionando el historial de mensajes anteriores mediante la opción messages. Cada mensaje es un array asociativo que contiene las claves role (user o assistant) y content.
Ejemplo:
$response = $openai->read('¿Y cuál es la capital de Italia?', null, [
'system' => 'Eres un asistente de geografía.',
'messages' => [
['role' => 'user', 'content' => '¿Cuál es la capital de Francia?'],
['role' => 'assistant', 'content' => 'La capital de Francia es París.'],
],
]);
// $response contiene "La capital de Italia es Roma."