Instrucciones

La manipulación de instrucciones es la forma principal en la que tú, como desarrollador de apps, influyes en el resultado de los modelos de IA generativa. Por ejemplo, cuando usas los LLM, puedes crear instrucciones que influyan en el tono, el formato, la longitud y otras características de las respuestas de los modelos.

Genkit se diseñó con la premisa de que las instrucciones son código. Escribes y mantienes tus instrucciones en archivos fuente, haces un seguimiento de los cambios en ellos con el mismo sistema de control de versión que usas para tu código y las implementas junto con el código que llama a tus modelos de IA generativa.

La mayoría de los desarrolladores descubrirán que la biblioteca Dotprompt incluida satisface sus necesidades para trabajar con instrucciones en Genkit. Sin embargo, también se admiten enfoques alternativos trabajando directamente con las instrucciones.

Cómo definir instrucciones

La función auxiliar generate() de Genkit acepta instrucciones de cadena y puedes llamar a los modelos de esta manera para casos de uso directos.

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

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

En la mayoría de los casos, deberás incluir en tu instrucción algunas entradas que proporcionó el cliente. Podrías definir una función para renderizarlos de esta manera.

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'),
});

Una deficiencia de definir mensajes en tu código es que las pruebas requieren ejecutarlas como parte de un flujo. Para facilitar una iteración más rápida, Genkit proporciona un servicio para definir tus instrucciones y ejecutarlas en la IU para desarrolladores.

Usa la función definePrompt para registrar tus instrucciones con 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 }
    });
  }
);

Una acción de instrucción define una función que muestra un objeto GenerateRequest que se puede usar con cualquier modelo. De manera opcional, también puedes definir un esquema de entrada para la instrucción, que es análogo al esquema de entrada de un flujo. Las instrucciones también pueden definir cualquiera de las opciones de configuración del modelo comunes, como la temperatura o la cantidad de tokens de salida.

Puedes usar esta instrucción en tu código con la función auxiliar renderPrompt(). Proporciona las variables de entrada que espera la instrucción y el modelo al que llama.

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

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

En la IU para desarrolladores de Genkit, puedes ejecutar cualquier instrucción que hayas definido de esta manera. Esto te permite experimentar con instrucciones individuales fuera del alcance de los flujos en los que se podrían usar.

Punto

Genkit incluye la biblioteca de Dotprompt, que agrega funciones adicionales a las instrucciones.

  • Cargando instrucciones de .prompt archivos de origen
  • Plantillas basadas en Handlebars
  • Compatibilidad con plantillas de instrucciones de varios turnos y contenido multimedia
  • Definiciones concisas de esquemas de entrada y salida
  • Uso fluido con generate()