Оперативное проектирование — это основной способ, с помощью которого вы, как разработчик приложений, можете влиять на результаты генеративных моделей ИИ. Например, при использовании 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 вы можете запустить любое приглашение, определенное вами таким образом. Это позволяет вам экспериментировать с отдельными подсказками за пределами тех мест вашего кода, где они могут использоваться.
Подсказка
См. страницу 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 вы можете запустить любое приглашение, определенное вами таким образом. Это позволяет вам экспериментировать с отдельными подсказками за пределами тех мест вашего кода, где они могут использоваться.
Подсказка
См. страницу Dotprompt для получения дополнительных функций библиотеки Dotprompt, включая
- Загрузка подсказок из исходных файлов
.prompt
- Шаблоны на основе рулей
- Поддержка многоходовых шаблонов подсказок и мультимедийного контента.
- Краткие определения схемы ввода и вывода.