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로 인스턴스를 만듭니다. nameurl은 필수입니다:

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).
  • apiKeyAuthorization 헤더의 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과 둘 다 설정하면 providerOptionsreasoningEffort가 우선.
  • 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 프로바이더를 사용하세요.

더 알아보기