Python/NLP Code

ChatGPT API에서 이전 대화 기록을 반영하여 호출하는 방법

jimmy_AI 2023. 10. 7. 11:44
반응형

ChatGPT를 웹에서 직접 이용하는 경우에는 이전 대화를 기억하여 채팅을 이어나가지만,
API를 통하여 호출하는 경우에는 기본적으로는 이전 대화를 기억해주지 않습니다.

그래도 API 함수의 기능에 이전 대화의 맥락을 바탕으로 새로운 답변을 생성하도록
만들어줄 수 있는 기능이 있는데요.

이번 글에서는 해당 내용에 대해서 살펴보도록 하겠습니다.

 

 

이전 대화 맥락 반영 ChatGPT API 호출 방법

ChatGPT API 호출 함수에서 이전 히스토리를 반영하는 방법은
messages 인자에 이전 맥락의 대화들을 순서대로 리스트로 묶어서 전달해주시면 됩니다.

여기서 role을 지정할 때, 제가 던진 질문은 user로, AI가 답변했던 내역은 assistant
지정하여 순서대로 묶어서 전달해주어야 하는 점이 중요합니다.

(실제 대화 기록이 아니더라도 이전 대화 기록을 가정하는 것도 가능합니다.)

 

이전 대화 기록을 가정하여 ChatGPT API를 호출한 예시는 아래와 같습니다.

import openai

openai.api_key = "sk-..." # API Key
completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "두 숫자를 말하면 두 개를 더한 답을 알려주면 돼. 10 20"},
              {"role": "assistant", "content": "10과 20을 더한 값은 30입니다."},
              {"role": "user", "content": "40 50"},]
)

# 결과 출력
print(completion['choices'][0]['message']['content']) # 40과 50을 더한 값은 90입니다.

 

위의 예제에서 마지막에 40 50 이라는 두 숫자만 전달해주었는데,
첫 번째 질문에서 부탁한대로 두 숫자를 더한 결과를 첫 답변과 유사하게 반환해 주었습니다.

 

다만, 전체 대화의 맥락 길이 합이 토큰 제한 수를 넘으면 안되는 점을 염두해주세요.

 

반응형

 

심화: ChatGPT API 내 "system" role 기능

위의 예제처럼 messages 인자를 전달해줄 때, 각 메시지의 role 인자에는
user, assistant 외에 system도 전달해줄 수 있습니다.

여기서 system 역할의 기능은 호출 첫 부분에서 원하는 답변 타입 설정이나
새로운 지식 등을 ChatGPT에게 심어줄 수 있는 기능이라고 보시면 됩니다.

아래 예시는 처음에 system 인자의 대화를 포함하여 답변의 방식을 지정해준 예시입니다.

import openai

openai.api_key = "sk-..." # API Key
completion = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "system", "content": "답변은 항상 한국어로 해줘."},
            {"role": "user", "content": "What is Artificial Intelligence?"}]
)

# 결과 출력
print(completion['choices'][0]['message']['content'])
'''인공지능(Artificial Intelligence, AI)은 기계가 인간과 같은 지능적인 작업을 수행할 수 있도록 프로그래밍하는 기술입니다. 이를 위해서는 머신 러닝, 자연어 처리, 컴퓨터 비전 등의 다양한 분야에서 연구가 이루어지며, 
이를 통해 컴퓨터가 학습하고 추론하며 의사 결정을 내릴 수 있도록 합니다. AI를 적용한 다양한 분야와 응용이 이루어지고 있으며, 빅데이터와 클라우드 기술 등의 발전으로 더욱 발전할 것으로 예상됩니다.'''

 

본 질문은 영어로 진행하였지만, system에서 한국어로 답변을 하도록 요구한 내역이
반영되어 결과가 출력된 점을 확인할 수 있었습니다.

 

물론, system 인자를 처음에 지정한 경우에도 이후 user, assistant를 번갈아가며

대화의 히스토리를 반영한 답변을 생성하도록 하는 기능 활용이 가능합니다.