Trình bổ trợ Vertex AI

Trình bổ trợ Vertex AI cung cấp giao diện cho một số dịch vụ AI:

Lắp đặt

npm i --save @genkit-ai/vertexai

Nếu muốn chạy các flow sử dụng trình bổ trợ này trên máy, bạn cũng cần cài đặt công cụ Google Cloud CLI.

Cấu hình

Để sử dụng trình bổ trợ này, hãy chỉ định trình bổ trợ đó khi bạn khởi chạy Genkit:

import { genkit } from 'genkit';
import { vertexAI } from '@genkit-ai/vertexai';

const ai = genkit({
  plugins: [
    vertexAI({ location: 'us-central1' }),
  ],
});

Trình bổ trợ yêu cầu bạn chỉ định mã dự án Google Cloud, khu vực mà bạn muốn gửi yêu cầu API Vertex và thông tin xác thực dự án Google Cloud.

  • Bạn có thể chỉ định mã dự án Google Cloud bằng cách đặt projectId trong cấu hình vertexAI() hoặc bằng cách đặt biến môi trường GCLOUD_PROJECT. Nếu bạn đang chạy flow từ một môi trường Google Cloud (Cloud Functions, Cloud Run, v.v.), GCLOUD_PROJECT sẽ tự động được đặt thành mã dự án của môi trường đó.
  • Bạn có thể chỉ định vị trí API bằng cách đặt location trong cấu hình vertexAI() hoặc bằng cách đặt biến môi trường GCLOUD_LOCATION.
  • Để cung cấp thông tin xác thực API, bạn cần thiết lập Thông tin xác thực mặc định của ứng dụng Google Cloud.

    1. Cách chỉ định thông tin xác thực:

      • Nếu bạn đang chạy flow từ môi trường Google Cloud (Cloud Functions, Cloud Run, v.v.), thì giá trị này sẽ được đặt tự động.
      • Trên môi trường phát triển cục bộ, hãy thực hiện việc này bằng cách chạy:

        gcloud auth application-default login
      • Đối với các môi trường khác, hãy xem tài liệu về Thông tin xác thực mặc định của ứng dụng.

    2. Ngoài ra, hãy đảm bảo tài khoản được cấp vai trò Người dùng Vertex AI trong IAM (roles/aiplatform.user). Hãy xem tài liệu về kiểm soát quyền truy cập của Vertex AI.

Cách sử dụng

Mô hình AI tạo sinh

Trình bổ trợ này xuất tham chiếu tĩnh đến các mô hình AI tạo sinh được hỗ trợ:

import { gemini15Flash, gemini15Pro, imagen3 } from '@genkit-ai/vertexai';

Bạn có thể sử dụng các tệp tham chiếu này để chỉ định mô hình mà ai.generate() sử dụng:

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

const llmResponse = await ai.generate({
  model: gemini15Flash,
  prompt: 'What should I do when I visit Melbourne?',
});

Trình bổ trợ này cũng hỗ trợ cung cấp cơ sở cho các câu trả lời dạng văn bản của Gemini bằng cách sử dụng Google Tìm kiếm hoặc dữ liệu của riêng bạn.

Ví dụ:

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,
    }
  }
})

Trình bổ trợ này cũng xuất tham chiếu tĩnh đến mô hình nhúng văn bản Gecko:

import { textEmbedding004 } from '@genkit-ai/vertexai';

Bạn có thể sử dụng tài liệu tham khảo này để chỉ định trình nhúng mà trình lập chỉ mục hoặc trình truy xuất sử dụng. Ví dụ: nếu bạn sử dụng Chroma DB:

const ai = genkit({
  plugins: [
    chroma([
      {
        embedder: textEmbedding004,
        collectionName: 'my-collection',
      },
    ]),
  ],
});

Hoặc bạn có thể tạo trực tiếp một nội dung nhúng:

const ai = genkit({
  plugins: [vertexAI({ location: 'us-central1' })],
});

const embedding = await ai.embed({
  embedder: textEmbedding004,
  content: 'How many widgets do you have in stock?',
});

Mô hình Imagen3 cho phép tạo hình ảnh từ câu lệnh của người dùng:

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();

và thậm chí là chỉnh sửa nâng cao cho hình ảnh hiện có:

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();

Hãy tham khảo tài liệu về mô hình Imagen để biết thêm các tuỳ chọn chi tiết.

Anthropic Claude 3 trên Vertex AI Model Garden

Nếu có quyền truy cập vào các mô hình Claude 3 (haiku, sonnet hoặc opus) trong Vertex AI Model Garden, bạn có thể sử dụng các mô hình đó với Genkit.

Dưới đây là cấu hình mẫu để bật các mô hình 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],
    }),
  ],
});

Sau đó, hãy sử dụng các mô hình này dưới dạng mô hình thông thường:

const llmResponse = await ai.generate({
  model: claude3Sonnet,
  prompt: 'What should I do when I visit Melbourne?',
});

Llama 3.1 405b trên Vertex AI Model Garden

Trước tiên, bạn cần bật Dịch vụ API Llama 3.1 trong Vertex AI Model Garden.

Dưới đây là cấu hình mẫu cho Llama 3.1 405b trong trình bổ trợ Vertex AI:

import { genkit } from 'genkit';
import { llama31, vertexAIModelGarden } from '@genkit-ai/vertexai/modelgarden';

const ai = genkit({
  plugins: [
    vertexAIModelGarden({
      location: 'us-central1',
      models: [llama31],
    }),
  ],
});

Sau đó, sử dụng mô hình này như các mô hình thông thường:

const llmResponse = await ai.generate({
  model: llama31,
  prompt: 'Write a function that adds two numbers together',
});

