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

GPTCHAT 프롬프트 엔지니어가 되기 위한 스터디 5 - 변환하기

by davi_kr 2023. 5. 11.

목차

    반응형

    ChatGPT로 할 수 있는 변환(transform)에 대해서 알아보겠습니다.

    변환은 다양한 형태가 있을 수 있는데, 앞서 다뤘던 요약본을 만드는 행위도 변환으로 볼 수 있습니다.

     

    오늘 다룰 변환의 종류는 아래와 같습니다.

     

    톤 바꾸기

    형식 바꾸기

    그 외의 변환

    기본 셋팅

    import openai
    openai.api_key = '나의 api key 등록하기'
    
    # gpt 모델 가져오기
    def get_completion(prompt, model="gpt-3.5-turbo"): # 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=0, # this is the degree of randomness of the model's output
        )
        return response.choices[0].message["content"]

     

    1. 톤 바꾸기 (Tone Change)

    텍스트의 톤을 원하는 대로 바꿀 수 있습니다. 부정적으로 적혀진 내용을 긍정적으로 적을 수 있으며, 구어체 형식의 글을 이메일 형식으로 바꿀 수도 있습니다. 

    * 아래는 그냥 제가 gpt에게 임의로 부정적인 의견을 만들어달라고 해서 만들어낸 예시입니다.

     

    prompt = f"""
    토니: 돈이 너무 많이 들어서 실패할 것 같다.
    수지: 우주 여행이 아직 너무 위험한 상황에서 사람들을 보내는 것은 무책임한 것 같아.
    민호: 우주 여행의 비용 대비 효용이 충분하지 않아 보여서 스페이스 X의 프로젝트에 의문이 든다.
    지은: 지구의 환경 문제를 해결하기 위한 노력에 투자해야지, 우주 여행에 자원을 쏟는 것은 낭비라고 생각한다.
    철수: 스페이스 X의 우주선 기술은 아직 시험적인 단계라 안전성에 대한 보장이 부족하다고 생각해.
    
    이 5가지 의견을 긍정적인 톤으로 적어줘
    """
    response = get_completion(prompt)
    print(response)

     

    결과)
    토니: 돈이 많이 들어가긴 하지만, 우주 여행이 성공하면 인류에게 큰 발전을 가져올 수도 있어서 기대가 된다.
    수지: 우주 여행은 아직 위험하지만, 기술 발전과 함께 안전성이 높아지면 가능성이 더욱 커질 것 같아요.
    민호: 스페이스 X의 프로젝트가 비용 대비 효용이 충분하지 않다는 의견도 있지만, 새로운 기술과 발전 가능성을 고려해 볼 때, 기대감이 큽니다.
    지은: 지구의 환경 문제를 해결하는 것이 중요하다는 의견에 동의합니다. 하지만, 우주 여행도 인류의 가능성을 넓혀줄 수 있는 분야이기 때문에 무시할 수 없는 가치가 있다고 생각합니다.
    철수: 스페이스 X의 우주선 기술이 아직 시험적인 단계라는 것은 사실이지만, 이러한 도전적인 프로젝트가 기술 발전에 큰 역할을 할 수 있다는 점에서 긍정적으로 생각해봅니다.

     

    prompt = f"""
    이 사람들의 의견을 종합해서 스페이스 x 담당자에게 이메일을 보내고 싶어 
    이메일 형식으로 바꿔줘
    """
    response = get_completion(prompt)
    print(response)

     

    결과) 

    제목: 스페이스 X의 우주 여행 프로젝트에 대한 의견

    안녕하세요,
    저희는 스페이스 X의 우주 여행 프로젝트에 대해 의견을 나누고 있는 사람들입니다. 저희는 이 프로젝트에 대해 다양한 의견을 가지고 있습니다.

    토니씨는 비용 문제로 실패할 것 같다는 우려를 표명하였고, 수지씨는 우주 여행이 아직 위험하다는 것을 지적하였습니다. 민호씨는 비용 대비 효용이 충분하지 않다는 의문을 제기하였고, 지은씨는 지구의 환경 문제를 해결하는 것이 더 중요하다는 견해를 밝혔습니다. 마지막으로 철수씨는 스페이스 X의 우주선 기술이 아직 시험적인 단계라 안전성에 대한 보장이 부족하다는 것을 우려하고 있습니다.

    이러한 다양한 의견을 종합해보면, 스페이스 X의 우주 여행 프로젝트는 아직 많은 과제가 남아있는 것으로 보입니다. 따라서, 이 프로젝트에 대한 안전성과 비용 대비 효용 등을 더욱 신중하게 검토해야 할 필요가 있습니다.

    감사합니다.
    최선을 다해,
    [이름]

     

    약간 어색해보이는 부분만 고쳐주면 그래도 초안 작성에 들이는 시간을 줄일 수 있다는 점에서는 의미가 있어보입니다.

    다만, gpt가 항상 똑같은 톤을 만들어주지 않을 수 있기에 이 점을 감안해야 합니다.

    현재로는 완전한 개인화가 지원된다 보기는 어려워 참고용으로 쓰기엔 좋을 것 같습니다.

     

    2. 형식 바꾸기 (Format Change)

    형식 바꾸기란 표현이 위의 톤 바꾸기와 유사할 수 있는데, 여기서는 개발 쪽에서 dict 형식을 object로 변환하는 방식을 다뤄보겠습니다.

     

    employee = {
        "name": "Jane Doe",
        "position": "Software Engineer",
        "age": 28,
        "skills": ["Python", "JavaScript", "C++", "React"],
        "address": {
            "street": "123 Main Street",
            "city": "San Francisco",
            "state": "CA",
            "zipcode": "94101"
        }
    }
    
    prompt = f"""
    {employee}를 자바스크립트의 object로 변환해줘
    """
    
    response = get_completion(prompt)
    print(response)

     

    결과)

    {
      name: 'Jane Doe',
      position: 'Software Engineer',
      age: 28,
      skills: ['Python', 'JavaScript', 'C++', 'React'],
      address: {
        street: '123 Main Street',
        city: 'San Francisco',
        state: 'CA',
        zipcode: '94101'
      }
    }

     

    이런 식으로 변환을 바로 해줘서, 필요한 데이터 형식이 있다면 데이터를 넣고 바로 그 형식으로 만들어달라고만 하면 됩니다.

     

    *미세 꿀팁이지만.. 저는 dict를 넣고 원하는 value를 얻을 수 있는 key값이 뭔지를 물어보기도 합니다.

     

    employee = {
        "name": "Jane Doe",
        "position": "Software Engineer",
        "age": 28,
        "skills": ["Python", "JavaScript", "C++", "React"],
        "address": {
            "street": "123 Main Street",
            "city": "San Francisco",
            "state": "CA",
            "zipcode": "94101"
        }
    }
    prompt = f"""
    {employee}에서 city의 value를 key값을 통해 가져오고 싶어. 이때 쓸 코드 알려줘
    """
    response = get_completion(prompt)
    print(response)

     

    결과)

    다음과 같이 코드를 작성할 수 있습니다:

    ```python
    person = {'name': 'Jane Doe', 'position': 'Software Engineer', 'age': 28, 'skills': ['Python', 'JavaScript', 'C++', 'React'], 'address': {'street': '123 Main Street', 'city': 'San Francisco', 'state': 'CA', 'zipcode': '94101'}}

    city = person['address']['city']
    print(city)  # 출력 결과: San Francisco
    ```

    위 코드에서는 `person` 딕셔너리에서 `address` 키의 값인 딕셔너리를 가져온 후, 그 딕셔너리에서 `city` 키의 값을 가져와 `city` 변수에 할당합니다. 이후 `print()` 함수를 사용하여 `city` 변수의 값을 출력합니다.

     

    -----

    여기서 나오는 person['address']['city']를 가져다 바로 사용합니다. 이게 간단한 건 바로 보이는데 엄청 복잡할 때는 그냥 넣고 물어보는게 더 빨라서 아주 애용하고 있습니다.

     

    3. 그 외의 변환

    위의 내용이 그나마 덜 익숙한 내용이라 위의 내용 위주로 정리했습니다.

    변형에는 이외에도 아래와 같은 것들도 있습니다.

    1. 번역

    2. 오탈자 체크

    3. 요약

    4. 질문 생성

     

    이런 유형들이 있구나를 인지하고 필요에 따라 원하는 프롬프트를 사용하면 좋을 것 같네요.

     

     

    반응형

    댓글