Fonte de dados: OpenAI


Descontinuado: esta fonte de dados está descontinuada. Use a fonte de dados \Temma\Datasources\Ai com um DSN no formato ai://openai/MODEL#API_KEY. Veja a documentação completa sobre inteligência artificial.

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."