Fonte de dados: OpenAI
1Apresentação
OpenAI fornece grandes modelos de linguagem (LLMs) acessíveis por meio de uma API, permitindo geração de texto, resposta a perguntas, tradução, resumo de textos e muito mais.
A fonte de dados \Temma\Datasources\OpenAi oferece acesso simplificado à API Chat Completions da OpenAI.
Se você configurou corretamente os parâmetros de conexão à OpenAI, o Temma cria automaticamente um objeto do tipo \Temma\Datasources\OpenAi, com o qual você pode consultar modelos de linguagem. Por convenção, vamos supor que você nomeou essa conexão openai no arquivo etc/temma.php (veja a documentação de configuração).
Nos controladores, a conexão à OpenAI está disponível da seguinte forma:
$openai = $this->openai;
Nos demais objetos gerenciados pelo componente de injeção de dependências, a conexão à OpenAI é acessível da seguinte forma:
$openai = $loader->dataSources->openai;
$openai = $loader->dataSources['openai'];
2Configuração
Para usar a API da OpenAI, você precisa de uma chave de API.
No arquivo etc/temma.php (veja a documentação de configuração), você declara o DSN (Data Source Name) usado para se conectar à OpenAI.
O DSN de conexão à OpenAI é escrito como:
openai://chat/MODEL/API_KEY
Com MODEL o identificador do modelo de linguagem a ser usado (por exemplo, gpt-4o, gpt-4-turbo, etc.) e API_KEY sua chave de API da OpenAI.
Exemplo de configuração no arquivo etc/temma.php:
<?php
return [
'application' => [
'dataSources' => [
'openai' => 'openai://chat/gpt-4o/sk-proj-xxxxxxxxxxxxx',
],
],
];
3Chamadas unificadas
3.1Acesso tipo array
// envia um prompt e recebe a resposta
$response = $openai['What is the capital of France?'];
3.2Método avançado
// envia um prompt e recebe a resposta
$response = $openai->read('What is the capital of France?');
// com um valor padrão em caso de erro
$response = $openai->read(
'Translate to French: Hello world',
'Bonjour le monde'
);
// com uma função de callback em caso de erro
$response = $openai->read(
'Translate to French: Hello world',
function() {
return 'Fallback value';
}
);
4Opções
Os métodos read() e get() aceitam um terceiro parâmetro $options, um array associativo para configurar a chamada:
- system: (string) Prompt de sistema que define o comportamento do assistente.
- messages: (array) Array de mensagens anteriores para conversas com múltiplos turnos (veja a próxima seção).
- temperature: (float) Temperatura de amostragem, entre 0 e 2. Valores mais baixos tornam as respostas mais determinísticas, valores mais altos as tornam mais aleatórias.
- max_tokens: (int) Número máximo de tokens na resposta.
Exemplo:
$response = $openai->read('Explain photosynthesis', null, [
'system' => 'You are a biology teacher. Answer concisely.',
'temperature' => 0.3,
'max_tokens' => 500,
]);
5Conversa com múltiplos turnos
É possível realizar conversas com múltiplos turnos fornecendo o histórico de mensagens anteriores por meio da opção messages. Cada mensagem é um array associativo contendo as chaves role (user ou assistant) e content.
Exemplo:
$response = $openai->read('And the capital of Italy?', null, [
'system' => 'You are a geography assistant.',
'messages' => [
['role' => 'user', 'content' => 'What is the capital of France?'],
['role' => 'assistant', 'content' => 'The capital of France is Paris.'],
],
]);
// $response contém "The capital of Italy is Rome."