Người đánh giá

Để sử dụng các trình đánh giá từ tính năng Đánh giá nhanh của Vertex AI, hãy thêm một khối evaluation vào cấu hình trình bổ trợ 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',
          },
        },
      ],
    }),
  ],
});

Cấu hình ở trên sẽ thêm các trình đánh giá cho chỉ số SafetyROUGE. Ví dụ này cho thấy hai phương pháp – chỉ số Safety sử dụng thông số kỹ thuật mặc định, trong khi chỉ số ROUGE cung cấp thông số kỹ thuật tuỳ chỉnh đặt loại rouge thành rougeLsum.

Bạn có thể chạy cả hai trình đánh giá bằng lệnh genkit eval:run với một tập dữ liệu tương thích: tức là một tập dữ liệu có các trường outputreference. Bạn cũng có thể chạy trình đánh giá Safety bằng lệnh genkit eval:flow -e vertexai/safety vì trình đánh giá này chỉ yêu cầu output.

Trình lập chỉ mục và trình truy xuất

Trình bổ trợ Genkit Vertex AI bao gồm các hoạt động triển khai chỉ mục và trình truy xuất được hỗ trợ bởi dịch vụ Tìm kiếm vectơ Vertex AI.

(Xem trang Tạo bằng tính năng truy xuất tăng cường để tìm hiểu cách sử dụng trình lập chỉ mục và trình truy xuất trong quá trình triển khai RAG.)

Dịch vụ Tìm kiếm vectơ Vertex AI là một chỉ mục tài liệu hoạt động cùng với kho tài liệu mà bạn chọn: kho tài liệu chứa nội dung của tài liệu và chỉ mục Tìm kiếm vectơ Vertex AI chứa, đối với mỗi tài liệu, vectơ nhúng và tham chiếu đến tài liệu trong kho tài liệu. Sau khi dịch vụ Tìm kiếm vectơ AI của Vertex lập chỉ mục tài liệu, dịch vụ này có thể phản hồi các truy vấn tìm kiếm, tạo danh sách chỉ mục vào kho tài liệu của bạn.

Các hoạt động triển khai trình lập chỉ mục và trình truy xuất do trình bổ trợ Vertex AI cung cấp sử dụng Cloud Firestore hoặc BigQuery làm kho tài liệu. Trình bổ trợ này cũng bao gồm các giao diện mà bạn có thể triển khai để hỗ trợ các kho tài liệu khác.

Cách sử dụng tính năng Tìm kiếm vectơ của Vertex AI:

  1. Chọn một mô hình nhúng. Mô hình này chịu trách nhiệm tạo các vectơ nhúng từ văn bản. Người dùng nâng cao có thể sử dụng mô hình nhúng được tối ưu hoá cho các tập dữ liệu cụ thể của họ, nhưng đối với hầu hết người dùng, mô hình text-embedding-004 của Vertex AI là lựa chọn phù hợp cho văn bản tiếng Anh và mô hình text-multilingual-embedding-002 phù hợp với văn bản đa ngôn ngữ.
  2. Trong phần Vector Search (Tìm kiếm vectơ) của Google Cloud Console, hãy tạo một chỉ mục mới. Sau đây là các chế độ cài đặt quan trọng nhất:

    • Phương diện: Chỉ định số chiều của các vectơ do mô hình nhúng mà bạn chọn tạo ra. Mô hình text-embedding-004text-multilingual-embedding-002 tạo ra các vectơ có 768 chiều.
    • Phương thức cập nhật: Chọn cập nhật trực tuyến.

    Sau khi bạn tạo chỉ mục, hãy triển khai chỉ mục đó đến một điểm cuối (công khai) tiêu chuẩn.

  3. Tải trình lập chỉ mục và trình truy xuất tài liệu cho kho tài liệu mà bạn muốn sử dụng:

    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);
    

    Khác

    Để hỗ trợ các kho tài liệu khác, bạn có thể cung cấp cách triển khai DocumentRetrieverDocumentIndexer của riêng mình:

    const myDocumentRetriever = async (neighbors) => {
      // Return the documents referenced by `neighbors`.
      // ...
    }
    const myDocumentIndexer = async (documents) => {
      // Add `documents` to storage.
      // ...
    }
    

    Để biết ví dụ, hãy xem phần Trình truy xuất và lập chỉ mục trình bổ trợ Vertex AI mẫu bằng tệp cục bộ.

  4. Thêm khối vectorSearchOptions vào cấu hình trình bổ trợ 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,
            },
          ],
        }),
      ],
    });
    

    Cung cấp trình nhúng mà bạn đã chọn ở bước đầu tiên, cũng như trình lập chỉ mục và trình truy xuất tài liệu mà bạn đã tạo ở bước trước.

    Để định cấu hình trình bổ trợ sử dụng chỉ mục Tìm kiếm vectơ mà bạn đã tạo trước đó, bạn cần cung cấp một số giá trị. Bạn có thể tìm thấy các giá trị này trong phần Tìm kiếm vectơ của Google Cloud Console:

    • indexId: được liệt kê trên thẻ Chỉ mục
    • indexEndpointId: được liệt kê trên thẻ Điểm cuối của chỉ mục
    • deployedIndexIdpublicDomainName: được liệt kê trên trang "Thông tin về chỉ mục đã triển khai". Bạn có thể mở trang này bằng cách nhấp vào tên của chỉ mục đã triển khai trên một trong hai thẻ được đề cập ở trên
  5. Giờ đây, khi mọi thứ đã được định cấu hình, bạn có thể sử dụng trình lập chỉ mục và trình truy xuất trong ứng dụng 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,
    });
    

Xem mã mẫu cho: