구조화된 출력과 함께하는 도구 호출
구조화된 출력과 함께하는 도구 호출 (Tool calling with structured outputs)
구조화된 출력(structured outputs) 생성과 도구 호출을 함께 쓰고 싶을 때 필요한 주의점을 정리한 문서예요. output 옵션을 도구 호출과 함께 쓰면 실행 흐름에 추가 스텝이 하나 더 생긴다는 점을 꼭 기억해야 해요. stopWhen 조건을 그만큼 여유 있게 잡아주는 게 핵심이에요.
출처: 문서
본문
문제 (Issue)
도구 호출과 구조화된 출력 생성을 결합하고 싶을 수 있습니다.
배경 (Background)
구조화된 출력과 함께 도구 호출을 사용하려면, output 옵션과 함께 generateText 또는 streamText를 사용하세요.
중요: 도구 호출과 함께 output을 사용하면 구조화된 출력 생성이 실행 흐름에서 하나의 추가 스텝(step) 으로 계산됩니다.
해결 방법 (Solution)
output을 도구 호출과 함께 사용할 때, 구조화된 출력 생성에 필요한 추가 스텝을 반영하도록 stopWhen 조건을 조정하세요:
const result = await generateText({
model: __MODEL__,
output: Output.object({
schema: z.object({
summary: z.string(),
sentiment: z.enum(['positive', 'neutral', 'negative']),
}),
}),
tools: {
analyze: tool({
description: 'Analyze data',
inputSchema: z.object({
data: z.string(),
}),
execute: async ({ data }) => {
return { result: 'analyzed' };
}),
},
},
// Add at least 1 to your intended step count to account for structured output
stopWhen: isStepCount(3), // Now accounts for: tool call + tool result + structured output
prompt: 'Analyze the data and provide a summary',
});
generateText와 streamText에서 구조화된 출력을 사용하는 방법에 대한 자세한 내용은 구조화된 데이터 생성을 참고하세요.
더 알아보기 (Learn more)
- Azure OpenAI 스트리밍 느림
- 클라이언트 컴포넌트에서의 Server Actions
- useChat/useCompletion 스트림 출력에 0:... 가 텍스트 대신 표시됨
- Streamable UI 오류
- Tool Invocation 결과 누락 오류
- 배포했을 때 스트리밍 안 됨
- 프록시를 거칠 때 스트리밍 안 됨
- Vercel에 배포할 때 타임아웃
- 닫히지 않은 스트림
- useChat 스트림 파싱 실패
- Server Action plain objects 오류
- useChat 응답 없음
- useChat에서 커스텀 headers/body/credentials가 동작하지 않음
- Zod와 AI SDK 5에서 TypeScript 성능 문제
- useChat "An error occurred" 오류
- useChat에서 assistant 메시지 반복
- 스트림이 중단될 때 onEnd가 호출되지 않음
- 구조화된 출력과 함께하는 도구 호출
- 중단(abort)과 이어서 재개 가능한 스트림
- streamText가 조용히 실패함
- 스트리밍 상태는 표시되는데 텍스트가 안 나옴
- useChat과 함께하는 stale body 값
- onToolCall과 함께하는 타입 오류
- 지원되지 않는 모델 버전 오류
- OpenAI에서 객체 생성 실패
- 도구 결과 누락 오류
- 모델이 "LanguageModelV1" 타입에 할당되지 않음
- TypeScript 오류 "Cannot find namespace 'JSX'"
- React 오류 "Maximum update depth exceeded"
- Jest: '@ai-sdk/rsc' 모듈을 찾을 수 없음
- 많은 이미지를 처리할 때 높은 메모리 사용