Vertex AI eklentisi

Vertex AI eklentisi, çeşitli yapay zeka hizmetlerine arayüz sağlar:

Kurulum

npm i --save @genkit-ai/vertexai

Bu eklentiyi kullanan akışları yerel olarak çalıştırmak istiyorsanız Google Cloud KSA aracının da yüklü olması gerekir.

Yapılandırma

Bu eklentiyi kullanmak için Genkit'i ilk kez başlattığınızda belirtin:

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

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

Eklenti, Google Cloud proje kimliğinizi, Vertex API istekleri göndermek istediğiniz bölgeyi ve Google Cloud proje kimlik bilgilerinizi belirtmenizi gerektirir.

  • Google Cloud proje kimliğinizi vertexAI() yapılandırmasında projectId'yi ayarlayarak veya GCLOUD_PROJECT ortam değişkenini ayarlayarak belirtebilirsiniz. Akışınızı bir Google Cloud ortamından (Cloud Functions, Cloud Run vb.) çalıştırıyorsanız GCLOUD_PROJECT otomatik olarak ortamın proje kimliğine ayarlanır.
  • API konumunu, vertexAI() yapılandırmasında location'ü ayarlayarak veya GCLOUD_LOCATION ortam değişkenini ayarlayarak belirtebilirsiniz.
  • API kimlik bilgilerini sağlamak için Google Cloud Uygulama Varsayılan Kimlik Bilgileri'ni ayarlamanız gerekir.

    1. Kimlik bilgilerinizi belirtmek için:

      • Akışınızı bir Google Cloud ortamından (Cloud Functions, Cloud Run vb.) çalıştırıyorsanız bu ayar otomatik olarak yapılır.
      • Yerel geliştirici ortamınızda aşağıdakileri çalıştırarak bunu yapın:

        gcloud auth application-default login
      • Diğer ortamlar için Uygulama Varsayılan Kimlik Bilgileri dokümanlarına bakın.

    2. Ayrıca, hesaba Vertex AI Kullanıcı IAM rolünün (roles/aiplatform.user) atandığından emin olun. Vertex AI erişim denetimi belgelerine bakın.

Kullanım

Üretken yapay zeka modelleri

Bu eklenti, desteklenen üretken yapay zeka modellerine ait referansları statik olarak dışa aktarır:

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

ai.generate()'ün hangi modeli kullandığını belirtmek için bu referansları kullanabilirsiniz:

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

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

Bu eklenti, Google Arama'yı veya kendi verilerinizi kullanarak Gemini metin yanıtlarını temellendirmeyi de destekler.

Örnek:

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

Bu eklenti, Gecko metin yerleştirme modeline ait bir referansı da statik olarak dışa aktarır:

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

Bir dizine ekleyen veya alıcı aracının hangi yerleştiriciyi kullandığını belirtmek için bu referansı kullanabilirsiniz. Örneğin, Chroma DB kullanıyorsanız:

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

Alternatif olarak doğrudan yerleşim oluşturabilirsiniz:

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 modeli, kullanıcı isteminden resim oluşturmanıza olanak tanır:

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

ve hatta mevcut resimleri gelişmiş şekilde düzenleme:

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

Daha ayrıntılı seçenekler için Imagen modeli belgelerine bakın.

Vertex AI Model Garden'da Anthropic Claude 3

Vertex AI Model Garden'da Claude 3 modellerine (haiku, sonnet veya opus) erişiminiz varsa bunları Genkit ile kullanabilirsiniz.

Vertex AI Model Garden modellerini etkinleştirmek için örnek yapılandırma aşağıda verilmiştir:

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

Ardından bunları normal modeller olarak kullanın:

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

Vertex AI Model Garden'da Llama 3.1 405b

Öncelikle Vertex AI Model Garden'da Llama 3.1 API Hizmeti'ni etkinleştirmeniz gerekir.

Vertex AI eklentisinde Llama 3.1 405b için örnek yapılandırma aşağıda verilmiştir:

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

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

Ardından, normal modeller gibi kullanın:

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

