Vertex AI — это унифицированная платформа для управления и организации рабочих процессов машинного обучения (ML) с комплексным набором инструментов и сервисов, упрощающих создание, обучение и развертывание моделей ML в любом масштабе. В этой статье мы собираемся использовать предварительно обученную Vertex AI модель большого языка PaLM 2 для текста (также известную как текстовый бизон) для создания плана научного эссе с использованием введенной вами темы и предопределенной подсказки. Вы можете легко настроить его в соответствии с другими потребностями и изучить возможности генеративных функций искусственного интеллекта PaLM 2.

Вдохновленный Развертывание приложения Google Cloud Generative AI на веб-сайте с помощью Cloud Run, я пишу эту статью, сосредоточив внимание на аспекте разработки приложений на Go (Golang), а не на общедоступных примерах Python.

Предпосылки:

  • Учетная запись Google Cloud Platform (GCP). Зарегистрируйтесь бесплатно здесь
  • Скачайте и установите Облачный SDK
  • Go

Модель генерации текста

Прежде чем перейти к коду, нам нужно создать новую подсказку с помощью Generative AI Studio.

Перейдите в Консоль GCP и выберите Vertex AI в разделе Искусственный интеллект. Выберите Язык в разделе Generative AI Studio и Текстовая подсказка.

На правой панели установите для модели значение text-bison@001. Создайте приглашение, настройте параметры Temperature, Token Limit, Top-K и Top-P. Вы можете добавить входы и выходы для настройки модели.

Следующая подсказка и параметры будут использоваться для кода позже:

Подсказка:
Создайте план научного эссе. Включите математику, экспериментальные возможности, альтернативы, преимущества и риски.

Ввод: ${input}
Вывод:

Параметры:
Температура (temperature): 0,8
Лимит токена (maxOutputToken): 512
Top-K (topK): 40
Top-P ( topP): 0,8

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

Настройка локальной среды разработки

Убедитесь, что на вашем компьютере для разработки установлены учетная запись GCP, проект и Cloud SDK. Используйте Учетные данные приложения по умолчанию (ADC) для локального хранения учетных данных. Эти учетные данные будут автоматически использоваться, когда код вызывает Vertex AI API.

gcloud auth login
gcloud config set project ${YOUR_GCP_PROJECT}
gcloud services enable aiplatform.googleapis.com
gcloud auth application-default login

Вы будете перенаправлены в браузер для аутентификации, копирования/вставки кода авторизации обратно в интерфейс командной строки gcloud.

Предупреждение: ADC предназначен только для разработки, вы должны использовать учетную запись службы, прикрепленную к ресурсу GCP в производственной среде.

IAM-разрешение

Разрешение IAM aiplatform.endpoints.predict требуется для оперативных запросов. Роль roles/aiplatform.user (пользователь Vertex AI) — это предопределенная роль с этим разрешением, вам необходимо предоставить эту роль вашему пользователю или группе GCP.

Примечание. Предоставьте разрешение учетной записи службы, если ваша служба развернута в GCP.

Разработка приложения

Приложение может получить доступ к Vertex AI API несколькими способами:

  1. Вызов API напрямую
    При использовании Generative AI Studio нажмите кнопку <>VIEW CODE. Generative AI Studio может генерировать Python, Python Colab и Curl. Вы можете вручную построить вызов Go http, используя те же параметры Curl. Это нормально для целей разработки, но для производственной среды вам потребуются дополнительные шаги для извлечения учетной записи службы и передачи ее в качестве токена авторизации.
  2. Библиотека Google Cloud AI Platform Go
    Это полная версия библиотеки Vertex AI Platform с множеством функций и моделей. По сути, расширенный набор того, что нам нужно.
    Документация Google Cloud Go
    Документация Go Library
  3. Библиотека Google Cloud AI Go (бета-версия)
    Эта библиотека имеет генеративный язык, аналогичный версии Python. На момент написания этой статьи он все еще находится в стадии бета-тестирования и может быть изменен.
    Документация Google Cloud Go (v0.1.0 apiv1beta2)
    Документ Go Library (v0.1.0 rev 10 июля 2023 г.)

Давайте возьмем вариант №2, я планирую добавить вариант №3, когда будет готова версия 1.

Инициируйте go.mod, если вы еще этого не сделали. Нам нужно загрузить несколько зависимостей:

go mod init yourmodulename
go get cloud.google.com/go/aiplatform
go get google.golang.org/api
go get google.golang.org/protobuf

Мы используем модель, подсказку и параметры, которые мы определили ранее:

package main

import (
   "context"
   "fmt"
   "log"
  
   aiplatform "cloud.google.com/go/aiplatform/apiv1"
   aiplatformpb "cloud.google.com/go/aiplatform/apiv1/aiplatformpb"
   "google.golang.org/api/option"
   "google.golang.org/protobuf/types/known/structpb"
)

const INPUT = "warp drive" // Input topic to generate the essay

func main() {
   ctx := context.Background()
  
   // As of Jul 2023, only available in us-central1
   c, err := aiplatform.NewPredictionClient(ctx, option.WithEndpoint("us-central1-aiplatform.googleapis.com:443"))
   if err != nil {
      log.Fatalf("Error 1: %v", err)
   }
   defer c.Close()
 
   params, err := structpb.NewValue(map[string]interface{}{
      "temperature":     0.2,
      "maxOutputTokens": 512,
      "topK":            40,
      "topP":            0.8,
   })
   if err != nil {
      log.Fatalf("Error 2: %v", err)
   }

   // Add input to the prompt
   instance, err := structpb.NewValue(map[string]interface{}{
      "prompt": fmt.Sprintf("Create an outline for a scientific essay. Includes the maths, experimental possibilities, alternatives, benefit and risk. input: %s. output:", INPUT),
   })
   if err != nil {
      log.Fatalf("Error 3: %v", err)
   }
  
   req := &aiplatformpb.PredictRequest{
      // Replace your-gcp-project to your GCP Project ID
      // Notice the model text-bison@001 at the end of the endpoint
      // If you want to use other model, change here
      Endpoint:   "projects/your-gcp-project/locations/us-central1/publishers/google/models/text-bison@001",
      Instances:  []*structpb.Value{instance},
      Parameters: params,
   }
   resp, err := c.Predict(ctx, req)
   if err != nil {
      log.Fatalf("Error 4: %v", err)
   }
  
   respMap := resp.Predictions[0].GetStructValue().AsMap()
   fmt.Printf("resp: %v", respMap["content"])
}

Ага. Вот и все!

Для дальнейшего изучения попробуйте PaLM для чата chat-bison для вариантов использования многооборотного разговора. Завершение кода, взгляните на code-bison. И еще Генеративная Модель здесь.