Подсказки

Оперативное проектирование — это основной способ, с помощью которого вы, как разработчик приложений, можете влиять на результаты генеративных моделей ИИ. Например, при использовании LLM вы можете создавать подсказки, влияющие на тон, формат, продолжительность и другие характеристики ответов моделей.

Genkit разработан с учетом того, что подсказки — это код . Вы пишете и поддерживаете свои запросы в исходных файлах, отслеживаете их изменения с помощью той же системы контроля версий, которую вы используете для своего кода, и развертываете их вместе с кодом, который вызывает ваши генеративные модели ИИ.

Genkit имеет комплексный инструмент для разработки сложных подсказок под названием Dotprompt . Полный список функций см. в этой документации.

В этом документе показано несколько способов использования подсказок в Genkit, начиная с самых простых и заканчивая более сложными.

Определение подсказок

Вспомогательная функция generate() Genkit принимает строковые запросы, и вы можете вызывать модели таким образом для простых случаев использования.

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

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

В некоторых случаях вам потребуется включить в приглашение некоторые данные, предоставленные клиентом. Вы можете использовать литерал шаблона, чтобы отобразить их следующим образом:

const name = "Fred";
generate({
  model: 'googleai/gemini-1.5-flash-latest',
  prompt: `You are a helpful AI assistant named Walt. Say hello to ${name}.`,
});

Однако Genkit предоставляет возможность определять ваши запросы в стандартизированном формате, что облегчает создание более сложных шаблонов и быстрое тестирование в пользовательском интерфейсе разработчика.

Используйте функцию defineDotprompt чтобы определить эти структурированные подсказки.

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

const helloPrompt = defineDotprompt(
  {
    name: 'helloPrompt',
    model: 'googleai/gemini-1.5-flash-latest',
    input: {
      schema: z.object({ name: z.string() }),
    },
  },
  `You are a helpful AI assistant named Walt. Say hello to {{name}}`
);

А затем вызовите приглашение, используя методgenerate generate() :

helloPrompt.generate({ input: { name: 'Fred' } });
// Example output: Hello Fred! 👋 It's nice to meet you. How can I help you today? 😊

Как показано выше, приглашения, определенные таким образом, могут указывать структурированные входные данные, которые они принимают, через конфигурацию input.schema . Это позволяет вам типобезопасным способом гарантировать, что подсказки могут быть вызваны только с допустимыми наборами входных данных.

Dotprompts также могут указывать выходные данные, которые они будут передавать для вызова LLM в качестве директивы (либо как контекстное сообщение, либо как параметр API для LLM, которые поддерживают режим структурированного вывода). Это гарантирует, что вы либо получите соответствующий ответ, либо исключение, с которым вы сможете аккуратно справиться.

const outputSchema = z.object({
  short: z.string(),
  friendly: z.string(),
  likeAPirate: z.string(),
});

const threeGreetingsPrompt = defineDotprompt(
  {
    name: 'threeGreetingsPrompt',
    model: 'googleai/gemini-1.5-flash-latest',
    input: {
      schema: z.object({ name: z.string() }),
    },
    output: {
      format: 'json',
      schema: outputSchema,
    },    
  },
  `You are a helpful AI assistant named Walt. Say hello to {{name}}, write a response for each of the styles requested`
);

Затем вы можете вызвать generate по этому приглашению и работать со структурированным выводом в ответе:

const response = await (threeGreetingsPrompt.generate<typeof outputSchema>(
  { input: { name: 'Fred' } }
));

response.output()?.likeAPirate
// "Ahoy there, Fred!  May the winds be ever in your favor!"

В пользовательском интерфейсе разработчика Genkit вы можете запустить любое приглашение, определенное вами таким образом. Это позволяет вам экспериментировать с отдельными подсказками за пределами тех мест вашего кода, где они могут использоваться.

Пользовательский интерфейс разработчика, показывающий ответ JSON на вызов ThreeGreetingsPrompt.

Подсказка

См. страницу Dotprompt для получения дополнительных функций библиотеки Dotprompt, включая

  • Загрузка подсказок из исходных файлов .prompt
  • Шаблоны на основе рулей
  • Поддержка многоходовых шаблонов подсказок и мультимедийного контента.
  • Краткие определения схемы ввода и вывода.
