`createProviderRegistry()`
createProviderRegistry()
여러 프로바이더와 모델로 작업할 때는 이를 중앙에서 관리하고 간단한 문자열 id로 모델에 접근하는 것이 바람직한 경우가 많습니다. createProviderRegistry를 사용하면 providerId:modelId 형식의 id로 접근할 수 있는 여러 프로바이더가 있는 레지스트리를 만들 수 있습니다.
TypeScript에서 레지스트리 모델 ID는 등록된 프로바이더 ID에서 추론됩니다. 프로바이더가 리터럴 모델 ID 타입을 노출하면 편집기가 결합된 providerId:modelId 값을 제안할 수 있습니다.
출처: 문서
본문
Setup (설정)
createProviderRegistry를 사용하여 여러 프로바이더와 모델이 있는 레지스트리를 만들 수 있습니다.
import { anthropic } from '@ai-sdk/anthropic';
import { createOpenAI } from '@ai-sdk/openai';
import { createProviderRegistry } from 'ai';
export const registry = createProviderRegistry({
// register provider with prefix and default setup:
anthropic,
// register provider with prefix and custom setup:
openai: createOpenAI({
apiKey: proces...KEY,
}),
});
Custom Separator (커스텀 구분자)
기본적으로 레지스트리는 프로바이더와 모델 ID 사이의 구분자로 :을 사용합니다. separator 옵션을 전달하여 이 구분자를 커스터마이즈할 수 있습니다.
const registry = createProviderRegistry(
{
anthropic,
openai,
},
{ separator: ' > ' },
);
// Now you can use the custom separator
const model = registry.languageModel('anthropic > claude-3-opus-20240229');
Language models (언어 모델)
레지스트리의 languageModel 메서드를 사용하여 언어 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.
import { generateText } from 'ai';
import { registry } from './registry';
const { text } = await generateText({
model: registry.languageModel('openai:gpt-6-astra'),
prompt: 'Invent a new holiday and describe its traditions.',
});
Text embedding models (텍스트 임베딩 모델)
레지스트리의 .embeddingModel 메서드를 사용하여 텍스트 임베딩 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.
import { embed } from 'ai';
import { registry } from './registry';
const { embedding } = await embed({
model: registry.embeddingModel('openai:text-embedding-3-small'),
value: 'sunny day at the beach',
});
Image models (이미지 모델)
레지스트리의 imageModel 메서드를 사용하여 이미지 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.
import { generateImage } from 'ai';
import { registry } from './registry';
const { image } = await generateImage({
model: registry.imageModel('openai:dall-e-3'),
prompt: 'A beautiful sunset over a calm ocean',
});
Video models (비디오 모델)
레지스트리의 videoModel 메서드를 사용하여 비디오 모델에 접근할 수 있습니다. 프로바이더 id가 모델 id의 접두사가 됩니다: providerId:modelId.
import { fal } from '@ai-sdk/fal';
import { createProviderRegistry, experimental_generateVideo } from 'ai';
const registry = createProviderRegistry({ fal });
const { videos } = await experimental_generateVideo({
model: registry.videoModel('fal:luma-dream-machine/ray-2'),
prompt: 'A cat walking on a beach at sunset',
});
Files and skills (파일과 스킬)
registry.files(providerId)와 registry.skills(providerId)를 호출하여 프로바이더의 파일 및 스킬 인터페이스에 접근할 수 있습니다.
Import
import { createProviderRegistry } from "ai"
API Signature
Parameters (파라미터)
providers:Record<string, Provider>— 프로바이더의 고유 식별자입니다. 레지스트리 내에서 고유해야 합니다.Provider:languageModel:(id: string) => LanguageModel— id로 언어 모델을 반환하는 함수입니다.embeddingModel:(id: string) => EmbeddingModel<string>— id로 텍스트 임베딩 모델을 반환하는 함수입니다.imageModel:(id: string) => ImageModel— id로 이미지 모델을 반환하는 함수입니다.transcriptionModel:(id: string) => TranscriptionModel(선택) — id로 전사 모델을 반환하는 함수입니다.speechModel:(id: string) => SpeechModel(선택) — id로 음성 모델을 반환하는 함수입니다.rerankingModel:(id: string) => RerankingModel(선택) — id로 reranking 모델을 반환하는 함수입니다.videoModel:(id: string) => VideoModelV4(선택) — id로 비디오 모델을 반환하는 함수입니다.files:() => FilesV4(선택) — 프로바이더 파일 API 인터페이스를 반환하는 함수입니다.skills:() => SkillsV4(선택) — 프로바이더 스킬 API 인터페이스를 반환하는 함수입니다.
options:object(선택) — 레지스트리의 선택적 구성입니다.separator:string(선택) — 프로바이더와 모델 ID 사이의 커스텀 구분자입니다. 기본값은 ":"입니다.languageModelMiddleware:LanguageModelMiddleware | LanguageModelMiddleware[](선택) — 레지스트리에서 얻은 모든 언어 모델을 감싸는 미들웨어입니다.imageModelMiddleware:ImageModelMiddleware | ImageModelMiddleware[](선택) — 레지스트리에서 얻은 모든 이미지 모델을 감싸는 미들웨어입니다.
Returns (반환값)
createProviderRegistry 함수는 Provider 인스턴스를 반환합니다. 다음과 같은 메서드를 가집니다.
languageModel:(id: string) => LanguageModel— id(형식: providerId:modelId)로 언어 모델을 반환하는 함수입니다.embeddingModel:(id: string) => EmbeddingModel<string>— id(형식: providerId:modelId)로 텍스트 임베딩 모델을 반환하는 함수입니다.imageModel:(id: string) => ImageModel— id(형식: providerId:modelId)로 이미지 모델을 반환하는 함수입니다.transcriptionModel:(id: string) => TranscriptionModel— id(형식: providerId:modelId)로 전사 모델을 반환하는 함수입니다.speechModel:(id: string) => SpeechModel— id(형식: providerId:modelId)로 음성 모델을 반환하는 함수입니다.rerankingModel:(id: string) => RerankingModel— id(형식: providerId:modelId)로 reranking 모델을 반환하는 함수입니다.videoModel:(id: string) => VideoModelV4— id(형식: providerId:modelId)로 비디오 모델을 반환하는 함수입니다.files:(providerId: string) => FilesV4— 프로바이더 id로 프로바이더 파일 API 인터페이스를 반환하는 함수입니다.skills:(providerId: string) => SkillsV4— 프로바이더 id로 프로바이더 스킬 API 인터페이스를 반환하는 함수입니다.
Experimental evaluation models (실험적 평가 모델)
추론된 반환 타입은 Experimental_EvaluationModelV4를 반환하는 evaluationModel('providerId:modelId')도 노출합니다. 프로바이더는 evaluationModel 팩토리를 노출해야 합니다. 커스텀 구분자와 모델 ID 추론은 비디오 모델과 마찬가지로 동작합니다. 언어 및 이미지 미들웨어는 평가 모델을 감싸지 않습니다. ProviderRegistryProvider는 안정적인 인터페이스로 유지됩니다. 실험적 평가 접근을 유지하려면 추론된 반환 타입이나 Experimental_EvaluationProviderRegistry를 사용하세요.
사용 불가한 평가 능력 또는 모델은 modelType: 'evaluationModel'과 함께 NoSuchModelError를 발생시키고, 알 수 없는 레지스트리 프로바이더는 NoSuchProviderError를 발생시킵니다. 이러한 능력은 구조적 확장이며 안정적인 ProviderV4 계약에 추가되지 않습니다. 직접적인 평가 문자열 ID는 기본 프로바이더가 구성되지 않았을 때 기본적으로 Gateway를 사용합니다. 실행 가능한 사용 패턴은 Evaluation을 참고하세요.