OpenAI API는 보안상의 이유로 클라이언트 측에서 직접 호출할 시 에러가 발생한다.
이를 해결하기 위해 서버 측에서 API를 호출하기 위해 API 라우트를 생성하였다.
//route.ts
import { NextResponse } from 'next/server';
import OpenAI from 'openai';
export const maxDuration = 60;
export const dynamic = 'force-dynamic';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API,
});
const content = process.env.OPENAI_MAIN_API;
function isError(error: unknown): error is Error {
return error instanceof Error;
}
export async function POST(request: Request) {
const { prompt } = await request.json();
try {
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{
role: 'system',
content: content || '',
},
{ role: 'user', content: prompt },
],
temperature: 1,
max_tokens: 1000,
});
if (
response.choices &&
response.choices[0] &&
response.choices[0].message &&
response.choices[0].message.content
) {
return NextResponse.json({
result: response.choices[0].message.content.trim(),
});
} else {
return NextResponse.json(
{ error: 'Invalid response from OpenAI API' },
{ status: 500 },
);
}
} catch (error) {
if (isError(error)) {
return NextResponse.json({ error: error.message }, { status: 500 });
} else {
return NextResponse.json(
{ error: 'An unknown error occurred' },
{ status: 500 },
);
}
}
}
import { NextResponse } from 'next/server';
import OpenAI from 'openai';
export const maxDuration = 60;
export const dynamic = 'force-dynamic';
const openai = new OpenAI({
apiKey: process.env.OPENAI_API,
});
const content = process.env.OPENAI_PLANNER_API;
function isError(error: unknown): error is Error {
return error instanceof Error;
}
export async function POST(request: Request) {
const { prompt } = await request.json();
try {
const response = await openai.chat.completions.create({
model: 'gpt-4o',
messages: [
{ role: 'system', content: content || '' },
{ role: 'user', content: prompt },
],
temperature: 0.7,
max_tokens: 4096,
});
if (
response.choices &&
response.choices[0] &&
response.choices[0].message &&
response.choices[0].message.content
) {
return NextResponse.json({
result: response.choices[0].message.content.trim(),
});
} else {
return NextResponse.json(
{ error: 'Invalid response from OpenAI API' },
{ status: 500 },
);
}
} catch (error) {
if (isError(error)) {
return NextResponse.json({ error: error.message }, { status: 500 });
} else {
return NextResponse.json(
{ error: 'An unknown error occurred' },
{ status: 500 },
);
}
}
}