Text generation?
입력에 대한 텍스트 출력 결과를 제공하며, 자연어 및 코드와 이미지를 이해할 수 있도록 훈련된 모델을 사용한다.
Chat Completions API
채팅 모델은 메세지 목록을 입력으로 받아 모델이 생성한 메세지를 출력으로 반환한다.
보통 여러 차례의 대화를 쉽게 진행하도록 설계되었지만, 단일 작업에서도 유용하게 사용 가능하다.
관련 API 정보 :
OpenAI Platform
주요 매개변수는 messages 이며, messages 는 메세지 객체의 배열이어야한다.
아래 예시처럼 messages에 이전 메세지를 담아서 전달해야 이전 대화 기록을 API에 사용할 수 있다.
일반적인 대화 순서(messages 의 요소 순서)는 system → user
assistant 순서로 반복된다.
Example
GPT3.5 시기의 내용이긴 하지만, 첫 요소로 설정된 system role이 정상적으로 적용되지 않고 마지막으로 설정해야 system role이 적용된다는 내용도 있었다.
현재 GPT4 에서는 해결되었는지 모르겠지만, 관심있다면 읽어봐도 좋을 것 같다.
OpenAI Developer ForumThe “system” role - How it influences the chat behavior
![link icon](https://global.discourse-cdn.com/openai1/optimized/1X/4659b509fa5c4fa41b0a8e82ed87a7412c5a46a7_2_32x32.png)
Role
API 사용 시, {"role": "system", "content": "You are a helpful assistant."} 처럼 각 메세지에 role 을 설정하여 전달하는 것을 확인할 수 있다.
이 role 은 3개가 설정이 가능하며, 각 기능은 아래와 같다.
Name | Description |
system | 어시스턴트(답변하는 주체)의 답변 방식이나 행동을 제어하는데 도움을 줄 수 있는 메세지이다. |
user | 사용자가 입력한 요청 내용이다.
ChatGPT에서 우리가 채팅창에 입력한 메세지라고 생각하면 된다. |
assistant | 사용자(user)과 지속적으로 대화를 주고받으며 답변하는 주체이다. |
JSON Mode
Chat Completions API 사용 시, Response 메세지를 단순한 Json 형태로 받도록 설정할 수 있다.
기본적으로 Response의 Content는 텍스트 형식의 응답을 제공할 수 있었다.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo-0125",
response_format={ "type": "json_object" },
messages=[
{"role": "system", "content": "You are a helpful assistant designed to output JSON."},
{"role": "user", "content": "Who won the world series in 2020?"}
]
)
# The Los Angeles Dodgers won the World Series in 2020.
print(response.choices[0].message.content)
Python
복사
이때 아래 예시 처럼 response_format 을 json_object 로 설정한다면 JSON Mode를 사용할 수 있다.
하지만, 반환되는 Json의 스키마를 직접 지정할 수 없기 때문에, 이 경우에는 다른 방법을 고려해야한다.
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo-0125",
response_format={ "type": "json_object" },
messages=[
{"role": "system", "content": "You are a helpful assistant designed to output JSON."},
{"role": "user", "content": "Who won the world series in 2020?"}
]
)
# {
# "winner": "Los Angeles Dodgers",
# "year": 2020
# }
print(response.choices[0].message.content)
Python
복사
Reproducible outputs
해당 기능은 현재 gpt-4-1106-preview and gpt-3.5-turbo-1106 모델에서만 지원하는 베타 버전이다.
기본적으로 Chat의 Response는 매 요청마다 다를 수 있다.
이를 seed 매개변수와 system_fingerprint 응답 필드를 통해 어느정도 제어가 가능하다.
Example (Seed 사용을 통한 답변의 일관성 설정)
상세한 내용은 아래를 참고하면 좋다.
Managing tokens
GPT와 같은 언어 모델은 토큰이라는 단위로 텍스트를 다룬다.
이때 각 토큰은 한 단어보다 길 수도 있고, 그렇지 않을 수도 있다.
특정 문자열이 6토큰으로 설정되는 예시이다.
"ChatGPT is great!" → ["Chat", "G", "PT", " is", " great", "!"]
이 토큰들은 API 호출 비용 / 시간 / 한도에 대해 직접적으로 영향을 주기 때문에, 관리의 필요성이 있다.
API 사용 시, 입력에 사용된 토큰 + Response 메세지 토큰에 모두 비용이 청구된다.
입력 / 출력 토큰 비용이 다른 모델도 있으니 참고하자.
response['usage']['total_tokens'] 를 사용하여, 토큰의 갯수 확인 가능
그리고 아래의 내용을 참고하면, 실제 요청하지 않고도 토큰 갯수를 구할 수 있다.
OpenAI에서 사용하는 tiktoken 토큰화 라이브러리를 사용한 소스이다.
Parameter details
Frequency and presence penalties
Response 결과에서 반복적인 토큰의 등장 가능성을 조절하기 위해 사용된다.
즉, 답변에서 사용될 수 있는 Token의 다형성을 조절하는 것이다.
계산에 사용되는 frequency_penalty 와 presence_penalty 는 아래 설명을 통해 참고하자
•
frequency_penalty : 특정 토큰이 얼마나 자주 사용되었는지를 확인하여 확률 조정
◦
•
presence_penalty : 한번이라도 사용된 토큰을 확인하여 재사용의 확률을 조정
◦
페널티 작동 원리(계산법)
Token log probabilities
Response에서 각 출력 토큰의 확률에 대한 정보를 반환한다.
이를 사용하여 모델이 토큰 출력에 대한 정보를 평가하거나 개선에 사용할 수 있다.
Example
Completions API (Legacy)
2023년 7월 이후 업데이트가 중단된 레거시 API이다.