본문 바로가기
AI/AI 스터디

GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 6 - 확장하기

by davi_kr 2023. 5. 11.

목차

    반응형

    강의를 봤음에도 좀 어려워서 GPT에게 직접 물어봤습니다.

     

    이번 포스팅에서는 ChatGPT의 확장성에 대해 알아보고, 특히 temperature라는 중요한 매개변수를 기준으로 구체적인 예시를 들어 설명하겠습니다. Temperature는 ChatGPT 모델이 생성하는 답변의 다양성과 창의성을 조절하는 데 사용되는 매개변수입니다.

     

    Temperature가 낮은 경우

    Temperature 값이 낮을 때(예: 0.1), 모델은 높은 확률로 가장 가능성 있는 단어나 구를 선택하게 됩니다. 이로 인해 생성된 답변은 일반적으로 보수적이고, 문맥에 더 잘 맞지만 창의성이 떨어질 수 있습니다.

    예시)

    자연 속에서 힐링하고 싶어.

    낮은 temperature로 설정된 경우, 모델은 다음과 같은 답변을 생성할 수 있습니다.

    산책이나 등산을 해보는 건 어때요? 자연과 함께 시간을 보내는 것은 힐링에 좋습니다.

     

    Temperature가 높은 경우

    반면에, temperature 값이 높을 때(예: 1.0), 모델은 더 다양한 단어와 구를 선택할 가능성이 높아집니다. 이 경우, 생성된 답변은 창의적이거나 독특한 면이 있지만, 문맥에 따라 부적절하거나 일관성이 떨어질 수도 있습니다.

    앞서 언급한 프롬프트에 대해 높은 temperature로 설정된 경우, 모델은 다음과 같은 답변을 생성할 수 있습니다.

    야생 동물을 돌보며 일하는 동물보호소에서 자원봉사자로 활동해보세요. 그곳에서 동물들과 함께 보내는 시간은 힐링이 될 거예요.

     

    Temperature를 조절하는 이유

    Temperature를 조절함으로써, ChatGPT 모델의 답변 스타일과 창의성을 사용자의 요구에 맞게 최적화할 수 있습니다. 낮은 temperature로 보수적인 답변을 얻고 싶다면, 낮은 값을 사용하면 됩니다. 반대로 높은 temperature로 독특하고 창의적인 답변을 원한다면, 높은 값을 사용하면 됩니다.

     

    올바른 Temperature 값 찾기

    적절한 temperature 값을 찾는 것은 주관적인 과정이며, 사용자의 기대와 목적에 따라 다릅니다. 때로는 여러 값을 시도해보고 결과를 비교해야 올바른 값을 찾을 수 있습니다. 그래서 크게는 그냥 보편적인 답변을 원한다면 0으로 두면 될 것 같고, 답변마다 상이하게 답변을 받고 싶다면 temperature를 높여도 될 것 같습니다.

     

    다만, temperature가 같더라도 유저가 같은 질문도 조금씩 다르게 하면 이미도 결과가 조금씩 달라질 수 있다는 점으로 인해, 이게 완벽히 temperature의 영향으로 값을 다르게 하려 한다면.. 질문이 통일된 상태에서 유효하지 않을까라는 생각은 듭니다.

     

    기본 셋팅

    import openai
    openai.api_key = '나의 api key 등록하기'
    
    # gpt 모델 가져오기
    def get_completion(prompt, model="gpt-3.5-turbo",temperature=0): # Andrew mentioned that the prompt/ completion paradigm is preferable for this class
        messages = [{"role": "user", "content": prompt}]
        response = openai.ChatCompletion.create(
            model=model,
            messages=messages,
            temperature=temperature, # this is the degree of randomness of the model's output
        )
        return response.choices[0].message["content"]

     

    CS 상담 환경에서의 챗봇처럼 사용해보기

    테스트를 위해 가짜 리뷰를 사용해보겠습니다. 디폴트 temperature는 0입니다.

     

    review = f"""
    이 호텔은 전반적으로 실망스러웠습니다. 더러운 침구와 냄새가 나는 화장실이 기억에 남네요. 직원들도 불친절하고 서비스가 느렸어요. 다음에는 다른 호텔을 선택할 거예요.
    """
    
    prompt = f"""
    - 역할을 부여할게. 너는 CS ai 챗봇이야.
    너의 역할은 고객의 리뷰를 보고 답변을 해주는 거야.
    고객의 리뷰는 ```들 사이에 적혀 있어.
    
    - 만약에 유저가 긍정적인 혹은 중립적인 리뷰를 남겼다면 감사하는 취지의 답변을 만들어줘.\
    반대로 부정적인 리뷰를 남겼다면 사과하는 내용을 남겨줘.
    
    - 사과 내용엔 리뷰에 담긴 불편사항들을 꼭 모두 포함시켜줘.
    
    - 정중한 톤을 유지해줘
    
    Customer review: ```{review}```
    """
    response = get_completion(prompt)
    print(response)

     

    결과)

    CS ai 챗봇: 고객님, 이용하신 호텔에서 불편을 드려 대단히 죄송합니다. 고객님의 리뷰를 토대로 더 나은 서비스를 제공할 수 있도록 노력하겠습니다. 불친절한 직원과 느린 서비스, 더러운 침구와 냄새 나는 화장실 등의 문제점에 대해 깊이 반성하고 개선해 나갈 것입니다. 다시 한번 죄송하다는 말씀 드리며, 더 나은 경험을 제공할 수 있도록 노력하겠습니다. 감사합니다.

     

     

    이번엔 temperature를 1로 두고 해보겠습니다.

     

    prompt = f"""
    - 역할을 부여할게. 너는 CS ai 챗봇이야.
    너의 역할은 고객의 리뷰를 보고 답변을 해주는 거야.
    고객의 리뷰는 ```들 사이에 적혀 있어.
    - 만약에 유저가 긍정적인 혹은 중립적인 리뷰를 남겼다면 감사하는 취지의 답변을 만들어줘.\
    반대로 부정적인 리뷰를 남겼다면 사과하는 내용을 남겨줘.
    
    - 사과 내용엔 리뷰에 담긴 불편사항들을 꼭 모두 포함시켜줘.
    
    - 정중한 톤을 유지해줘
    Customer review: ```{review}```
    """
    response = get_completion(prompt, temperature=1)
    print(response)

     

    같은 코드에 temperature = 1만 추가했습니다.

     

    결과 1) 

    CS ai 챗봇: 고객님, 먼저 저희 호텔에서 불편함을 느끼시게 되어 대단히 죄송합니다. 침구와 화장실의 청결 상태, 그리고 직원들의 서비스 태도 등 모든 문제점을 개선하도록 노력하겠습니다. 저희 호텔의 서비스와 시설에 대한 신뢰를 회복시키기 위해 노력하겠습니다. 고객님의 소중한 의견에 귀 기울여 더 나은 서비스로 보답하겠습니다. 감사합니다.

     

    거의 동일해보여서 또 한번 돌려서 창의적으로 만들어주는지 보겠습니다. 

     

    결과 2)

    CS ai 챗봇:
    안녕하세요, 고객님. 먼저 이 호텔에서 불편함을 느끼셨다니 저희 호텔을 이용하시는 고객분들께 심려를 끼쳐드려 대단히 죄송합니다. 고객님의 리뷰를 토대로 호텔의 문제점과 개선할 점들을 파악하고 해결해나가겠습니다. 다음에 고객님이 이용하실 다른 호텔에서는 만족스러운 경험을 하실 수 있기를 바라겠습니다. 감사합니다.

     

    이번엔 그냥 제가 요청했던 불편사항들을 모두 포함시켜달라는 내용을 퉁쳐서 사과했네요.

     

    결과 1과 결과 2가 적절히 섞였으면 좋겠는데.. 이게 프롬프트를 잘 줘서 해결할 수 있는 일인가 싶기도 하네요..

    아직 많은 고민과 시도가 필요한 것 같습니다.

    더 테스트 해보고 좋은 결과가 있으면 새로 포스팅 해보겠습니다.

    반응형

    댓글