Vertex AI 插件为多种 AI 服务提供了接口:
- Google 生成式 AI 模型:
<ph type="x-smartling-placeholder">
- </ph>
- Gemini 文本生成
- Imagen2 图片生成
- 文本嵌入生成
- 通过 Vertex AI Rapid Evaluation API 提供的一部分评估指标: <ph type="x-smartling-placeholder">
- 向量搜索
安装
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 应用 默认凭据。
用法
生成式 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 模型(俳句诗、sonnet 或 opus),则可以将这些模型与 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',
},
},
],
},
}),
],
// ...
});
上述配置针对 Safety
和 ROUGE
指标添加了评估器。该示例展示了两种方法:Safety
指标使用默认规范,而 ROUGE
指标提供自定义规范,该规范将 Rouge 类型设置为 rougeLsum
。
可以使用 genkit eval:run
命令和兼容的数据集(即具有 output
和 reference
字段的数据集)运行这两个评估程序。此外,您还可以使用 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,请执行以下操作:
选择嵌入模型。此模型负责创建矢量, 嵌入。高级用户可以使用经过优化的嵌入模型 但对于大多数用户来说,Vertex AI 的
text-embedding-004
模型非常适合英文文本和text-multilingual-embedding-002
模型适用于多语言文本。在矢量搜索中 部分,创建新索引。最重要的 设置如下:
维度:指定由您的广告素材 选定的嵌入模型。
text-embedding-004
和text-multilingual-embedding-002
模型可生成 768 个向量 维度。更新方法:选择流式更新。
创建索引后,将其部署到标准(公共)端点。
获取要使用的文档存储区的文档索引器和检索器:
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);
其他
如需支持其他文档存储区,您可以提供自己的实现 (共
DocumentRetriever
和DocumentIndexer
):const myDocumentRetriever: DocumentRetriever = async (neighbors: Neighbor[]) => { // Return the documents referenced by `neighbors`. // ... } const myDocumentIndexer: DocumentIndexer = async (documents: Document[]) => { // Add `documents` to storage. // ... }
如需查看示例,请参阅包含本地文件的 Vertex AI 插件检索器和索引器示例。
将
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, }, ], }), ], });
提供您在第一步中选择的嵌入器和文档索引器 和您在上一步中创建的检索器。
要将插件配置为使用您之前创建的矢量搜索索引,请执行以下操作: 您需要提供几个值,这些值可在“矢量搜索”中找到 部分:
现在,所有内容均已配置,请导入检索器和索引器引用 从插件中移除:
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, });
请参阅以下代码示例: