Начало работы с Genkit с помощью Go (альфа)

Библиотеки Firebase Genkit для Go теперь доступны для предварительной версии! Поскольку библиотеки Go в настоящее время находятся в стадии альфа-версии, вы можете увидеть API и функциональные изменения по мере разработки. Мы рекомендуем использовать его только для прототипирования и исследования.

Если вы обнаружите проблемы с библиотеками или этой документацией, сообщите о них в нашем репозитории GitHub .

Чтобы начать работу с Genkit, установите Genkit CLI и запустите genkit init в проекте Go. Оставшаяся часть этой страницы покажет вам, как это сделать.

Требования

  • Перейти 1.22 или новее

  • Node.js 20 или новее (для интерфейса командной строки и пользовательского интерфейса Genkit)

    Рекомендация. Инструменты nvm и nvm-windows — это удобный способ установить определенные версии Node, если они еще не установлены в вашей системе. Эти инструменты устанавливают Node индивидуально для каждого пользователя, поэтому вам не нужно вносить общесистемные изменения.

    Чтобы установить nvm в Unix-подобной системе, например macOS или Linux, выполните следующую команду:

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
    

    Затем, чтобы установить Node с помощью nvm , откройте новую оболочку и выполните следующую команду:

    nvm install 20
    

Процедура

  1. Установите Genkit CLI, выполнив следующую команду:

    npm i -g genkit
    

    Эта команда устанавливает Genkit CLI в каталог установки Node, чтобы его можно было использовать вне проекта Node.

  2. Создайте новый каталог проекта:

    mkdir genkit-intro && cd genkit-intro
    
  3. Инициализируйте проект Genkit:

    genkit init
    
    1. Выберите Go в качестве среды выполнения.

    2. Выберите свою модель:

      Близнецы (ИИ Google)

      Самый простой способ начать — использовать Google AI Gemini API. Убедитесь, что оно доступно в вашем регионе .

      Создайте ключ API для Gemini API с помощью Google AI Studio. Затем установите для переменной среды GOOGLE_GENAI_API_KEY свой ключ:

      export GOOGLE_GENAI_API_KEY=<your API key>
      

      Близнецы (Vertex AI)

      Если API Google AI Gemini недоступен в вашем регионе, рассмотрите возможность использования API Vertex AI, который также предлагает модели Gemini и другие модели. Вам потребуется иметь проект Google Cloud с поддержкой биллинга, включить API платформы AI и установить некоторые дополнительные переменные среды:

      gcloud services enable aiplatform.googleapis.com
      export GCLOUD_PROJECT=<your project ID>
      export GCLOUD_LOCATION=us-central1
      

      См. цены на Vertex AI .

    3. Укажите что-нибудь в качестве имени модуля. Например: example/genkit-intro

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

    Команда genkit init создает образец модуля Go и устанавливает необходимые зависимости. Файл main.go содержит единственный поток, menuSuggestionFlow , который предлагает LLM предложить блюдо для ресторана с заданной темой.

    Этот файл выглядит примерно следующим образом (этапы настройки плагина могут выглядеть иначе, если вы выбрали Vertex AI):

    package main
    
    import (
        "context"
        "errors"
        "fmt"
        "log"
    
        // Import Genkit and the Google AI plugin
        "github.com/firebase/genkit/go/ai"
        "github.com/firebase/genkit/go/genkit"
        "github.com/firebase/genkit/go/plugins/googleai"
    )
    
    func main() {
        ctx := context.Background()
    
        // Initialize the Google AI plugin. When you pass nil for the
        // Config parameter, the Google AI plugin will get the API key from the
        // GOOGLE_GENAI_API_KEY environment variable, which is the recommended
        // practice.
        if err := googleai.Init(ctx, nil); err != nil {
            log.Fatal(err)
        }
    
        // Define a simple flow that prompts an LLM to generate menu suggestions.
        genkit.DefineFlow("menuSuggestionFlow", func(ctx context.Context, input string) (string, error) {
            // The Google AI API provides access to several generative models. Here,
            // we specify gemini-1.5-flash.
            m := googleai.Model("gemini-1.5-flash")
            if m == nil {
                return "", errors.New("menuSuggestionFlow: failed to find model")
            }
    
            // Construct a request and send it to the model API (Google AI).
            resp, err := m.Generate(ctx,
                ai.NewGenerateRequest(
                    &ai.GenerationCommonConfig{Temperature: 1},
                    ai.NewUserTextMessage(fmt.Sprintf(`Suggest an item for the menu of a %s themed restaurant`, input))),
                nil)
            if err != nil {
                return "", err
            }
    
            // Handle the response from the model API. In this sample, we just
            // convert it to a string. but more complicated flows might coerce the
            // response into structured output or chain the response into another
            // LLM call.
            text, err := resp.Text()
            if err != nil {
                return "", fmt.Errorf("menuSuggestionFlow: %v", err)
            }
            return text, nil
        })
    
        // Initialize Genkit and start a flow server. This call must come last,
        // after all of your plug-in configuration and flow definitions. When you
        // pass a nil configuration to Init, Genkit starts a local flow server,
        // which you can interact with using the developer UI.
        if err := genkit.Init(ctx, nil); err != nil {
            log.Fatal(err)
        }
    }
    

    Создавая функции искусственного интеллекта вашего приложения с помощью Genkit, вы, скорее всего, будете создавать потоки с несколькими этапами, такими как предварительная обработка входных данных, более сложное построение подсказок, интеграция внешних источников информации для генерации с расширенным поиском (RAG) и многое другое.

  4. Теперь вы можете запустить и изучить функции Genkit и пример проекта локально на своем компьютере. Загрузите и запустите пользовательский интерфейс разработчика Genkit:

    genkit start
    

    Добро пожаловать в пользовательский интерфейс разработчика Genkit

    Пользовательский интерфейс разработчика Genkit теперь работает на вашем компьютере. Когда вы запускаете модели или потоки на следующем этапе, ваша машина будет выполнять задачи оркестровки, необходимые для совместной работы этапов вашего потока; вызовы внешних сервисов, таких как API Gemini, по-прежнему будут выполняться на действующих серверах.

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

  5. Пользовательский интерфейс разработчика Genkit загружается и открывается автоматически при запуске команды genkit start .

    Пользовательский интерфейс разработчика позволяет вам увидеть, какие потоки вы определили и модели, которые вы настроили, запустить их и изучить следы предыдущих запусков. Попробуйте некоторые из этих функций:

    • На вкладке «Выполнить» вы увидите список всех определенных вами потоков и всех моделей, настроенных с помощью плагинов.

      Нажмите менюSuggestionFlow и попробуйте запустить его с каким-нибудь входным текстом (например, "cat" ). Если все пройдет хорошо, вы будете вознаграждены предложением меню для ресторана, оформленного в кошачьей тематике.

    • На вкладке «Проверка» вы увидите историю выполнения потока. Для каждого потока вы можете увидеть параметры, которые были переданы в поток, и трассировку каждого шага во время их выполнения.