ChatGPT Conversation Patterns, Prompt 제어 Patterns 정리

haxwon·2023년 4월 12일
0
post-thumbnail

OpenAi에서 제공하는 Api에서 Parameters를 조정하여
출력물의 품질과 다양성, 속도 등을 제어할 수 있다.
이를 이용해 ChatGPT를 이용한 챗봇을 개발하고자 한다.

Prompt 제어 Parameters 설정

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:"]

Parameters 적용 예시

  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("오류가 발생했습니다.")
      }
    } 
  };

ChatGPT Conversation Patterns

  1. 키워드 기반 패턴
    💬 지정된 키워드나 문구를 인식하여 이를 기반으로 대화 진행
    예)
    Q: 음식 추천해줘
    A: 어떤 종류의 음식을 추천해 드릴까요?

  2. 템플릿 기반 패턴 ✅ (챗봇 형태의 프로젝트를 위해 선택한 패턴)
    💬 사전에 정의된 일련의 질문-응답 템플릿을 사용하여 대화 진행
    예)
    Q: 너는 누구니?
    A: 저는 chatGPT 입니다.

  3. 컨텍스트 기반 패턴
    💬 이전 대화에서 주어진 컨텍스트를 이해하고 이를 바탕으로 대화 진행
    예)
    Q: 어디에 살아?
    A:저는 캘리포니아에 살아요.
    Q: 어떻게 캘리포니아가 마음에 들어?
    A: (이전 대화에서 언급 된 캘리포니아에 대한 컨텍스트를 활용하여 대화 진행)

  4. 명령어 기반 패턴
    💬 특정 명령어를 이해하고 그에 따라 대화를 제어
    예)
    Q: 메뉴얼 보내줘
    A:(사용 설명서를 보내 줌)

템플릿 기반 패턴 적용하기

📌 적절한 응답을 파악하고 정리하여 템플릿으로 만들기
1. 대화 로그 분석
2. 응답 템플릿 작성
3. 질문 템플릿 작성
4. 템플릿 매칭
5. 템플릿 업데이트

profile
그냥 하는 프론트엔드 개발자

0개의 댓글