ปลั๊กอิน Vertex AI

ปลั๊กอิน Vertex AI มีอินเทอร์เฟซสำหรับบริการ 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

    1. วิธีระบุข้อมูลเข้าสู่ระบบ

      • หากคุณเรียกใช้โฟลว์จากสภาพแวดล้อม Google Cloud (Cloud Functions, Cloud Run และอื่นๆ) ระบบจะตั้งค่านี้โดยอัตโนมัติ
      • ในสภาพแวดล้อมการทํางานแบบสํารวจในเครื่อง ให้ทําดังนี้

        gcloud auth application-default login
      • สําหรับสภาพแวดล้อมอื่นๆ โปรดดูเอกสารข้อมูลเข้าสู่ระบบเริ่มต้นของแอปพลิเคชัน

    2. นอกจากนี้ โปรดตรวจสอบว่าบัญชีได้รับบทบาท 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

  1. เลือกรูปแบบการฝัง โมเดลนี้มีหน้าที่สร้างการฝังเวกเตอร์จากข้อความ ผู้ใช้ขั้นสูงอาจใช้โมเดลการฝังที่เพิ่มประสิทธิภาพสำหรับชุดข้อมูลหนึ่งๆ แต่สำหรับผู้ใช้ส่วนใหญ่ โมเดล text-embedding-004 ของ Vertex AI เป็นตัวเลือกที่ดีสำหรับข้อความภาษาอังกฤษ และโมเดล text-multilingual-embedding-002 เหมาะสำหรับข้อความหลายภาษา
  2. ในส่วน Vector Search ของคอนโซล Google Cloud ให้สร้างดัชนีใหม่ การตั้งค่าที่สําคัญที่สุดมีดังนี้

    • มิติข้อมูล: ระบุมิติข้อมูลของเวกเตอร์ที่โมเดลการฝังที่คุณเลือกสร้างขึ้น รุ่น text-embedding-004 และ text-multilingual-embedding-002 จะสร้างเวกเตอร์ 768 มิติ
    • วิธีการอัปเดต: เลือกการอัปเดตสตรีมมิง

    หลังจากสร้างดัชนีแล้ว ให้นำไปติดตั้งใช้งานกับปลายทางมาตรฐาน (สาธารณะ)

  3. รับเครื่องมือจัดทำดัชนีและดึงข้อมูลเอกสารสำหรับที่เก็บเอกสารที่ต้องการใช้

    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 ที่มีไฟล์ในเครื่อง

  4. เพิ่มบล็อก 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: แสดงอยู่ในหน้า "ข้อมูลดัชนีที่ติดตั้งใช้งาน" ซึ่งเปิดได้โดยคลิกชื่อดัชนีที่ติดตั้งใช้งานในแท็บใดแท็บหนึ่งข้างต้น
  5. เมื่อกําหนดค่าทุกอย่างแล้ว คุณจะใช้เครื่องมือจัดทําดัชนีและเครื่องมือดึงข้อมูลในแอปพลิเคชัน 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,
    });
    

ดูตัวอย่างโค้ดสำหรับ