Vertex AI 플러그인

Vertex AI 플러그인은 여러 AI 서비스에 인터페이스를 제공합니다.

설치

npm i --save @genkit-ai/vertexai

이 플러그인을 사용하는 흐름을 로컬에서 실행하려면 Google Cloud CLI 도구 설치

구성

이 플러그인을 사용하려면 configureGenkit()를 호출할 때 지정합니다.

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

export default configureGenkit({
  plugins: [
    vertexAI({ projectId: 'your-cloud-project', location: 'us-central1' }),
  ],
  // ...
});

플러그인을 사용하려면 Google Cloud 프로젝트 ID, Vertex API 요청을 수행할 리전, Google Cloud 프로젝트 사용자 인증 정보를 지정해야 합니다.

  • 다음에서 projectId를 설정하여 Google Cloud 프로젝트 ID를 지정할 수 있습니다. vertexAI() 구성 또는 GCLOUD_PROJECT 환경 설정 변수의 값을 반환합니다. Google Cloud 환경 (Cloud Monitoring)에서 Functions, Cloud Run 등)에서 GCLOUD_PROJECT가 자동으로 환경의 프로젝트 ID입니다.

  • vertexAI() 구성에서 location를 설정하거나 GCLOUD_LOCATION 환경 변수를 설정하여 API 위치를 지정할 수 있습니다.

  • API 사용자 인증 정보를 제공하려면 Google Cloud 애플리케이션 기본 사용자 인증 정보를 설정해야 합니다.

    1. 사용자 인증 정보를 지정하려면 다음 단계를 따르세요.

      • Google Cloud 환경(Cloud Functions, Cloud Run 등)에서 흐름을 실행하는 경우 이는 자동으로 설정됩니다

      • 로컬 개발 환경에서 다음을 실행하여 수행합니다.

      gcloud auth application-default login
    2. 또한 계정에 Vertex AI 사용자 IAM 역할(roles/aiplatform.user)이 부여되었는지 확인합니다. Vertex AI 액세스 제어 문서를 참조하세요.

용도

생성형 AI 모델

이 플러그인은 지원되는 생성형 AI 모델에 대한 참조를 정적으로 내보냅니다.

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

이러한 참조를 사용하여 generate()에서 사용하는 모델을 지정할 수 있습니다.

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

또한 이 플러그인은 다음을 사용하여 Gemini 텍스트 대답의 그라운딩을 지원합니다. Google 검색 또는 자체 데이터를 사용할 수 있습니다

예:

await generate({
  model: gemini15Flash,
  prompt: ...,
  config: {
    googleSearchRetrieval: {
      disableAttribution: true,
    }
    vertexRetrieval: {
      datastore: {
        projectId: 'your-cloud-project',
        location: 'us-central1',
        collection: 'your-collection',
      },
      disableAttribution: true,
    }
  }
})

이 플러그인은 Gecko 텍스트 임베딩 모델에 대한 참조도 정적으로 내보냅니다.

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

이 참조를 사용하여 색인 생성기 또는 검색기로 사용할 임베딩을 지정할 수 있습니다. 사용합니다 예를 들어 Chroma DB를 사용하는 경우:

configureGenkit({
  plugins: [
    chroma([
      {
        embedder: textEmbeddingGecko,
        collectionName: 'my-collection',
      },
    ]),
  ],
});

또는 임베딩을 직접 생성할 수도 있습니다.

// import { embed, EmbedderArgument } from '@genkit-ai/ai/embedder';
const embedding = await embed({
  embedder: textEmbeddingGecko,
  content: 'How many widgets do you have in stock?',
});

Imagen3 모델을 사용하면 사용자 프롬프트에서 이미지를 생성할 수 있습니다.

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

const response = await generate({
  model: imagen3,
  output: { format: 'media' },
  prompt: 'a banana riding a bicycle',
});

return response.media();

Vertex AI Model Garden의 Anthropic Claude 3

Vertex AI Model Garden에서 Claude 3 모델 (haiku, sonnet, opus)에 액세스할 수 있는 경우 Genkit와 함께 사용할 수 있습니다.

