ปลั๊กอิน Vertex AI มีอินเทอร์เฟซสำหรับบริการ AI หลายรายการ ดังนี้
- โมเดล Generative AI ของ Google
- การสร้างข้อความ Gemini
- การสร้างรูปภาพ Imagen2 และ Imagen3
- การสร้างการฝังข้อความ
- ชุดย่อยของเมตริกการประเมินผ่าน Rapid Evaluation API ของ Vertex AI
- การค้นหาเวกเตอร์
การติดตั้ง
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, ภูมิภาคที่คุณต้องการส่งคำขอ Vertex API และข้อมูลเข้าสู่ระบบโปรเจ็กต์ Google Cloud
- คุณสามารถระบุรหัสโปรเจ็กต์ Google Cloud ได้โดยการตั้งค่า
projectId
ในการกำหนดค่าvertexAI()
หรือตั้งค่าตัวแปรสภาพแวดล้อมGCLOUD_PROJECT
หากคุณเรียกใช้โฟลว์จากสภาพแวดล้อม Google Cloud (Cloud Functions, Cloud Run และอื่นๆ) ระบบจะตั้งค่าGCLOUD_PROJECT
เป็นรหัสโปรเจ็กต์ของสภาพแวดล้อมโดยอัตโนมัติ - คุณสามารถระบุตำแหน่ง API ได้โดยการตั้งค่า
location
ในการกำหนดค่าvertexAI()
หรือตั้งค่าตัวแปรสภาพแวดล้อมGCLOUD_LOCATION
หากต้องการระบุข้อมูลเข้าสู่ระบบ API คุณต้องตั้งค่าข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน Google Cloud
วิธีระบุข้อมูลเข้าสู่ระบบ
- หากคุณเรียกใช้โฟลว์จากสภาพแวดล้อม Google Cloud (Cloud Functions, Cloud Run และอื่นๆ) ระบบจะตั้งค่านี้โดยอัตโนมัติ
ในสภาพแวดล้อมการทํางานแบบสํารวจในเครื่อง ให้ทําดังนี้
gcloud auth application-default login
สําหรับสภาพแวดล้อมอื่นๆ โปรดดูเอกสารข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน
นอกจากนี้ โปรดตรวจสอบว่าบัญชีได้รับบทบาท IAM ผู้ใช้ Vertex AI (
roles/aiplatform.user
) โปรดดูเอกสารการควบคุมการเข้าถึงของ Vertex AI
การใช้งาน
โมเดล Generative AI
ปลั๊กอินนี้จะส่งออกข้อมูลอ้างอิงไปยังโมเดล Generative 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?',
});
นอกจากนี้ ปลั๊กอินนี้ยังรองรับการยึดโยงคำตอบที่เป็นข้อความของ Gemini โดยใช้ Google Search หรือข้อมูลของคุณเอง
ตัวอย่าง
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?',
});
โมเดล Imagen3 อนุญาตให้สร้างรูปภาพจากพรอมต์ของผู้ใช้
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
Anthropic Claude 3 ใน Vertex AI Model Garden
หากมีสิทธิ์เข้าถึงโมเดล Claude 3 (haiku, sonnet หรือ opus) ใน Vertex AI Model Garden คุณจะใช้โมเดลดังกล่าวกับ Genkit ได้
ตัวอย่างการกําหนดค่าเพื่อเปิดใช้โมเดลใน Model Garden ของ Vertex AI มีดังนี้
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?',
});
Llama 3.1 405b ใน Model Garden ของ Vertex AI
ก่อนอื่น คุณต้องเปิดใช้บริการ Llama 3.1 API ใน Vertex AI Model Garden
ตัวอย่างการกําหนดค่าสําหรับ Llama 3.1 405b ในปลั๊กอิน Vertex AI มีดังนี้
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',
});
โมเดล Mistral ใน Model Garden ของ Vertex AI
หากมีสิทธิ์เข้าถึงโมเดล Mistral (Mistral Large, Mistral Nemo หรือ Codestral) ใน Model Garden ของ Vertex AI คุณจะใช้โมเดลดังกล่าวกับ Genkit ได้
ตัวอย่างการกําหนดค่าสําหรับการเปิดใช้โมเดลใน Model Garden ของ Vertex AI มีดังนี้
import { genkit } from 'genkit';
import {
mistralLarge,
mistralNemo,
codestral,
vertexAIModelGarden,
} from '@genkit-ai/vertexai/modelgarden';
const ai = genkit({
plugins: [
vertexAIModelGarden({
location: 'us-central1',
models: [mistralLarge, mistralNemo, codestral],
}),
],
});
จากนั้นใช้รูปแบบดังกล่าวเป็นรูปแบบปกติ
const llmResponse = await ai.generate({
model: mistralLarge,
prompt: 'Write a function that adds two numbers together',
config: {
version: 'mistral-large-2411', // Optional: specify model version
temperature: 0.7, // Optional: control randomness (0-1)
maxOutputTokens: 1024, // Optional: limit response length
topP: 0.9, // Optional: nucleus sampling parameter
stopSequences: ['###'], // Optional: stop generation at sequences
}
});
โดยรองรับรุ่นต่อไปนี้
- mistralLarge
: รุ่น Mistral ขนาดใหญ่รุ่นล่าสุดที่มาพร้อมความสามารถในการเรียกใช้ฟังก์ชัน
- mistralNemo
: เพิ่มประสิทธิภาพเพื่อการทำงานที่รวดเร็วและมีประสิทธิภาพ
- codestral
: ออกแบบมาเพื่องานการสร้างโค้ดโดยเฉพาะ
แต่ละรูปแบบรองรับการตอบกลับแบบสตรีมและการเรียกใช้ฟังก์ชัน ดังนี้
const response = await ai.generateStream({
model: mistralLarge,
prompt: 'What should I cook tonight?',
tools: ['recipe-finder'],
config: {
version: 'mistral-large-2411',
temperature: 1,
},
});
for await (const chunk of response.stream) {
console.log(chunk.text);
}
ผู้ประเมิน
หากต้องการใช้เครื่องมือประเมินจากการประเมินอย่างรวดเร็วของ Vertex AI ให้เพิ่มบล็อก evaluation
ลงในการกำหนดค่าปลั๊กอิน vertexAI
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
ตัวอย่างนี้แสดง 2 แนวทาง โดยเมตริก Safety
ใช้ข้อกําหนดเริ่มต้น ส่วนเมตริก ROUGE
ระบุข้อกําหนดที่กำหนดเองซึ่งตั้งค่าประเภท Rouge เป็น rougeLsum
เครื่องมือประเมินทั้ง 2 รายการสามารถเรียกใช้ได้โดยใช้คําสั่ง genkit eval:run
กับชุดข้อมูลที่เข้ากันได้ ซึ่งก็คือชุดข้อมูลที่มีช่อง output
และ reference
นอกจากนี้ คุณยังเรียกใช้เครื่องมือประเมิน Safety
โดยใช้คำสั่ง genkit eval:flow -e vertexai/safety
ได้ด้วย เนื่องจากต้องใช้เพียง output
ตัวจัดทําดัชนีและเครื่องมือดึงข้อมูล
ปลั๊กอิน Vertex AI ของ Genkit ประกอบด้วยการติดตั้งใช้งานเครื่องมือจัดทำดัชนีและเครื่องมือดึงข้อมูลซึ่งใช้บริการการค้นหาเวกเตอร์ของ Vertex AI
(ดูหน้าการสร้างที่เพิ่มการดึงข้อมูลเพื่อดูวิธีใช้เครื่องมือจัดทำดัชนีและเครื่องมือดึงข้อมูลในการใช้งาน RAG)
บริการ Vertex AI Vector Search คือดัชนีเอกสารที่ทำงานร่วมกับที่เก็บเอกสารที่คุณเลือก โดยที่เก็บเอกสารมีเนื้อหาของเอกสาร และดัชนี Vertex AI Vector Search มีเวกเตอร์การฝังและข้อมูลอ้างอิงสำหรับเอกสารแต่ละรายการในที่เก็บเอกสาร หลังจากบริการ Vertex AI Vector Search จัดทำดัชนีเอกสารแล้ว บริการจะตอบกลับคำค้นหา แสดงรายการดัชนีในที่จัดเก็บเอกสาร
การติดตั้งใช้งานเครื่องมือจัดทำดัชนีและเครื่องมือดึงข้อมูลซึ่งได้จากปลั๊กอิน Vertex AI จะใช้ Cloud Firestore หรือ BigQuery เป็นที่จัดเก็บเอกสาร นอกจากนี้ ปลั๊กอินยังมีอินเทอร์เฟซที่คุณนำไปใช้เพื่อรองรับที่เก็บเอกสารอื่นๆ ได้ด้วย
วิธีใช้การค้นหาแบบเวกเตอร์ของ Vertex AI
- เลือกรูปแบบการฝัง โมเดลนี้มีหน้าที่สร้างการฝังเวกเตอร์จากข้อความ ผู้ใช้ขั้นสูงอาจใช้โมเดลการฝังที่เพิ่มประสิทธิภาพสำหรับชุดข้อมูลหนึ่งๆ แต่สำหรับผู้ใช้ส่วนใหญ่ โมเดล
text-embedding-004
ของ Vertex AI เป็นตัวเลือกที่ดีสำหรับข้อความภาษาอังกฤษ และโมเดลtext-multilingual-embedding-002
เหมาะสำหรับข้อความหลายภาษา ในส่วน Vector Search ของคอนโซล 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, }, ], }), ], });
ระบุเครื่องมือฝังที่คุณเลือกในขั้นตอนแรก รวมถึงเครื่องมือจัดทำดัชนีและดึงข้อมูลเอกสารที่คุณสร้างในขั้นตอนก่อนหน้า
หากต้องการกําหนดค่าปลั๊กอินให้ใช้ดัชนีการค้นหาด้วยเวกเตอร์ที่คุณสร้างไว้ก่อนหน้านี้ คุณต้องระบุค่าหลายค่า ซึ่งดูได้ในส่วนการค้นหาด้วยเวกเตอร์ของคอนโซล Google Cloud ดังนี้
indexId
: แสดงในแท็บดัชนีindexEndpointId
: แสดงในแท็บปลายทางการจัดทําดัชนีdeployedIndexId
และpublicDomainName
: แสดงอยู่ในหน้า "ข้อมูลดัชนีที่ติดตั้งใช้งาน" ซึ่งเปิดได้โดยคลิกชื่อดัชนีที่ติดตั้งใช้งานในแท็บใดแท็บหนึ่งข้างต้น
เมื่อกําหนดค่าทุกอย่างแล้ว คุณจะใช้เครื่องมือจัดทําดัชนีและเครื่องมือดึงข้อมูลในแอปพลิเคชัน 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, });
ดูตัวอย่างโค้ดสำหรับ
- Vertex Vector Search + BigQuery
- Vertex Vector Search + Firestore
- Vertex Vector Search + ฐานข้อมูลที่กําหนดเอง
การแคชบริบท
ปลั๊กอิน Genkit ของ Vertex AI รองรับการแคชบริบท ซึ่งช่วยให้โมเดลนำเนื้อหาที่แคชไว้ก่อนหน้านี้มาใช้ซ้ำเพื่อเพิ่มประสิทธิภาพการใช้โทเค็นเมื่อจัดการกับเนื้อหาจำนวนมากได้ ฟีเจอร์นี้มีประโยชน์อย่างยิ่งสำหรับขั้นตอนการสนทนาหรือสถานการณ์ที่โมเดลอ้างอิงเนื้อหาจำนวนมากอย่างสอดคล้องกันในคําขอหลายรายการ
วิธีใช้การแคชบริบท
หากต้องการเปิดใช้การแคชบริบท โปรดตรวจสอบว่าโมเดลของคุณรองรับการแคช เช่น gemini15Flash
และ gemini15Pro
เป็นรุ่นที่รองรับการแคชบริบท และคุณจะต้องระบุหมายเลขเวอร์ชัน 001
คุณกำหนดกลไกการแคชในแอปพลิเคชันได้โดยทำดังนี้
const ai = genkit({
plugins: [googleAI()],
});
const llmResponse = await ai.generate({
messages: [
{
role: 'user',
content: [{ text: 'Here is the relevant text from War and Peace.' }],
},
{
role: 'model',
content: [
{
text: 'Based on War and Peace, here is some analysis of Pierre Bezukhov’s character.',
},
],
metadata: {
cache: {
ttlSeconds: 300, // Cache this message for 5 minutes
},
},
},
],
model: gemini15Flash,
prompt: 'Describe Pierre’s transformation throughout the novel.',
});
ในการตั้งค่านี้
- messages
: อนุญาตให้คุณส่งประวัติการสนทนา
- metadata.cache.ttlSeconds
: ระบุ Time to Live (TTL) สําหรับการแคชการตอบกลับที่เฉพาะเจาะจง
ตัวอย่าง: ใช้ประโยชน์จากข้อความขนาดใหญ่ด้วยบริบท
สําหรับแอปพลิเคชันที่อ้างอิงเอกสารที่มีความยาว เช่น สงครามและสันติภาพหรือลอร์ดออฟเดอะริง คุณสามารถจัดโครงสร้างการค้นหาเพื่อใช้บริบทที่แคชไว้ซ้ำได้ ดังนี้
const textContent = await fs.readFile('path/to/war_and_peace.txt', 'utf-8');
const llmResponse = await ai.generate({
messages: [
{
role: 'user',
content: [{ text: textContent }], // Include the large text as context
},
{
role: 'model',
content: [
{
text: 'This analysis is based on the provided text from War and Peace.',
},
],
metadata: {
cache: {
ttlSeconds: 300, // Cache the response to avoid reloading the full text
},
},
},
],
model: gemini15Flash,
prompt: 'Analyze the relationship between Pierre and Natasha.',
});
ประโยชน์ของการจัดเก็บแคชบริบท
- ประสิทธิภาพที่ดีขึ้น: ลดความจำเป็นในการประมวลผลอินพุตขนาดใหญ่ซ้ำๆ
- ประหยัดค่าใช้จ่าย: ลดการใช้ API สําหรับข้อมูลที่ซ้ำซ้อนเพื่อเพิ่มประสิทธิภาพการใช้โทเค็น
- เวลาในการตอบสนองที่ดีขึ้น: เพิ่มความเร็วในการตอบกลับสำหรับคำค้นหาซ้ำหรือที่เกี่ยวข้อง
รุ่นที่รองรับการแคชบริบท
เฉพาะบางรุ่นเท่านั้นที่รองรับการแคชบริบท เช่น gemini15Flash
และ gemini15Pro
และปัจจุบันรองรับเฉพาะหมายเลขเวอร์ชัน 001
เท่านั้น หากใช้รูปแบบที่ระบบไม่รองรับ ระบบจะแสดงข้อผิดพลาดที่ระบุว่าใช้การแคชไม่ได้
อ่านเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการแคชบริบทใน Vertex AI ในเอกสารประกอบ