Firebase Genkit con Cloud Run

Puedes implementar flujos de Firebase Genkit como servicios web con Cloud Run. Esta página, como ejemplo, te guía a través del proceso de implementación de la muestra predeterminada de tu flujo de trabajo.

  1. Instala Google Cloud CLI si que todavía no tienes.

  2. Crea un proyecto de Google Cloud nuevo consola de Cloud o elige una existente. El proyecto debe estar vinculado a una cuenta de facturación.

    Luego de crear o elegir un proyecto, configura Google Cloud CLI para usar de la siguiente manera:

    gcloud auth login
    gcloud init
    
  3. Crea un directorio para el proyecto de muestra de Genkit:

    mkdir -p ~/tmp/genkit-cloud-project
    cd ~/tmp/genkit-cloud-project
    

    Si vas a usar un IDE, ábrelo en este directorio.

  4. Inicializa un módulo de Go en el directorio de tu proyecto:

    go mod init example/cloudrun
    
  5. Inicializa Genkit en tu proyecto:

    genkit init
    

    Selecciona el proveedor de modelos que deseas usar.

    Acepta los valores predeterminados para el resto de los mensajes. La herramienta genkit creará un archivo fuente de muestra para comenzar a desarrollar tus propios flujos de IA. Para el resto de este instructivo, solo implementarás el flujo de muestra.

  6. Edita el archivo de muestra (main.go o genkit.go) para especificar explícitamente puerto en el que debe escuchar el servidor de flujo:

    if err := genkit.Init(ctx,
        &genkit.Options{FlowAddr: ":3400"}, // Add this parameter.
    ); err != nil {
        log.Fatal(err)
    }
    
  7. Haz que las credenciales de la API estén disponibles para la función implementada. Realiza una de las según el proveedor de modelos que hayas elegido:

    Gemini (IA de Google)

    1. Asegúrate de que la IA de Google esté disponibles en tu región.

    2. Genera una clave de API para la la API de Gemini con Google AI Studio.

    3. Haz que la clave de API esté disponible en el entorno de Cloud Run:

      1. En la consola de Cloud, habilita el API de Secret Manager.
      2. En la Secret Manager crea un secreto nuevo con tu clave de API.
      3. Después de crear el Secret, en la misma página, otorga a tu de Compute Engine acceso al Secret con el Administrador y descriptor de acceso a secretos. (Puedes buscar el nombre de la cuenta de servicio de procesamiento predeterminada en la página de IAM).

      En un paso posterior, cuando implementes el servicio, deberás hacer lo siguiente: hacer referencia al nombre de este Secret.

    Gemini (Vertex AI)

    1. En la consola de Cloud, Habilita la API de Vertex AI para tu proyecto.

    2. En IAM asegúrate de que la cuenta de servicio de procesamiento predeterminada esté otorgada rol de usuario de Vertex AI.

    El único secreto que debes configurar para este instructivo es para el modelo pero, en general, debes hacer algo similar para cada servicio usa tu flujo.

  8. Opcional: Prueba tu flujo en la IU para desarrolladores:

    1. Configura tu entorno local para el proveedor de modelos que elegiste:

      Gemini (IA de Google)

      export GOOGLE_GENAI_API_KEY=<your API key>
      

      Gemini (Vertex AI)

      export GCLOUD_PROJECT=<your project ID>
      export GCLOUD_LOCATION=us-central1
      gcloud auth application-default login
      
    2. Inicia la IU:

      genkit start
      
    3. En la IU del desarrollador (http://localhost:4000/), ejecuta el flujo:

      1. Haz clic en menuSugeririonFlow.

      2. En la pestaña Input JSON, proporciona un asunto para el modelo:

        "banana"
        
      3. Haz clic en Ejecutar.

  9. Si todo funciona como se esperaba hasta ahora, puedes compilar e implementar el flujo:

    Gemini (IA de Google)

    gcloud run deploy --port 3400 \
      --update-secrets=GOOGLE_GENAI_API_KEY=<your-secret-name>:latest
    

    Gemini (Vertex AI)

    gcloud run deploy --port 3400 \
      --set-env-vars GCLOUD_PROJECT=<your-gcloud-project> \
      --set-env-vars GCLOUD_LOCATION=us-central1
    

    (GCLOUD_LOCATION configura la región de la API de Vertex que quieres usar).

    Elige N cuando se te pregunte si quieres permitir invocaciones no autenticadas. Si respondes N, se configurará tu servicio para que requiera credenciales de IAM. Consulta Autenticación en los documentos de Cloud Run para obtener información sobre cómo proporcionar estas credenciales.

Una vez finalizada la implementación, la herramienta imprimirá la URL de servicio. Puedes probar con curl:

curl -X POST https://<service-url>/menuSuggestionFlow \
  -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
  -H "Content-Type: application/json" -d '"banana"'