다음은 Vertex AI Model Garden 모델을 사용 설정하기 위한 샘플 구성입니다.

import {
  vertexAI,
  claude3Haiku,
  claude3Sonnet,
  claude3Opus,
} from '@genkit-ai/vertexai';

export default configureGenkit({
  plugins: [
    vertexAI({
      location: 'us-central1',
      modelGarden: {
        models: [claude3Haiku, claude3Sonnet, claude3Opus],
      },
    }),
  ],
});

그런 다음 일반 모델로 사용합니다.

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

Vertex AI Model Garden의 Llama 3.1 405b

먼저 Vertex AI Model Garden에서 Llama 3.1 API 서비스를 사용 설정해야 합니다.

다음은 Vertex AI 플러그인의 Llama 3.1 405b 샘플 구성입니다.

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

export default configureGenkit({
  plugins: [
    vertexAI({
      location: 'us-central1',
      modelGarden: {
        models: [llama31],
      },
    }),
  ],
});

그런 다음 일반 모델로 사용합니다.

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

평가자

Vertex AI Rapid Evaluation의 평가자를 사용하려면 vertexAI 플러그인 구성에 evaluation 블록을 추가합니다.

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

export default configureGenkit({
  plugins: [
    vertexAI({
      projectId: 'your-cloud-project',
      location: 'us-central1',
      evaluation: {
        metrics: [
          VertexAIEvaluationMetricType.SAFETY,
          {
            type: VertexAIEvaluationMetricType.ROUGE,
            metricSpec: {
              rougeType: 'rougeLsum',
            },
          },
        ],
      },
    }),
  ],
  // ...
});

위 구성은 SafetyROUGE 측정항목의 평가자를 추가합니다. 이 예에서는 두 가지 접근 방식을 보여줍니다. Safety 측정항목은 기본 사양을 사용하는 반면 ROUGE 측정항목은 루즈 유형을 rougeLsum로 설정하는 맞춤 사양을 제공합니다.

두 평가자는 호환되는 데이터 세트(즉, outputreference 필드가 있는 데이터 세트)와 함께 genkit eval:run 명령어를 사용하여 실행할 수 있습니다. Safety 평가자는 output만 필요하므로 genkit eval:flow -e vertexai/safety 명령어를 사용하여 실행할 수도 있습니다.

색인 생성기 및 검색기

색인 생성기 및 검색기 구현을 포함하는 Genkit Vertex AI 플러그인 Vertex AI 벡터 검색 서비스로 지원됩니다

RAG 구현에서 색인 생성기와 검색기가 사용되는 방식은 검색 증강 생성 페이지를 참고하세요.

Vertex AI 벡터 검색 서비스는 선택한 문서 저장소와 함께 작동하는 문서 색인입니다. 문서 저장소에는 문서의 콘텐츠가 포함되며 Vertex AI 벡터 검색 색인에는 각 문서의 벡터 임베딩과 문서 저장소의 문서 참조가 포함됩니다. Vertex AI 벡터 검색 서비스에서 문서의 색인을 생성한 후에는 사용하여 문서 저장소에 색인 목록을 생성합니다.

Vertex AI 플러그인이 제공하는 색인 생성기 및 검색기 구현은 Cloud Firestore 또는 BigQuery를 문서 저장소로 사용합니다. 또한 플러그인은 에는 다른 문서 저장소를 지원하기 위해 구현할 수 있는 인터페이스가 포함되어 있습니다.

