Vertex AI 外掛程式提供多個 AI 服務的介面:
- Google 生成式 AI 模型:
- Gemini 文字產生功能
- Imagen2 圖片產生
- 產生文字嵌入
- 透過 Vertex AI Rapid Evaluation API 提供的評估指標子集:
- Vector Search
安裝
npm i --save @genkit-ai/vertexai
如果您想在本機執行使用此外掛程式的流程,還必須安裝 Google Cloud CLI 工具。
設定
如要使用這個外掛程式,請在初始化 Genkit 時指定它:
import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [
vertexAI({ location: 'us-central1' }),
],
});
外掛程式會要求您指定 Google Cloud 專案 ID、要向 Vertex API 提出要求的區域,以及 Google Cloud 專案憑證。
- 您可以透過在
vertexAI()
設定中設定projectId
,或設定GCLOUD_PROJECT
環境變數,指定 Google Cloud 專案 ID。如果您是透過 Google Cloud 環境 (Cloud Functions、Cloud Run 等) 執行流程,GCLOUD_PROJECT
會自動設為該環境的專案 ID。 - 您可以透過在
vertexAI()
設定中設定location
,或設定GCLOUD_LOCATION
環境變數,指定 API 位置。 如要提供 API 憑證,您必須設定 Google Cloud 應用程式預設憑證。
用量
生成式 AI 模型
這個外掛程式會將參照項目靜態匯出至支援的生成式 AI 模型:
import { gemini15Flash, gemini15Pro, imagen3 } from '@genkit-ai/vertexai';
您可以使用這些參照來指定 ai.generate()
使用的模型:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const llmResponse = await ai.generate({
model: gemini15Flash,
prompt: 'What should I do when I visit Melbourne?',
});
這個外掛程式也支援使用 Google 搜尋或您自己的資料,為 Gemini 文字回覆提供基礎。
範例:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
await ai.generate({
model: gemini15Flash,
prompt: '...',
config: {
googleSearchRetrieval: {
disableAttribution: true,
}
vertexRetrieval: {
datastore: {
projectId: 'your-cloud-project',
location: 'us-central1',
collection: 'your-collection',
},
disableAttribution: true,
}
}
})
這個外掛程式也會將 Gecko 文字嵌入模型的參照項目以靜態方式匯出:
import { textEmbedding004 } from '@genkit-ai/vertexai';
您可以使用這個參照,指定索引器或擷取器使用的嵌入器。舉例來說,如果您使用 Chroma DB:
const ai = genkit({
plugins: [
chroma([
{
embedder: textEmbedding004,
collectionName: 'my-collection',
},
]),
],
});
或者,您也可以直接產生嵌入內容:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const embedding = await ai.embed({
embedder: textEmbedding004,
content: 'How many widgets do you have in stock?',
});
使用者可根據提示生成圖片:
import { imagen3 } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const response = await ai.generate({
model: imagen3,
output: { format: 'media' },
prompt: 'a banana riding a bicycle',
});
return response.media();
甚至可以進階編輯現有圖片:
const ai = genkit({
plugins: [vertexAI({ location: 'us-central1' })],
});
const baseImg = fs.readFileSync('base.png', { encoding: 'base64' });
const maskImg = fs.readFileSync('mask.png', { encoding: 'base64' });
const response = await ai.generate({
model: imagen3,
output: { format: 'media' },
prompt: [
{ media: { url: `data:image/png;base64,${baseImg}` }},
{
media: { url: `data:image/png;base64,${maskImg}` },
metadata: { type: 'mask' },
},
{ text: 'replace the background with foo bar baz' },
],
config: {
editConfig: {
editMode: 'outpainting',
},
},
});
return response.media();
如需更多選項詳情,請參閱 Imagen 模型說明文件。
Vertex AI 模型園地中的 Anthropic Claude 3
如果您有權存取 Vertex AI Model Garden 中的 Claude 3 模型 (俳句、十四行詩或大合唱曲),就可以將這些模型與 Genkit 搭配使用。
以下是啟用 Vertex AI Model Garden 模型的設定範例:
import { genkit } from 'genkit';
import {
claude3Haiku,
claude3Sonnet,
claude3Opus,
vertexAIModelGarden,
} from '@genkit-ai/vertexai/modelgarden';
const ai = genkit({
plugins: [
vertexAIModelGarden({
location: 'us-central1',
models: [claude3Haiku, claude3Sonnet, claude3Opus],
}),
],
});
然後將其用作一般模型:
const llmResponse = await ai.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 { genkit } from 'genkit';
import { llama31, vertexAIModelGarden } from '@genkit-ai/vertexai/modelgarden';
const ai = genkit({
plugins: [
vertexAIModelGarden({
location: 'us-central1',
models: [llama31],
}),
],
});
然後將其用於一般模型:
const llmResponse = await ai.generate({
model: llama31,
prompt: 'Write a function that adds two numbers together',
});
評估人員
如要使用 Vertex AI Rapid Evaluation 的評估工具,請在 vertexAI
外掛程式設定中新增 evaluation
區塊。
import { genkit } from 'genkit';
import {
vertexAIEvaluation,
VertexAIEvaluationMetricType,
} from '@genkit-ai/vertexai/evaluation';
const ai = genkit({
plugins: [
vertexAIEvaluation({
location: 'us-central1',
metrics: [
VertexAIEvaluationMetricType.SAFETY,
{
type: VertexAIEvaluationMetricType.ROUGE,
metricSpec: {
rougeType: 'rougeLsum',
},
},
],
}),
],
});
上述設定會為 Safety
和 ROUGE
指標新增評估工具。本範例顯示兩種方法:Safety
指標使用預設規格,而 ROUGE
指標則提供自訂規格,將 rouge 類型設為 rougeLsum
。
您可以使用 genkit eval:run
指令搭配相容的資料集 (也就是含有 output
和 reference
欄位的資料集) 執行這兩種評估工具。Safety
評估器也可以使用 genkit eval:flow -e vertexai/safety
指令執行,因為它只需要 output
。
索引器和擷取器
Genkit Vertex AI 外掛程式包含由 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
模型則適合多語言文字。 在 Google Cloud 控制台的「向量搜尋」部分中,建立新的索引。最重要的設定如下:
- 維度:指定所選嵌入模型產生的向量維度。
text-embedding-004
和text-multilingual-embedding-002
模型會產生 768 維度的向量。 - 更新方式:選取串流更新。
建立索引後,請將其部署至標準 (公開) 端點。
- 維度:指定所選嵌入模型產生的向量維度。
取得要使用的文件儲存庫的文件索引器和擷取器:
Cloud Firestore
import { getFirestoreDocumentIndexer, getFirestoreDocumentRetriever } from '@genkit-ai/vertexai/vectorsearch'; import { initializeApp } from 'firebase-admin/app'; import { getFirestore } from 'firebase-admin/firestore'; initializeApp({ projectId: PROJECT_ID }); const db = getFirestore(); const firestoreDocumentRetriever = getFirestoreDocumentRetriever(db, FIRESTORE_COLLECTION); const firestoreDocumentIndexer = getFirestoreDocumentIndexer(db, FIRESTORE_COLLECTION);
BigQuery
import { getBigQueryDocumentIndexer, getBigQueryDocumentRetriever } from '@genkit-ai/vertexai/vectorsearch'; import { BigQuery } from '@google-cloud/bigquery'; const bq = new BigQuery({ projectId: PROJECT_ID }); const bigQueryDocumentRetriever = getBigQueryDocumentRetriever(bq, BIGQUERY_TABLE, BIGQUERY_DATASET); const bigQueryDocumentIndexer = getBigQueryDocumentIndexer(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
其他
如要支援其他文件儲存庫,您可以提供自己的
DocumentRetriever
和DocumentIndexer
實作:const myDocumentRetriever = async (neighbors) => { // Return the documents referenced by `neighbors`. // ... } const myDocumentIndexer = async (documents) => { // Add `documents` to storage. // ... }
如需範例,請參閱「使用本機檔案的 Vertex AI 外掛程式擷取器和索引器範例」。
將
vectorSearchOptions
區塊新增至vertexAI
外掛程式設定:import { genkit } from 'genkit'; import { textEmbedding004 } from '@genkit-ai/vertexai'; import { vertexAIVectorSearch } from '@genkit-ai/vertexai/vectorsearch'; const ai = genkit({ plugins: [ vertexAIVectorSearch({ 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, }, ], }), ], });
提供您在第一步驟中選擇的嵌入器,以及您在上一個步驟中建立的文件索引器和擷取器。
如要設定外掛程式,以便使用先前建立的 Vector Search 索引,您必須提供幾個值,這些值可在 Google Cloud 控制台的 Vector Search 專區中找到:
所有設定都完成後,您就可以在 Genkit 應用程式中使用索引器和擷取器:
import { vertexAiIndexerRef, vertexAiRetrieverRef, } from '@genkit-ai/vertexai/vectorsearch'; // ... inside your flow function: await ai.index({ indexer: vertexAiIndexerRef({ indexId: VECTOR_SEARCH_INDEX_ID, }), documents, }); const res = await ai.retrieve({ retriever: vertexAiRetrieverRef({ indexId: VECTOR_SEARCH_INDEX_ID, }), query: queryDocument, });
請參閱以下程式碼範例: