OpenAi에서 제공하는 Api에서 Parameters를 조정하여
출력물의 품질과 다양성, 속도 등을 제어할 수 있다.
이를 이용해 ChatGPT를 이용한 챗봇을 개발하고자 한다.
1. url: https://api.openai.com/v1/completions
OpenAI 요청 url
2. model: text-davinci-003
사용할 인공지능 모델의 이름
*GPT-3
3. prompt: 사용자로부터 입력받는 text
인공지능 모델이 입력으로 사용할 텍스트
4. temperature:(0.0~1.0)
값이 높을 수록 결과물이 다양해지고, 낮을 수록 결과물이 일관성을 가짐
5. max_tokens:(1~2048)
출력물의 길이 조절
6. top_p:(0.0~1.0)
생성된 텍스트의 다양성 조절 (Nucleus Sampling)
(예) top_p:1 이면 상위 100%확률을 가지는 단어만 고려함
7. frequency_penalty:(0.0~1.0)
출력물에 반복되는 단어나 구를 제한,
값이 높을수록 모델이 반복을 피하려고 노력,
낮을 수록 반복이 자주 발생
8. presence_penalty:(0.0~1.0)
입력 텍스트에 나타난 단어를 제외하고 출력물을 생성되는 데 사용
값이 높을수록 모델이 입력 텍스트에 나타난 단어를 피하려고 노력,
낮을 수록 나타난 단어를 우선
9. n:(1~10)
출력물의 개수를 조절
10. stop:
결과물을 자르는 데 사용되는 문자열, 설정 문자열을 만날 때 까지만 출력
(예) ["user:", "bot:"]
const generateText = async (prompt: string) => {
try {
const response = await axios.post(
"https://api.openai.com/v1/completions",
{
model: "text-davinci-003",
prompt: `${prompt}`,
temperature: 0.9,
max_tokens: 2048,
top_p: 1,
frequency_penalty: 0,
presence_penalty: 1,
},
{
headers: {
"Content-Type": "application/json",
Authorization: "Bearer " + openAiURL,
//발급받은 API KEY
},
},
);
const { choices } = response.data;
const text = choices[0].text.trim();
return text;
} catch (e: any) {
if (e.response?.status === 500) {
alert("오류가 발생했습니다.")
}
}
};
키워드 기반 패턴
💬 지정된 키워드나 문구를 인식하여 이를 기반으로 대화 진행
예)
Q: 음식 추천해줘
A: 어떤 종류의 음식을 추천해 드릴까요?
템플릿 기반 패턴 ✅ (챗봇 형태의 프로젝트를 위해 선택한 패턴)
💬 사전에 정의된 일련의 질문-응답 템플릿을 사용하여 대화 진행
예)
Q: 너는 누구니?
A: 저는 chatGPT 입니다.
컨텍스트 기반 패턴
💬 이전 대화에서 주어진 컨텍스트를 이해하고 이를 바탕으로 대화 진행
예)
Q: 어디에 살아?
A:저는 캘리포니아에 살아요.
Q: 어떻게 캘리포니아가 마음에 들어?
A: (이전 대화에서 언급 된 캘리포니아에 대한 컨텍스트를 활용하여 대화 진행)
명령어 기반 패턴
💬 특정 명령어를 이해하고 그에 따라 대화를 제어
예)
Q: 메뉴얼 보내줘
A:(사용 설명서를 보내 줌)
📌 적절한 응답을 파악하고 정리하여 템플릿으로 만들기
1. 대화 로그 분석
2. 응답 템플릿 작성
3. 질문 템플릿 작성
4. 템플릿 매칭
5. 템플릿 업데이트