현재 app/api/compatibility-check/route.ts 전문입니다:
import { generateObject } from "ai"
import { createOpenAI } from "@ai-sdk/openai"
import { z } from "zod"
const compatibilitySchema = z.object({
isCompatible: z.boolean(),
score: z.number().min(0).max(100),
issues: z.array(
z.object({
level: z.enum(["critical", "warning", "info"]),
category: z.string(),
title: z.string(),
description: z.string(),
affected: z.array(z.string()),
})
),
warnings: z.array(
z.object({
category: z.string(),
title: z.string(),
description: z.string(),
})
),
summary: z.string(),
})
export async function POST(req: Request) {
const { components } = await req.json()
const partsText = Object.entries(components)
.map(([key, val]: any) =>
`${key}: ${val.name}${val.specs ? " / 스펙: " + val.specs : ""}${val.description ? " / 설명: " + val.description : ""}`
)
.join("\n")
try {
const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY })
const { object } = await generateObject({
model: openai("gpt-4o-mini"),
schema: compatibilitySchema,
messages: [
{
role: "user",
content: `당신은 PC 부품 호환성 전문가입니다. 아래 부품 조합의 호환성을 검토해주세요.
[부품 목록]
${partsText}
[검토 항목]
1. 케이스 폼팩터: 메인보드가 케이스에 물리적으로 들어가는지 (ATX/mATX/ITX). 미드타워/타워형 케이스는 ATX 수용 가능합니다.
2. CPU 소켓: CPU와 메인보드 소켓이 일치하는지 (AM4/AM5/LGA1700/LGA1851 등)
3. RAM 규격: DDR4/DDR5 여부와 메인보드 지원 여부
4. 파워 용량: CPU+GPU TDP 합산 대비 파워가 충분한지
5. 쿨러 호환: TDP 범위 내인지
[판단 규칙]
- 확실히 호환되는 경우는 절대 issues에 넣지 마세요.
- 확인이 불가능하거나 불확실한 경우는 warning으로만 처리하세요.
- 케이스 이름만으로 폼팩터를 확인할 수 없으면 케이스 호환 체크를 건너뛰세요.
- score: critical issue 없으면 85~100, warning만 있으면 70~84, critical issue 있으면 60 이하
- summary는 한국어로 2~3문장으로 전체 호환성을 요약해주세요.`,
},
],
})
return Response.json(object)
} catch (error) {
console.error("[v0] 호환성 API 오류:", error)
return Response.json({ error: "호환성 분석 실패" }, { status: 500 })
}
}@ai-sdk/openai 패키지도 설치되어 있어야 합니다. package.json에 없다면 "@ai-sdk/openai": "^0.0.x" 를 추가하거나, 없을 경우 createOpenAI 대신 import { openai } from "@ai-sdk/openai" 방식으로 쓰셔도 됩니다.
"ai": "^3.4.32", "@ai-sdk/openai": "^0.0.66", "openai": "^4.67.3", "zod": "4.3.5" 모두 설치되어 있습니다. AI SDK v3에서는 generateObject가 정상적으로 있고, @ai-sdk/openai v0.0.66은 createOpenAI 방식을 씁니다. 문제는 zod 버전이 4.3.5인데 AI SDK v3이 zod 3.x를 기대하는 경우 충돌이 날 수 있습니다.
가장 안전한 방법은 ai와 @ai-sdk/openai 대신 이미 설치된 "openai": "^4.67.3" 패키지를 직접 사용하는 것입니다.
BEFORE:
import { generateObject } from "ai"
import { createOpenAI } from "@ai-sdk/openai"AFTER:
import OpenAI from "openai"ai/@ai-sdk/openai 대신 이미 설치된 "openai": "^4.67.3" 패키지를 직접 사용하도록 완전히 재작성했습니다. response_format: { type: "json_object" }로 GPT가 JSON만 반환하도록 강제하고, JSON.parse로 파싱 후 반환합니다. OPENAI_API_KEY를 Settings → Vars에 추가하면 바로 동작합니다.
You can send messages while the preview loads