Vertex AI プラグイン

Vertex AI プラグインは、いくつかの AI サービスへのインターフェースを提供します。

インストール

npm i --save @genkit-ai/vertexai

このプラグインを使用するフローをローカルで実行する場合は、 Google Cloud CLI ツールがインストールされていること。

構成

このプラグインを使用するには、configureGenkit() を呼び出すときに指定します。

import { vertexAI } from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({ projectId: 'your-cloud-project', location: 'us-central1' }),
  ],
  // ...
});

プラグインでは、Google Cloud プロジェクト ID、 リージョン API リクエストの送信先と、Google Cloud プロジェクトが 認証情報が必要です。

  • Google Cloud プロジェクト ID を指定するには、projectIdvertexAI() 構成を使用するか、GCLOUD_PROJECT 環境を設定します。 変数です。Google Cloud 環境(Cloud Functions、Cloud Run など)では、GCLOUD_PROJECT は自動的に 環境のプロジェクト ID。

  • API の場所は、locationvertexAI() 構成を使用するか、GCLOUD_LOCATION 環境を設定します。 変数です。

  • API 認証情報を指定するには、Google Cloud アプリケーションのデフォルト認証情報を設定する必要があります。

    1. 認証情報を指定するには:

      • Google Cloud 環境(Cloud Functions、Cloud Run など)からフローを実行している場合は、自動的に設定されます。

      • そのためには、ローカルの開発環境で次のコマンドを実行します。

      gcloud auth application-default login
      
    2. また、アカウントに Vertex AI ユーザー IAM ロールが付与されていることを確認します。 (roles/aiplatform.user)。Vertex AI のアクセス制御を確認する。 ドキュメントをご覧ください。

用途

生成 AI モデル

このプラグインは、サポートされている生成 AI モデルへの参照を静的にエクスポートします。

import { gemini15Flash, gemini15Pro, imagen2 } from '@genkit-ai/vertexai';

これらの参照を使用して、generate() が使用するモデルを指定できます。

const llmResponse = await generate({
  model: gemini15Flash,
  prompt: 'What should I do when I visit Melbourne?',
});

このプラグインは、Gecko テキスト エンベディングへの参照も静的にエクスポートします。 model:

import { textEmbeddingGecko } from '@genkit-ai/vertexai';

この参照を使用して、インデクサまたはリトリーブの埋め込み元を指定できます。 あります。たとえば、Chroma DB を使用する場合は次のようになります。

configureGenkit({
  plugins: [
    chroma([
      {
        embedder: textEmbeddingGecko,
        collectionName: 'my-collection',
      },
    ]),
  ],
});

または、エンベディングを直接生成することもできます。

// import { embed, EmbedderArgument } from '@genkit-ai/ai/embedder';
const embedding = await embed({
  embedder: textEmbeddingGecko,
  content: 'How many widgets do you have in stock?',
});

Vertex AI Model Garden での Anthropic Claude 3

Vertex AI Model Garden で Claude 3 モデル(haikusonnetopus)にアクセスできる場合は、Genkit で使用できます。

Vertex AI Model Garden モデルを有効にする構成例を次に示します。

import {
  vertexAI,
  claude3Haiku,
  claude3Sonnet,
  claude3Opus,
} from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      location: 'us-central1',
      modelGarden: {
        models: [claude3Haiku, claude3Sonnet, claude3Opus],
      },
    }),
  ],
});

次に、それらを通常のモデルとして使用します。

const llmResponse = await generate({
  model: claude3Sonnet,
  prompt: 'What should I do when I visit Melbourne?',
});

Vertex AI Model Garden の Llama 3.1 405b

まず、Vertex AI Model Garden で Llama 3.1 API Service を有効にする必要があります。

Vertex AI プラグインでの Llama 3.1 405b の構成例を次に示します。

import { vertexAI, llama31 } from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      location: 'us-central1',
      modelGarden: {
        models: [llama31],
      },
    }),
  ],
});

通常のモデルとして使用します。

const llmResponse = await generate({
  model: llama31,
  prompt: 'Write a function that adds two numbers together',
});

エバリュエータ

Vertex AI Rapid Evaluation のエバリュエータを使用するには、vertexAI プラグイン構成に evaluation ブロックを追加します。

import { vertexAI, VertexAIEvaluationMetricType } from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      projectId: 'your-cloud-project',
      location: 'us-central1',
      evaluation: {
        metrics: [
          VertexAIEvaluationMetricType.SAFETY,
          {
            type: VertexAIEvaluationMetricType.ROUGE,
            metricSpec: {
              rougeType: 'rougeLsum',
            },
          },
        ],
      },
    }),
  ],
  // ...
});

上記の構成では、Safety 指標と ROUGE 指標のエバリュエータが追加されています。この例では 2 つのアプローチが示されています。Safety 指標はデフォルトの仕様を使用するのに対し、ROUGE 指標は、rouge 型を rougeLsum に設定するカスタマイズされた仕様を提供します。

どちらのエバリュエータも、互換性のあるデータセット(output フィールドと reference フィールドを含むデータセット)を指定して genkit eval:run コマンドで実行できます。Safety エバリュエータは output のみが必要なため、genkit eval:flow -e vertexai/safety コマンドを使用して実行することもできます。

インデクサとリトリーバー

Genkit Vertex AI プラグインにはインデクサとリトリーバの実装が含まれている Vertex AI Vector Search サービスを基盤としています。

(インデクサがどのように機能するかについては、検索拡張生成のページをご覧ください。 および Retriever が RAG 実装で使用されています)。