Vertex AI 벡터 검색을 사용하려면 다음 단계를 따르세요.

  1. 임베딩 모델을 선택합니다. 이 모델은 텍스트에서 벡터 임베딩을 만듭니다. 고급 사용자는 특정 데이터 세트에 최적화된 임베딩 모델을 사용할 수 있지만, 대부분의 사용자에게는 Vertex AI의 text-embedding-004 모델이 영어 텍스트에 적합하고 text-multilingual-embedding-002 모델이 다국어 텍스트에 적합합니다.

  2. Vector Search 섹션에서 새 색인을 만듭니다. 가장 중요한 설정은 다음과 같습니다.

    • 측정기준: 평가 결과에서 생성된 벡터의 차원을 임베딩 모델입니다. text-embedding-004text-multilingual-embedding-002 모델은 768차원의 벡터를 생성합니다.

    • 업데이트 방법: 스트리밍 업데이트를 선택합니다.

    색인을 만든 후 표준(공개) 엔드포인트에 배포합니다.

  3. 사용하려는 문서 저장소의 문서 색인 생성기 및 검색 도구를 가져옵니다.

    Cloud Firestore

    import {
      getFirestoreDocumentIndexer,
      getFirestoreDocumentRetriever
    } from '@genkit-ai/vertexai';
    
    import { initializeApp } from 'firebase-admin/app';
    import { getFirestore } from 'firebase-admin/firestore';
    
    initializeApp({ projectId: PROJECT_ID });
    const db = getFirestore();
    
    const firestoreDocumentRetriever: DocumentRetriever =
      getFirestoreDocumentRetriever(db, FIRESTORE_COLLECTION);
    const firestoreDocumentIndexer: DocumentIndexer =
      getFirestoreDocumentIndexer(db, FIRESTORE_COLLECTION);
    

    BigQuery

    import {
      getBigQueryDocumentIndexer,
      getBigQueryDocumentRetriever,
    } from '@genkit-ai/vertexai';
    import { BigQuery } from '@google-cloud/bigquery';
    
    const bq = new BigQuery({ projectId: PROJECT_ID });
    
    const bigQueryDocumentRetriever: DocumentRetriever =
      getBigQueryDocumentRetriever(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
    const bigQueryDocumentIndexer: DocumentIndexer =
      getBigQueryDocumentIndexer(bq, BIGQUERY_TABLE, BIGQUERY_DATASET);
    

    기타

    다른 문서 저장소를 지원하려면 자체 구현을 제공할 수 있습니다. DocumentRetrieverDocumentIndexer 중:

    const myDocumentRetriever: DocumentRetriever = async (neighbors: Neighbor[]) => {
      // Return the documents referenced by `neighbors`.
      // ...
    }
    const myDocumentIndexer: DocumentIndexer = async (documents: Document[]) => {
      // Add `documents` to storage.
      // ...
    }
    

    예를 보려면 로컬 파일이 포함된 샘플 Vertex AI 플러그인 검색기 및 색인 생성기를 참고하세요.

  4. vertexAI 플러그인 구성에 vectorSearchOptions 블록을 추가합니다.

    import { configureGenkit } from '@genkit-ai/core';
    import { vertexAI, textEmbedding004 } from '@genkit-ai/vertexai';
    
    configureGenkit({
      plugins: [
        vertexAI({
          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,
            },
          ],
        }),
      ],
    });
    

    첫 번째 단계에서 선택한 삽입 도구와 이전 단계에서 만든 문서 색인 생성기 및 검색 도구를 제공합니다.

    앞서 만든 벡터 검색 색인을 사용하도록 플러그인을 구성하려면 여러 값을 제공해야 하는데, 이러한 값은 벡터 검색 섹션으로 이동합니다.

    • indexId: 색인 탭에 나열됨
    • indexEndpointId: 색인 엔드포인트 탭에 나열됩니다.
    • deployedIndexIdpublicDomainName: '배포된 색인'에 나열됨 정보" 페이지: 배포된 색인의 이름을 클릭하여 열 수 있습니다. 앞서 말씀드린 탭 중 하나에서
  5. 이제 모든 항목이 구성되었으므로 플러그인에서 검색기 및 색인 생성기 참조를 가져옵니다.

    import {
      vertexAiIndexerRef,
      vertexAiRetrieverRef,
    } from '@genkit-ai/vertexai';
    

    index()retrieve()에 대한 참조를 전달합니다.

    await index({
      indexer: vertexAiIndexerRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      documents,
    });
    
    const res = await retrieve({
      retriever: vertexAiRetrieverRef({
        indexId: VECTOR_SEARCH_INDEX_ID,
      }),
      query: queryDocument,
    });
    

다음에 대한 코드 샘플을 참조하세요.