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