Vertex AI ベクトル検索サービスは、Google Cloud サービスと 任意のドキュメント ストア: ドキュメント ストアには、 Vertex AI Vector Search インデックスにはドキュメントごとに ベクトル エンベディングと、ドキュメント ストア内のドキュメントへの参照が含まれます。 ドキュメントが Vertex AI Vector Search サービスによってインデックスに登録されると、 検索クエリに応答して、ドキュメント ストアに対するインデックスのリストを作成します。

Vertex AI プラグインで提供されるインデクサとリトリーバーの実装では、 ドキュメント ストアとして Cloud Firestore または BigQuery を使用します。また、このプラグインは には、他のドキュメント ストアをサポートするために実装できるインターフェースが含まれています。

Vertex AI ベクトル検索を使用するには:

  1. エンベディング モデルを選択します。このモデルは、ベクトル エンベディングを テキストからエンベディングを作成します。上級ユーザーは、最適化されたエンベディング モデルを 使用できますが、ほとんどのユーザーにとって、Vertex AI は text-embedding-004 モデルは英語のテキストや、 text-multilingual-embedding-002 モデルは多言語テキストに適しています。

  2. ベクトル検索 セクションで新しいインデックスを作成します。最も重要な 次のとおりです。

    • ディメンション: モデルによって生成されるベクトルの次元を指定します。 エンべディング モデルが選択されます。text-embedding-004text-multilingual-embedding-002 モデルは 768 のベクトルを生成します。 定義できます。

    • 更新方法: ストリーミング アップデートを選択します。

    インデックスを作成したら、標準(パブリック)エンドポイントにデプロイします。

  3. 使用するドキュメント ストアのドキュメント インデクサとリトリーバーを取得します。

    Cloud Firestore

    import {
      getFirestoreDocumentIndexer,
      getFirestoreDocumentRetriever
    } from '@genkit-ai/vertexai';
    
    import { initializeApp } from 'firebase-admin/app';
    import { getFirestore } from 'firebase-admin/firestore';
    
    initializeApp({ projectId: PROJECT_ID });
    const db = getFirestore();
    
    const firestoreDocumentRetriever: DocumentRetriever =
      getFirestoreDocumentRetriever(db, FIRESTORE_COLLECTION);
    const firestoreDocumentIndexer: DocumentIndexer =
      getFirestoreDocumentIndexer(db, FIRESTORE_COLLECTION);
    

    BigQuery

    import {
      getBigQueryDocumentIndexer,
      getBigQueryDocumentRetriever,
    } from '@genkit-ai/vertexai';
    import { BigQuery } from '@google-cloud/bigquery';
    
    const bq = new BigQuery({ projectId: PROJECT_ID });
    
    const bigQueryDocumentRetriever: DocumentRetriever =
      getBigQueryDocumentRetriever(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
    const bigQueryDocumentIndexer: DocumentIndexer =
      getBigQueryDocumentIndexer(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
    

    その他

    他のドキュメント ストアをサポートするために、独自の実装を提供できます。 DocumentRetrieverDocumentIndexer:

    const myDocumentRetriever: DocumentRetriever = async (neighbors: Neighbor[]) => {
      // Return the documents referenced by `neighbors`.
      // ...
    }
    const myDocumentIndexer: DocumentIndexer = async (documents: Document[]) => {
      // Add `documents` to storage.
      // ...
    }
    

    例については、ローカル ファイルを使用した Vertex AI プラグイン Retriever とインデクサのサンプルをご覧ください。

  4. vertexAI プラグイン構成に vectorSearchOptions ブロックを追加します。

    import { configureGenkit } from '@genkit-ai/core';
    import { vertexAI, textEmbedding004 } from '@genkit-ai/vertexai';
    
    configureGenkit({
      plugins: [
        vertexAI({
          projectId: PROJECT_ID,
          location: LOCATION,
          vectorSearchOptions: [
            {
              indexId: VECTOR_SEARCH_INDEX_ID,
              indexEndpointId: VECTOR_SEARCH_INDEX_ENDPOINT_ID,
              deployedIndexId: VECTOR_SEARCH_DEPLOYED_INDEX_ID,
              publicDomainName: VECTOR_SEARCH_PUBLIC_DOMAIN_NAME,
              documentRetriever: firestoreDocumentRetriever,
              documentIndexer: firestoreDocumentIndexer,
              embedder: textEmbedding004,
            },
          ],
        }),
      ],
    });
    

    最初の手順で選択した埋め込みツールとドキュメント インデクサを指定します。 2 つ目は、前の手順で作成したレトリーバーです。

    前に作成したベクトル検索のインデックスを使用するようにプラグインを構成するには: いくつかの値を指定する必要があります。これらの値は、[Vector Search] セクション内:

    • indexId: [インデックス] タブに表示されます
    • indexEndpointId: [インデックス エンドポイント] タブに一覧表示
    • deployedIndexIdpublicDomainName: 「デプロイされたインデックス」に表示される 情報このページは、デプロイされたインデックスの名前 前に説明したタブのいずれかで
  5. すべての構成が完了したので、Retriever とインデクサの参照をインポートします。 使用できます。

    import {
      vertexAiIndexerRef,
      vertexAiRetrieverRef,
    } from '@genkit-ai/vertexai';
    

    index()retrieve() への参照を渡します。

    await index({
      indexer: vertexAiIndexerRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      documents,
    });
    
    const res = await retrieve({
      retriever: vertexAiRetrieverRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      query: queryDocument,
    });
    

コードサンプルを参照してください。