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、 region [地区] 您的 Google Cloud 项目 凭据。

  • 您可以通过在以下位置设置 projectId 来指定 Google Cloud 项目 ID: vertexAI() 配置,或通过设置 GCLOUD_PROJECT 环境 变量。如果您从 Google Cloud 环境 函数、Cloud Run 等),则 GCLOUD_PROJECT 会自动设置为 环境的项目 ID。

  • 您可以通过在location vertexAI() 配置,或通过设置 GCLOUD_LOCATION 环境 变量。

  • 如需提供 API 凭据,您需要设置 Google Cloud 应用 默认凭据。

    1. 如需指定凭据,请执行以下操作:

      • 如果您要从 Google Cloud 环境(Cloud Functions、Cloud Run 等)运行 flow,系统会自动设置。

      • 在本地开发环境中,运行以下命令来执行此操作:

      gcloud auth application-default login
      
    2. 此外,请确保为该账号授予 Vertex AI User 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 文本嵌入的引用, 模型:

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 模型(俳句诗sonnetopus),则可以将这些模型与 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 服务

下面是 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',
            },
          },
        ],
      },
    }),
  ],
  // ...
});

上述配置针对 SafetyROUGE 指标添加了评估器。该示例展示了两种方法:Safety 指标使用默认规范,而 ROUGE 指标提供自定义规范,该规范将 Rouge 类型设置为 rougeLsum

可以使用 genkit eval:run 命令和兼容的数据集(即具有 outputreference 字段的数据集)运行这两个评估程序。此外,您还可以使用 genkit eval:flow -e vertexai/safety 命令运行 Safety 评估器,因为它只需要 output

索引器和检索器

Genkit Vertex AI 插件包含索引器和检索器实现 Vertex AI Vector Search 服务支持的 Vertex AI Vector Search 服务。

(请参阅检索增强生成页面,了解索引器如何 和检索器都用于 RAG 实现)。

Vertex AI Vector Search 服务是一种文档索引,与 文档存储区:该文档存储区包含 而 Vertex AI Vector Search 索引针对每个文档包含 向量嵌入以及对文档存储区中文档的引用。 Vertex AI Vector Search 服务将文档编入索引后,可以 响应搜索查询,生成文档存储区的索引列表。

Vertex AI 插件提供的索引器和检索器实现使用 Cloud Firestore 或 BigQuery 作为文档存储区。该插件还会 包含您可以实现以支持其他文档存储区的接口。

如需使用 Vertex AI Vector Search,请执行以下操作:

  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 插件检索器和索引器示例

  4. vectorSearchOptions 代码块添加到您的 vertexAI 插件配置中:

    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,
            },
          ],
        }),
      ],
    });
    

    提供您在第一步中选择的嵌入器和文档索引器 和您在上一步中创建的检索器。

    要将插件配置为使用您之前创建的矢量搜索索引,请执行以下操作: 您需要提供几个值,这些值可在“矢量搜索”中找到 部分:

    • indexId:列在索引标签页上
    • indexEndpointId:列在索引端点标签页上
    • deployedIndexIdpublicDomainName:在“已部署索引”中列出 信息”点击已部署索引的名称即可打开此页面 在前面提到的任一标签页上
  5. 现在,所有内容均已配置,请导入检索器和索引器引用 从插件中移除:

    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,
    });
    

请参阅以下代码示例: