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、要向其发出 Vertex API 请求的区域,以及 Google Cloud 项目凭据。

  • 您可以通过在 vertexAI() 配置中设置 projectId 或设置 GCLOUD_PROJECT 环境变量来指定 Google Cloud 项目 ID。如果您从 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?',
});

此插件还支持使用 Google 搜索您自己的数据

示例:

await generate({
  model: gemini15Flash,
  prompt: ...,
  config: {
    googleSearchRetrieval: {
      disableAttribution: true,
    }
    vertexRetrieval: {
      datastore: {
        projectId: 'your-cloud-project',
        location: 'us-central1',
        collection: 'your-collection',
      },
      disableAttribution: true,
    }
  }
})

此插件还会静态导出对 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?',
});

Imagen3 模型支持根据用户提示生成图片:

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

const response = await generate({
  model: imagen3,
  output: { format: 'media' },
  prompt: 'a banana riding a bicycle',
});

return response.media();

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. 在 Google Cloud 控制台中的 Vector Search 部分,创建一个新索引。最重要的设置包括:

    • 维度:指定所选嵌入模型生成的矢量的维度。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 和 Indexer 示例

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

请参阅以下代码示例: