ปลั๊กอิน Vertex AI มีอินเทอร์เฟซสำหรับบริการ AI หลายรายการ ดังนี้
- โมเดล Generative AI ของ Google
- การสร้างข้อความ Gemini
- การสร้างรูปภาพด้วย Imagen2
- การสร้างการฝังข้อความ
- ชุดย่อยของเมตริกการประเมินผ่าน 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',
});
ผู้ประเมิน
หากต้องการใช้เครื่องมือประเมินจากการประเมินอย่างรวดเร็วของ 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 + ฐานข้อมูลที่กําหนดเอง