Vertex AI Model Garden'da Mistral modelleri

Vertex AI Model Garden'da Mistral modellerine (Mistral Large, Mistral Nemo veya Codestral) erişiminiz varsa bunları Genkit ile kullanabilirsiniz.

Vertex AI Model Garden modellerini etkinleştirmek için örnek yapılandırma aşağıda verilmiştir:

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

Ardından bunları normal modeller olarak kullanın:

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

Modeller şunları destekler: - mistralLarge: İşlev çağırma özellikleri sunan en yeni Mistral büyük modeli - mistralNemo: Verimlilik ve hız için optimize edilmiştir - codestral: Kod oluşturma görevleri için özelleştirilmiştir

Her model, akış yanıtlarını ve işlev çağrılarını destekler:

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

Değerlendirenler

Vertex AI Rapid Evaluation'daki değerlendiricileri kullanmak için vertexAI eklenti yapılandırmanıza bir evaluation bloğu ekleyin.

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

Yukarıdaki yapılandırma, Safety ve ROUGE metrikleri için değerlendiriciler ekler. Örnekte iki yaklaşım gösterilmektedir: Safety metriği varsayılan spesifikasyonu kullanırken ROUGE metriği, ruj türünü rougeLsum olarak ayarlayan özelleştirilmiş bir spesifikasyon sağlar.

Her iki değerlendirme aracı da uyumlu bir veri kümesiyle (yani output ve reference alanları içeren bir veri kümesiyle) genkit eval:run komutu kullanılarak çalıştırılabilir. Safety değerlendiricisi, yalnızca bir output gerektirdiğinden genkit eval:flow -e vertexai/safety komutu kullanılarak da çalıştırılabilir.

Dizine ekleyenler ve veri toplayıcılar

Genkit Vertex AI eklentisi, Vertex AI Vector Search hizmeti tarafından desteklenen dizine ekleme ve alma uygulamaları içerir.

(RAG uygulamasında dizine ekleme araçlarının ve alıcılarının nasıl kullanıldığını öğrenmek için Almayla artırılmış üretim sayfasına bakın.)

Vertex AI Vector Search hizmeti, seçtiğiniz doküman deposuyla birlikte çalışan bir doküman dizinidir: Doküman deposu dokümanların içeriğini içerir ve Vertex AI Vector Search dizini her doküman için vektör gömmesini ve doküman deposundaki dokümana referans içerir. Belgeleriniz Vertex AI Vector Search hizmeti tarafından dizine eklendikten sonra, arama sorgularına yanıt vererek belge deponuzda dizin listeleri oluşturabilir.

Vertex AI eklentisi tarafından sağlanan dizine ekleme ve alma uygulamaları, belge deposu olarak Cloud Firestore veya BigQuery'yi kullanır. Eklenti, diğer doküman depolarını desteklemek için uygulayabileceğiniz arayüzler de içerir.

