AI SDK 연동
Agents SDK는 기본적으로 Responses API 또는 Chat Completions API를 통해 OpenAI 모델과 함께 작동합니다. 하지만 다른 모델을 사용하려는 경우 Vercel AI SDK가 이 어댑터를 통해 Agents SDK로 가져올 수 있는 다양한 지원 모델을 제공합니다.
-
extensions 패키지를 설치하여 AI SDK 어댑터를 설치합니다:
Terminal window npm install @openai/agents-extensions -
Vercel AI SDK에서 원하는 모델 패키지를 선택하고 설치합니다:
Terminal window npm install @ai-sdk/openai -
에이전트에 연결할 어댑터와 모델을 가져옵니다:
어댑터 가져오기 import { openai } from '@ai-sdk/openai';import { aisdk } from '@openai/agents-extensions/ai-sdk'; -
에이전트에서 사용할 모델 인스턴스를 초기화합니다:
모델 생성 import { openai } from '@ai-sdk/openai';import { aisdk } from '@openai/agents-extensions/ai-sdk';const model = aisdk(openai('gpt-5.4'));
코드 예제
섹션 제목: “코드 예제”import { Agent, run } from '@openai/agents';
// Import the model package you installedimport { openai } from '@ai-sdk/openai';
// Import the adapterimport { aisdk } from '@openai/agents-extensions/ai-sdk';
// Create a model instance to be used by the agentconst model = aisdk(openai('gpt-5.4'));
// Create an agent with the modelconst agent = new Agent({ name: 'My Agent', instructions: 'You are a helpful assistant.', model,});
// Run the agent with the new modelrun(agent, 'What is the capital of Germany?');프로바이더 메타데이터 전달
섹션 제목: “프로바이더 메타데이터 전달”메시지와 함께 프로바이더별 옵션을 보내야 하는 경우 providerMetadata를 통해 전달합니다. 값은 기반 AI SDK 모델로 직접 전달됩니다. 예를 들어 Agents SDK의 다음 providerData는
const providerData = { anthropic: { cacheControl: { type: 'ephemeral', }, },};AI SDK 연동을 사용할 때 다음과 같이 됩니다.
const providerMetadata = { anthropic: { cacheControl: { type: 'ephemeral', }, },};최종 출력 텍스트 정규화
섹션 제목: “최종 출력 텍스트 정규화”일부 프로바이더는 JSON 코드 펜스처럼 추가 래핑이 포함된 일반 텍스트로 structured outputs를 반환합니다. Agents 런타임이 최종 출력을 검증하기 전에 프로바이더별 정리가 필요한 경우 어댑터를 만들 때 transformOutputText를 전달합니다:
import { openai } from '@ai-sdk/openai';import { aisdk } from '@openai/agents-extensions/ai-sdk';
const model = aisdk(openai('gpt-5.4'), { transformOutputText(text) { return text.match(/```(?:json)?\s*([\s\S]*?)\s*```/)?.[1]?.trim() ?? text; },});transformOutputText는 스트리밍되지 않는 응답의 확정된 어시스턴트 텍스트와 스트리밍 응답의 최종 response_done 이벤트에서 실행됩니다. 증분 output_text_delta 이벤트는 수정하지 않습니다.
재시도
섹션 제목: “재시도”AI SDK 기반 모델에서도 modelSettings.retry가 작동합니다. 재시도가 기본 OpenAI 프로바이더에서만 구현되는 것이 아니라 Agents 런타임에서 구현되기 때문입니다.
즉 다른 곳에서 사용하던 것과 같은 재시도 구성을 연결할 수 있습니다:
Agent,Runner또는 둘 다에modelSettings.retry를 설정합니다.networkError(),httpStatus([...]),providerSuggested()같은retryPolicies를 조합합니다.- 래핑된 AI SDK 모델이 어댑터를 통해 재시도 권장 사항을 노출할 수 있을 때만
providerSuggested()가 도움이 된다는 점을 유의하세요.
aisdk(openai(...))를 사용하는 전체 예제는 examples/ai-sdk/retry.ts를 참조하세요. 스트리밍 및 상태 저장 후속 요청에 대한 안전 경계를 포함해 재시도 API 자체는 모델을 참조하세요.
적절한 연동 선택
섹션 제목: “적절한 연동 선택”@openai/agents-extensions에는 관련된 두 가지 연동이 있습니다:
@openai/agents-extensions/ai-sdk는 AI SDK 모델을 어댑트하여Agent가 그 위에서 실행될 수 있게 합니다.@openai/agents-extensions/ai-sdk-ui는 스트리밍되는 Agents SDK 실행을 어댑트하여 AI SDK UI 라우트가 표준 스트리밍Response를 반환할 수 있게 합니다.
AI SDK 모델 참고 사항
섹션 제목: “AI SDK 모델 참고 사항”@openai/agents-extensions/ai-sdk어댑터는 아직 베타이므로 선택한 프로바이더, 특히 규모가 작은 프로바이더와 함께 신중하게 테스트해 볼 가치가 있습니다.- OpenAI 모델을 사용하는 경우 이 어댑터 대신 기본 OpenAI 모델 프로바이더를 사용하는 것을 권장합니다.
- 지원되는 AI SDK 프로바이더는
specificationVersionv2또는v3를 노출해야 합니다. 이전 v1 프로바이더 스타일이 필요한 경우 examples/ai-sdk-v1의 모듈을 프로젝트로 복사하세요. - 이 어댑터를 통해 사용할 때 컴퓨터 도구에는 디스플레이 메타데이터가 필요합니다. 도구에
environment와dimensions메타데이터가 모두 포함되어 있는지 확인하세요. - 여기서는 지연된 Responses 도구 로딩 플로우가 지원되지 않습니다. 여기에는
toolNamespace(),deferLoading: true가 설정된 함수 도구,toolSearchTool()이 포함됩니다. 도구 검색이 필요하다면 OpenAI Responses 모델을 직접 사용하세요. 도구와 모델을 참조하세요.
AI SDK UI 스트림 헬퍼
섹션 제목: “AI SDK UI 스트림 헬퍼”@openai/agents-extensions/ai-sdk-ui는 Agents SDK 스트림을 AI SDK UI 라우트에 연결하기 위한 응답 헬퍼를 제공합니다:
createAiSdkTextStreamResponse(source, options?): 일반 텍스트 스트리밍 응답용입니다.createAiSdkUiMessageStream(source): 더 낮은 수준의ReadableStream<UIMessageChunk>용입니다.createAiSdkUiMessageStreamResponse(source, options?):UIMessageChunk스트리밍 응답용입니다.
이 헬퍼들은 StreamedRunResult, 스트림 유사 소스 또는 호환되는 래퍼 객체를 받습니다. 응답 헬퍼는 스트리밍에 적합한 헤더가 포함된 Response를 반환합니다.
라우트가 AI SDK 응답을 직접 반환해야 하는 경우 createAiSdkUiMessageStreamResponse(...)를 사용하세요. 응답 또는 렌더링 레이어를 직접 제어하면서도 유지 관리되는 Agents SDK에서 AI SDK UIMessageChunk로의 변환을 사용하려면 createAiSdkUiMessageStream(...)을 사용하세요. 일반 텍스트만 필요하면 createAiSdkTextStreamResponse(...)를 사용하세요.
응답 헬퍼는 options를 통해 선택적 응답 설정도 받습니다:
headers: 스트리밍 응답에 병합할 추가 응답 헤더status: 반환되는Response의 HTTP 상태 코드statusText: 반환되는Response의 HTTP 상태 텍스트
더 낮은 수준의 UI 메시지 스트림 예시:
import { Agent, run } from '@openai/agents';import { createAiSdkUiMessageStream } from '@openai/agents-extensions/ai-sdk-ui';
const agent = new Agent({ name: 'Assistant', instructions: 'Reply with a short answer.',});
export async function createStream() { const stream = await run(agent, 'Hello there.', { stream: true }); return createAiSdkUiMessageStream(stream);}UI 메시지 스트리밍을 위한 Next.js 라우트 예시:
import { Agent, run } from '@openai/agents';import { createAiSdkUiMessageStreamResponse } from '@openai/agents-extensions/ai-sdk-ui';
const agent = new Agent({ name: 'Assistant', instructions: 'Reply with a short answer.',});
export async function POST() { const stream = await run(agent, 'Hello there.', { stream: true }); return createAiSdkUiMessageStreamResponse(stream);}텍스트 전용 스트리밍을 위한 Next.js 라우트 예시:
import { Agent, run } from '@openai/agents';import { createAiSdkTextStreamResponse } from '@openai/agents-extensions/ai-sdk-ui';
const agent = new Agent({ name: 'Assistant', instructions: 'Reply with a short answer.',});
export async function POST() { const stream = await run(agent, 'Hello there.', { stream: true }); return createAiSdkTextStreamResponse(stream);}엔드투엔드 사용법은 이 리포지터리의 examples/ai-sdk-ui 앱을 참조하세요.