ChatGPT API 출시 전, OpenAI API로 챗봇 만들어보기
배경
11월 30일에 ChatGPT가 공개되면서 사내에서 챗봇 PoC 요청이 들어왔다. 하지만 ChatGPT는 웹 인터페이스만 제공하고 API는 아직 없는 상황. 기존 OpenAI API의 text-davinci-003 모델로 비슷하게 구현할 수 있을지 테스트해봤다.
구현 방식
Completion API는 상태를 저장하지 않기 때문에, 매 요청마다 이전 대화 내역을 프롬프트에 포함시켜야 했다.
const openai = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
});
const conversationHistory = [];
async function chat(userMessage) {
conversationHistory.push(`User: ${userMessage}`);
const prompt = `The following is a conversation with an AI assistant.
${conversationHistory.join('\n')}
Assistant:`;
const response = await openai.completions.create({
model: 'text-davinci-003',
prompt: prompt,
max_tokens: 150,
temperature: 0.7,
stop: ['User:', 'Assistant:'],
});
const reply = response.choices[0].text.trim();
conversationHistory.push(`Assistant: ${reply}`);
return reply;
}
문제점
- 토큰 제한: 대화가 길어지면 4096 토큰을 초과. 오래된 대화를 잘라내는 로직 필요
- 비용: 매번 전체 컨텍스트를 전송하니 토큰 소비가 빠름
- 일관성: ChatGPT만큼 대화 흐름이 자연스럽지 않음
소감
ChatGPT API가 나오면 훨씬 간단해질 것 같다. 지금은 프롬프트 엔지니어링과 컨텍스트 관리를 직접 해야 해서 번거롭다. 하지만 text-davinci-003도 충분히 쓸만한 수준이라 놀랐다.