Vertex AI Vector Search'ü kullanmak için:

  1. Bir yerleştirme modeli seçin. Bu model, metinden vektör gömmeleri oluşturmaktan sorumludur. İleri düzey kullanıcılar, kendi veri kümeleri için optimize edilmiş bir yerleştirme modeli kullanabilir ancak çoğu kullanıcı için Vertex AI'ın text-embedding-004 modeli İngilizce metinler için, text-multilingual-embedding-002 modeli ise çok dilli metinler için iyi bir seçimdir.
  2. Google Cloud Console'un Vektör Arama bölümünde yeni bir dizin oluşturun. En önemli ayarlar şunlardır:

    • Boyutlar: Seçtiğiniz yerleştirme modeli tarafından üretilen vektörlerin boyutunu belirtin. text-embedding-004 ve text-multilingual-embedding-002 modelleri 768 boyutlu vektörler oluşturur.
    • Güncelleme yöntemi: Akış güncellemelerini seçin.

    Dizini oluşturduktan sonra standart (herkese açık) bir uç noktaya dağıtın.

  3. Kullanmak istediğiniz doküman deposu için bir doküman dizine ekleme aracı ve alıcı alın:

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

    Diğer

    Diğer doküman depolarını desteklemek için DocumentRetriever ve DocumentIndexer için kendi uygulamalarınızı sağlayabilirsiniz:

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

    Örnek için Yerel Dosya İçeren Örnek Vertex AI Eklenti Alıcısı ve Dizine Eklemesi başlıklı makaleyi inceleyin.

  4. vertexAI eklenti yapılandırmanıza bir vectorSearchOptions bloğu ekleyin:

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

    İlk adımda seçtiğiniz yerleştiriciyi ve önceki adımda oluşturduğunuz doküman dizine ekleme ve alma aracını sağlayın.

    Eklentiyi daha önce oluşturduğunuz Vector Search dizini kullanacak şekilde yapılandırmak için Google Cloud Console'un Vector Search bölümünde bulabileceğiniz çeşitli değerleri sağlamanız gerekir:

    • indexId: Dizini sekmesinde listelenir.
    • indexEndpointId: Dizine Eklenen Uç Noktalar sekmesinde listelenmiştir.
    • deployedIndexId ve publicDomainName: Daha önce bahsedilen sekmelerden birinde dağıtılan dizinin adını tıklayarak açtığınız "Dağıtılan dizin bilgileri" sayfasında listelenir.
  5. Her şey yapılandırıldığına göre, dizine ekleme aracını ve alıcıyı Genkit uygulamanızda kullanabilirsiniz:

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

Aşağıdakiler için kod örneklerine bakın:

Bağlam Önbelleğe Alma

Vertex AI Genkit eklentisi, modellerin büyük içerik parçalarıyla çalışırken jeton kullanımını optimize etmek için önceden önbelleğe alınmış içeriği yeniden kullanmasına olanak tanıyan bağlam önbelleğe alma özelliğini destekler. Bu özellik, özellikle modelin birden fazla istekte tutarlı bir şekilde büyük bir içerik parçasına referans verdiği sohbet akışları veya senaryolar için kullanışlıdır.

Bağlam Önbelleğe Alma özelliğini kullanma

Bağlam önbelleğe alma özelliğini etkinleştirmek için modelinizin bu özelliği desteklediğinden emin olun. Örneğin, gemini15Flash ve gemini15Pro, bağlam önbelleğe alma özelliğini destekleyen modellerdir ve 001 sürüm numarasını belirtmeniz gerekir.

Uygulamanızda aşağıdaki gibi bir önbelleğe alma mekanizması tanımlayabilirsiniz:

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

Bu kurulumda: - messages: İleti dizisi geçmişini iletmenize olanak tanır. - metadata.cache.ttlSeconds: Belirli bir yanıtın önbelleğe alınması için geçerlilik süresini (TTL) belirtir.

Örnek: Bağlamla Büyük Metinlerden Yararlanma

Savaş ve Barış veya Yüzüklerin Efendisi gibi uzun belgelere referans veren uygulamalar için sorgularınızı, önbelleğe alınmış bağlamları yeniden kullanacak şekilde yapılandırabilirsiniz:


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

Bağlam önbelleğe almanın avantajları

  1. İyileştirilmiş Performans: Büyük girişlerin tekrar tekrar işlenmesi ihtiyacını azaltır.
  2. Maliyet Verimliliği: Gereksiz veriler için API kullanımını azaltarak jeton tüketimini optimize eder.
  3. Daha iyi gecikme: Tekrarlanan veya ilgili sorguların yanıt sürelerini hızlandırır.

Bağlam Önbelleğe Alma İçin Desteklenen Modeller

Bağlam önbelleğe alma özelliği yalnızca gemini15Flash ve gemini15Pro gibi belirli modellerde desteklenir ve şu anda yalnızca 001 sürüm numaralarında kullanılabilir. Desteklenmeyen bir model kullanılırsa önbelleğe alma işleminin uygulanamayacağını belirten bir hata meydana gelir.

Daha fazla bilgi

Vertex AI'da bağlam önbelleğe alma hakkında daha fazla bilgi için belgelerine göz atın.