Jina AI 프로바이더

Jina AI 프로바이더

patelvivekdev/jina-ai-provider 는 Jina AI를 사용해 AI SDK에 텍스트·멀티모달 임베딩 지원을 제공하는 커뮤니티 프로바이더예요.

출처: 문서

본문

설정 (Setup)

Jina 프로바이더는 jina-ai-provider 모듈에서 사용할 수 있어요. 다음과 같이 설치할 수 있어요:

프로바이더 인스턴스 (Provider Instance)

jina-ai-provider에서 기본 프로바이더 인스턴스 jina를 임포트할 수 있어요:

import { jina } from 'jina-ai-provider';

커스터마이즈가 필요하면 jina-ai-provider에서 createJina를 임포트하고 나만의 설정으로 프로바이더 인스턴스를 만들 수 있어요:

import { createJina } from 'jina-ai-provider';

const customJina = createJina({
  // 커스텀 설정
});

다음의 선택적 설정으로 Jina 프로바이더 인스턴스를 커스터마이즈할 수 있어요:

  • baseURL string

    Jina API의 기본 URL이에요. 기본 프리픽스는 https://api.jina.ai/v1이에요.

  • apiKey string

    Authorization 헤더로 보내지는 API 키예요. 기본값은 JINA_API_KEY 환경 변수예요.

  • headers Record<string,string>

    요청에 포함할 커스텀 헤더예요.

  • fetch (input: RequestInfo, init?: RequestInit) => Promise<Response>

    커스텀 fetch 구현이에요. 기본값은 전역 fetch 함수예요. 요청을 가로채는 미들웨어로 사용하거나, 예를 들어 테스트용 커스텀 fetch 구현을 제공할 수 있어요.

텍스트 임베딩 모델 (Text Embedding Models)

.embeddingModel() 팩토리 메서드로 Jina 텍스트 임베딩 API를 호출하는 모델을 만들 수 있어요.

import { jina } from 'jina-ai-provider';

const embeddingModel = jina.embeddingModel('jina-embeddings-v3');

Jina 임베딩 모델을 사용해 embed 또는 embedMany 함수로 임베딩을 생성할 수 있어요:

import { jina } from 'jina-ai-provider';
import { embedMany } from 'ai';

const embeddingModel = jina.embeddingModel('jina-embeddings-v3');

export const generateEmbeddings = async (
  value: string,
): Promise<Array<{ embedding: number[]; content: string }>> => {
  const chunks = value.split('\n');

  const { embeddings } = await embedMany({
    model: embeddingModel,
    values: chunks,
    providerOptions: {
      jina: {
        inputType: 'retrieval.passage',
      },
    },
  });

  return embeddings.map((embedding, index) => ({
    content: chunks[index]!,
    embedding,
  }));
};

멀티모달 임베딩 (Multimodal Embedding)

.multiModalEmbeddingModel() 팩토리 메서드로 Jina 멀티모달(텍스트 + 이미지) 임베딩 API를 호출하는 모델을 만들 수 있어요.

import { jina, type MultimodalEmbeddingInput } from 'jina-ai-provider';
import { embedMany } from 'ai';

const multimodalModel = jina.multiModalEmbeddingModel('jina-clip-v2');

export const generateMultimodalEmbeddings = async () => {
  const values: MultimodalEmbeddingInput[] = [
    { text: 'A beautiful sunset over the beach' },
    { image: 'https://i.ibb.co/r5w8hG8/beach2.jpg' },
  ];

  const { embeddings } = await embedMany<MultimodalEmbeddingInput>({
    model: multimodalModel,
    values,
  });

  return embeddings.map((embedding, index) => ({
    content: values[index]!,
    embedding,
  }));
};

팁: 멀티모달 임베딩을 사용할 때 타입 안전성을 보장하려면 MultimodalEmbeddingInput 타입을 사용하세요. Base64 인코딩 이미지는 data:[mediatype];base64,<data> 형식의 Data URL로 image 속성에 전달할 수 있어요.

프로바이더 옵션 (Provider Options)

Jina 임베딩 옵션은 providerOptions.jina로 전달해요. 다음 옵션이 지원돼요:

  • inputType 'text-matching' | 'retrieval.query' | 'retrieval.passage' | 'separation' | 'classification'

    더 나은 임베딩을 만드는데 도움이 되는 의도된 다운스트림 애플리케이션이에요. 기본값은 'retrieval.passage'이에요.

    • 'retrieval.query': 입력이 검색 쿼리인 경우.
    • 'retrieval.passage': 입력이 문서/패시지인 경우.
    • 'text-matching': 의미적 텍스트 유사도 작업용.
    • 'classification': 분류 작업용.
    • 'separation': 클러스터링 작업용.
  • outputDimension number

    출력 임베딩의 차원 수예요. 유효한 범위는 모델 문서를 참고하세요.

    • jina-embeddings-v3: 최소 32, 최대 1024.
    • jina-clip-v2: 최소 64, 최대 1024.
    • jina-clip-v1: 고정 768.
  • embeddingType 'float' | 'binary' | 'ubinary' | 'base64'

    반환되는 임베딩의 데이터 타입이에요.

  • normalized boolean

    임베딩을 L2 정규화할지 여부예요. 기본값은 true예요.

  • truncate boolean

    입력이 모델 컨텍스트 한도를 초과할 때 오류 대신 자를지 여부예요. 기본값은 false예요.

  • lateChunking boolean

    긴 입력을 1024-토큰 청크로 자동 분할해요. 텍스트 임베딩 모델에서만 지원돼요.

모델 기능 (Model Capabilities)

모델 컨텍스트 길이 (토큰) 임베딩 차원 모달리티
jina-embeddings-v3 8,192 1024 텍스트
jina-clip-v2 8,192 1024 텍스트 + 이미지
jina-clip-v1 8,192 768 텍스트 + 이미지

지원 입력 형식 (Supported Input Formats)

텍스트 임베딩 (Text Embeddings)

  • 문자열 배열, 예: const strings = ['text1', 'text2']

멀티모달 임베딩 (Multimodal Embeddings)

  • 텍스트 객체: const text = [{ text: 'Your text here' }]
  • 이미지 객체: const image = [{ image: 'https://example.com/image.jpg' }] 또는 Base64 data URL
  • 혼합 배열: const mixed = [{ text: 'object text' }, { image: 'image-url' }, { image: 'data:image/jpeg;base64,...' }]

더 알아보기 (Learn more)

전체 사이트맵