Comandos

A manipulação de comandos é a principal maneira de influenciar a saída dos modelos de IA generativa como desenvolvedor de apps. Por exemplo, ao usar LLMs, é possível criar comandos que influenciam o tom, o formato, a duração e outras características das respostas dos modelos.

O Genkit foi projetado com base na premissa de que solicitações são código. Você escreve e mantém seus comandos em arquivos de origem, rastreia as alterações usando o mesmo sistema de controle de versões que usa para o código e os implanta com o código que chama seus modelos de IA generativa.

A maioria dos desenvolvedores descobrirá que a biblioteca Dotprompt incluída atende às necessidades deles para trabalhar com comandos no Genkit. No entanto, abordagens alternativas também podem ser usadas com comandos.

Como definir comandos

A função auxiliar generate() do Genkit aceita comandos de string, e é possível chamar modelos dessa maneira para casos de uso simples.

import { generate } from '@genkit-ai/ai';

generate({
  model: 'googleai/gemini-1.5-flash-latest',
  prompt: 'You are a helpful AI assistant named Walt.',
});

Na maioria dos casos, você vai precisar incluir algumas informações fornecidas pelo cliente no comando. Você pode definir uma função para renderizá-los dessa forma.

function helloPrompt(name: string) {
  return `You are a helpful AI assistant named Walt. Say hello to ${name}.`;
}

generate({
  model: 'googleai/gemini-1.5-flash-latest',
  prompt: helloPrompt('Fred'),
});

Uma desvantagem de definir comandos no código é que o teste exige a execução deles como parte de um fluxo. Para facilitar uma iteração mais rápida, o Genkit oferece um recurso para definir seus comandos e executá-los na interface do desenvolvedor.

Use a função definePrompt para registrar seus comandos com o Genkit.

import { definePrompt } from '@genkit-ai/ai';
import z from 'zod';

export const helloPrompt = definePrompt(
  {
    name: 'helloPrompt',
    inputSchema: z.object({ name: z.string() }),
  },
  async (input) => {
    const promptText = `You are a helpful AI assistant named Walt.
    Say hello to ${input.name}.`;

    return {
      messages: [{ role: 'user', content: [{ text: promptText }] }],
      config: { temperature: 0.3 }
    });
  }
);

Uma ação de solicitação define uma função que retorna um objeto GenerateRequest que pode ser usado com qualquer modelo. Também é possível definir um esquema de entrada para o comando, que é análogo ao esquema de entrada de um fluxo. Os comandos também podem definir qualquer uma das opções comuns de configuração de modelo, como temperatura ou número de tokens de saída.

Use essa solicitação no seu código com a função auxiliar renderPrompt(). Forneça as variáveis de entrada esperadas pelo comando e o modelo a ser chamado.

import { generate, render } from '@genkit-ai/ai';

generate(
  renderPrompt({
    prompt: helloPrompt,
    input: { name: 'Fred' },
    model: 'googleai/gemini-1.5-flash-latest',
  })
);

Na interface do desenvolvedor do Genkit, você pode executar qualquer prompt definido dessa maneira. Isso permite testar comandos individuais fora do escopo dos fluxos em que eles podem ser usados.

Pontoprompt

O Genkit inclui a biblioteca Dotprompt, que adiciona mais funcionalidades às solicitações.

  • Carregando comandos de .prompt arquivos de origem
  • Modelos baseados em guidões
  • Suporte a modelos de comando multiturno e conteúdo multimídia
  • Definições de esquemas de entrada e saída concisas
  • Uso fluido com o generate()