,

Оперативное проектирование — это основной способ, с помощью которого вы, как разработчик приложений, можете влиять на результаты генеративных моделей ИИ. Например, при использовании LLM вы можете создавать подсказки, влияющие на тон, формат, продолжительность и другие характеристики ответов моделей.

Genkit разработан с учетом того, что подсказки — это код . Вы пишете и поддерживаете свои запросы в исходных файлах, отслеживаете их изменения с помощью той же системы контроля версий, которую вы используете для своего кода, и развертываете их вместе с кодом, который вызывает ваши генеративные модели ИИ.

Genkit имеет комплексный инструмент для разработки сложных подсказок под названием Dotprompt . Полный список функций см. в этой документации.

В этом документе показано несколько способов использования подсказок в Genkit, начиная с самых простых и заканчивая более сложными.

Определение подсказок

Вспомогательная функция generate() Genkit принимает строковые запросы, и вы можете вызывать модели таким образом для простых случаев использования.

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

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

В некоторых случаях вам потребуется включить в приглашение некоторые данные, предоставленные клиентом. Вы можете использовать литерал шаблона, чтобы отобразить их следующим образом:

const name = "Fred";
generate({
  model: 'googleai/gemini-1.5-flash-latest',
  prompt: `You are a helpful AI assistant named Walt. Say hello to ${name}.`,
});

Однако Genkit предоставляет возможность определять ваши запросы в стандартизированном формате, что облегчает создание более сложных шаблонов и быстрое тестирование в пользовательском интерфейсе разработчика.

Используйте функцию defineDotprompt чтобы определить эти структурированные подсказки.

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

const helloPrompt = defineDotprompt(
  {
    name: 'helloPrompt',
    model: 'googleai/gemini-1.5-flash-latest',
    input: {
      schema: z.object({ name: z.string() }),
    },
  },
  `You are a helpful AI assistant named Walt. Say hello to {{name}}`
);

А затем вызовите приглашение, используя методgenerate generate() :

helloPrompt.generate({ input: { name: 'Fred' } });
// Example output: Hello Fred! 👋 It's nice to meet you. How can I help you today? 😊

Как показано выше, приглашения, определенные таким образом, могут указывать структурированные входные данные, которые они принимают, через конфигурацию input.schema . Это позволяет вам типобезопасным способом гарантировать, что подсказки могут быть вызваны только с допустимыми наборами входных данных.

Dotprompts также могут указывать выходные данные, которые они будут передавать для вызова LLM в качестве директивы (либо как контекстное сообщение, либо как параметр API для LLM, которые поддерживают режим структурированного вывода). Это гарантирует, что вы либо получите соответствующий ответ, либо исключение, с которым вы сможете аккуратно справиться.

const outputSchema = z.object({
  short: z.string(),
  friendly: z.string(),
  likeAPirate: z.string(),
});

const threeGreetingsPrompt = defineDotprompt(
  {
    name: 'threeGreetingsPrompt',
    model: 'googleai/gemini-1.5-flash-latest',
    input: {
      schema: z.object({ name: z.string() }),
    },
    output: {
      format: 'json',
      schema: outputSchema,
    },    
  },
  `You are a helpful AI assistant named Walt. Say hello to {{name}}, write a response for each of the styles requested`
);

Затем вы можете вызвать generate по этому приглашению и работать со структурированным выводом в ответе:

const response = await (threeGreetingsPrompt.generate<typeof outputSchema>(
  { input: { name: 'Fred' } }
));

response.output()?.likeAPirate
// "Ahoy there, Fred!  May the winds be ever in your favor!"

В пользовательском интерфейсе разработчика Genkit вы можете запустить любое приглашение, определенное вами таким образом. Это позволяет вам экспериментировать с отдельными подсказками за пределами тех мест вашего кода, где они могут использоваться.

Пользовательский интерфейс разработчика, показывающий ответ JSON на вызов ThreeGreetingsPrompt.

Подсказка

См. страницу Dotprompt для получения дополнительных функций библиотеки Dotprompt, включая

  • Загрузка подсказок из исходных файлов .prompt
  • Шаблоны на основе рулей
  • Поддержка многоходовых шаблонов подсказок и мультимедийного контента.
  • Краткие определения схемы ввода и вывода.