Подсказки

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

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

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

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

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

Идти

request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{ai.NewTextPart("You are a helpful AI assistant named Walt.")}},
}}
model.Generate(context.Background(), &request, nil)

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

Идти

func helloPrompt(name string) *ai.Part {
  prompt := fmt.Sprintf("You are a helpful AI assistant named Walt. Say hello to %s.", name)
  return ai.NewTextPart(prompt)
}
request := ai.GenerateRequest{Messages: []*ai.Message{
  {Content: []*ai.Part{helloPrompt("Fred")}},
}}
response, err := model.Generate(context.Background(), &request, nil)

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

Идти

Используйте функцию DefinePrompt , чтобы зарегистрировать ваши запросы в Genkit.

type HelloPromptInput struct {
  UserName string
}
helloPrompt := ai.DefinePrompt(
  "prompts",
  "helloPrompt",
  nil, // Additional model config
  jsonschema.Reflect(&HelloPromptInput{}),
  func(ctx context.Context, input any) (*ai.GenerateRequest, error) {
      params, ok := input.(HelloPromptInput)
      if !ok {
          return nil, errors.New("input doesn't satisfy schema")
      }
      prompt := fmt.Sprintf(
          "You are a helpful AI assistant named Walt. Say hello to %s.",
          params.UserName)
      return &ai.GenerateRequest{Messages: []*ai.Message{
          {Content: []*ai.Part{ai.NewTextPart(prompt)}},
      }}, nil
  },
)

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

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

Идти

request, err := helloPrompt.Render(context.Background(), HelloPromptInput{UserName: "Fred"})
if err != nil {
  return err
}
response, err := model.Generate(context.Background(), request, nil)

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

Подсказка

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

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