پلاگین Vertex AI

پلاگین 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، Cloud Run و غیره) اجرا می کنید، GCLOUD_PROJECT به طور خودکار روی شناسه پروژه محیط تنظیم می شود.
  • می توانید مکان API را با تنظیم location در پیکربندی vertexAI() یا با تنظیم متغیر محیطی GCLOUD_LOCATION مشخص کنید.
  • برای ارائه اعتبارنامه API، باید اعتبارنامه پیش‌فرض Google Cloud Application را تنظیم کنید.

    1. برای مشخص کردن اعتبار خود:

      • اگر جریان خود را از یک محیط Google Cloud (توابع Cloud، Cloud Run و غیره) اجرا می کنید، این به طور خودکار تنظیم می شود.
      • در محیط توسعه دهنده محلی خود، این کار را با اجرای:

        gcloud auth application-default login
      • برای محیط های دیگر، به اسناد اعتبارنامه پیش فرض برنامه مراجعه کنید.

    2. علاوه بر این، مطمئن شوید که نقش Vertex AI User IAM ( roles/aiplatform.user ) به حساب داده شده است. اسناد کنترل دسترسی Vertex 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 یا داده‌های خودتان، پشتیبانی می‌کند.

مثال:

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

شما می توانید از این مرجع برای تعیین اینکه یک نمایه ساز یا بازیابی از کدام embedder استفاده می کند استفاده کنید. به عنوان مثال، اگر از 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

اگر به مدل های کلود 3 ( هایکو ، غزل یا اپوس ) در Vertex AI Model Garden دسترسی دارید، می توانید آنها را با 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?',
});

Llama 3.1 405b در Vertex AI Model Garden

ابتدا باید سرویس 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 Rapid Evaluation، یک بلوک 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 اضافه می‌کند. مثال دو رویکرد را نشان می‌دهد: اندازه‌گیری 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:

  1. مدل تعبیه را انتخاب کنید. این مدل وظیفه ایجاد جاسازی های برداری از متن را بر عهده دارد. کاربران پیشرفته ممکن است از یک مدل جاسازی بهینه شده برای مجموعه داده های خاص خود استفاده کنند، اما برای اکثر کاربران، مدل Vertex AI text-embedding-004 انتخاب خوبی برای متن انگلیسی و مدل 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 Plugin Retriever and Indexer with Local File را ببینید.

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

    embedder را که در مرحله اول انتخاب کردید و نمایه ساز سند و بازیابی که در مرحله قبل ایجاد کردید را وارد کنید.

    برای پیکربندی افزونه برای استفاده از نمایه جستجوی برداری که قبلاً ایجاد کرده‌اید، باید چندین مقدار ارائه کنید که می‌توانید در بخش جستجوی برداری در کنسول Google Cloud پیدا کنید:

    • indexId : در برگه Indexes فهرست شده است
    • indexEndpointId : در برگه Index Endpoints فهرست شده است
    • 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,
    });
    

نمونه کدها را ببینید: