Open Responses 프로바이더
Open Responses 프로바이더
Open Responses 프로바이더는 AI SDK Core를 Open Responses 호환 POST 엔드포인트를 구현하는 언어 모델 서버에 연결합니다. Open Responses는 OpenAI Responses API를 기반으로 한 오픈 스펙으로, LM Studio 같은 서드파티 또는 자체 호스팅 엔드포인트용으로 @ai-sdk/open-responses를 사용합니다.
출처: 공식문서
본문
설치
pnpm add @ai-sdk/open-responses
프로바이더 인스턴스
createOpenResponses로 인스턴스를 만듭니다. name과 url은 필수입니다:
import { createOpenResponses } from '@ai-sdk/open-responses';
const openResponses = createOpenResponses({
name: 'lmstudio',
url: 'http://localhost:1234/v1/responses',
});
name— 프로바이더 이름. 모델의 provider 식별자와 provider 옵션 키로 사용.url— Open Responses API POST 엔드포인트의 전체 URL(기본 URL이 아니라 엔드포인트 URL).apiKey—Authorization헤더의 bearer 토큰으로 전송되는 API 키.headers— 커스텀 헤더.fetch— 커스텀 fetch 구현(기본 전역fetch).strictResponseInput— 엄격한 Responses 입력 스키마로 assistant 기록 직렬화(기본false).
OpenAI Responses API 예:
const openAIResponses = createOpenResponses({
name: 'openai',
url: 'https://api.openai.com/v1/responses',
apiKey: process.env.OPENAI_API_KEY,
});
언어 모델
const model = openResponses('your-model-id');
모델 ID는 엔드포인트에 그대로 전달됩니다. generateText·streamText에서 사용할 수 있고, AI SDK Core의 Output으로 구조화 데이터 생성도 지원합니다.
Reasoning과 Provider Options
최상위 reasoning 설정으로 reasoning 노력을 제어하며, 프로바이더는 이를 Open Responses reasoning.effort 필드로 매핑합니다. providerOptions의 키는 createOpenResponses에 넘긴 name과 일치해야 합니다:
import {
createOpenResponses,
type OpenResponsesLanguageModelOptions,
} from '@ai-sdk/open-responses';
import { generateText } from 'ai';
const lmstudio = createOpenResponses({
name: 'lmstudio',
url: 'http://localhost:1234/v1/responses',
});
const { text, reasoningText } = await generateText({
model: lmstudio('your-reasoning-model-id'),
reasoning: 'high',
providerOptions: {
lmstudio: {
reasoningEffort: 'max',
reasoningSummary: 'detailed',
} satisfies OpenResponsesLanguageModelOptions,
},
prompt: 'Explain why the sky appears blue.',
});
reasoningEffort— 임의 문자열을 그대로 엔드포인트의reasoning.effort에 전달(예:'max'). 최상위reasoning과 둘 다 설정하면providerOptions의reasoningEffort가 우선.reasoningSummary—'auto' | 'concise' | 'detailed'. reasoning 노력 설정과 조합 가능. 지원 범위는 엔드포인트·모델별 상이.
파일 입력
이미지는 input_image 파트로, PDF 등 다른 미디어 타입은 input_file 파트로 전송됩니다. 인라인 데이터(readFileSync) 또는 URL로 제공 가능하며, 엔드포인트·모델이 해당 미디어 타입을 지원해야 합니다. OpenAI file ID 같은 프로바이더 파일 참조는 지원하지 않습니다.
실험적 확장
Experimental_OpenResponsesExtension으로 구현별 네임스페이스 도구·아이템·스트리밍 이벤트를 인코딩/디코딩할 수 있습니다. AI SDK provider-tool ID는 점 표기(acme.document_search), Open Responses 와이어 타입은 콜론 표기(acme:document_search)를 사용하며, 등록되지 않은 프로바이더 도구는 unsupported 경고와 함께 요청에서 제외됩니다. 이 API는 실험적이며 이후 릴리스에서 바뀔 수 있습니다.
제한
- Stop sequences,
topK,seed는 지원하지 않으며 경고와 함께 무시됩니다. - 언어 모델만 지원하며 임베딩·이미지 생성 모델은 제공하지 않습니다.
- AI SDK 함수 도구와 등록된 Open Responses 확장을 지원하며, 그 외 프로바이더별 도구·옵션은 전용 프로바이더 구현이 필요합니다.
OpenAI를 직접 호출하면서 OpenAI 전용 provider 옵션이나 빌트인 도구가 필요하면 @ai-sdk/openai 프로바이더를 사용하세요.
더 알아보기
- OpenAI 프로바이더 — 공식 OpenAI Responses API 직접 사용
- OpenAI 호환 프로바이더 — Chat Completions 스타일 엔드포인트
- AI SDK Core —
generateText·streamText·구조화 출력