[LangChain] Chat 모델 API 호출하기
우선 랭체인 말고 파이썬 소스코드를 통해 API 호출을 해보려고 했는데,
openai.error.RateLimitError 에러가 떴다.
1. ⚠️RateLimitError?
OpenAI API를 사용할 때 발생하는 오류로, 현재 할당량을 초과했음을 의미한다.
속도제한(1분) 기다려라, 토큰 더 적게 해라 등 여러 가지 해봤는데 다 무용지물이었다 ㅜ
API 키도 방금 만들었고, 계정도 문제없는데 뭐가 문제지 서치만 하다가 문득 카드 등록을 안 했다는 사실이 떠올랐다.
https://platform.openai.com/settings/organization/billing/overview
소름 돋게도 카드 등록하고(openai한테 팔천얼마 뜯기고) 터미널 명령어 재실행하니까 정상적으로 호출된 것을 확인할 수 있었다.
2. 해석
실행코드는 다음과 같다.
import json
import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "user",
"content": "iPhone8 출시일을 알려주세요"
},
]
)
print(json.dumps(response, indent=2, ensure_ascii=False))
gpt-3.5-turbo를 호출하고 model에 모델명을 지정하여 전송메시지를 messages에 정의했다.
role 내용은 일단 제외하고
결과는 response에 저장되어 json.dumps를 통해 보기 좋게 변환되어 print 됐다.
결과의 의미를 살펴보자.
- id: 각 호출에 대한 고유한 ID로, 잘 쓰진 않고 API 호출 로그 관리 및 특정 호출 추적할 때 사용한다.
- object: API가 반환하는 객체 종류. 'chat.completion'으로 나와있는데 이는 Chat모델임을 알 수 있다.
- choices: 반환된 결과의 배열. message의 content에 AI 답변이 들어가 있는 걸 볼 수 있다.
- usage: API 사용량. 순서대로 입/출력 토큰 수 total_tokens는 총 토큰 수를 의미한다. 이 토큰 수에 따라 과금이 이뤄진다
API는 매개변수를 지정해 작동을 변경할 수 있다.
3. 매개변수 지정
import json
import openai
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "user",
"content": "20대 여자 반지갑 브랜드 추천해줘!"
},
],
max_tokens=50,
temperature=1,
n=2,
)
print(json.dumps(response, indent=2, ensure_ascii=False))
max_tokens: 생성할 문장의 최대 토큰 수
나는 최대 50개의 토큰을 가진 문장을 생성하라고 지정해 줬다. 그렇다고 항상 모델이 최대 토큰 수까지만 문장을 생성하는 것은 아님에 주의해라!
상황에 따라 더 적은 토큰 수의 문장을 만들 수도 있다 ㅎㅎ
temperature: 문장의 다양성을 나타내는 매개변수(범위: 0~2)
값이 높을수록 출력의 다양성이 높아져, 예측의 확신도가 낮은 선택지를 선택하기 쉬워진다
반대로
값이 낮을수록 출력은 확신도가 높은 선택지에 편중된다는 의미다.
n: 생성할 문장의 수
나는 생성할 문장을 2로 설정했고, 모델은 서로 다른 두 개의 문장을 생성한다.
결과를 보자.
n=2 설정대로 모델은 두 가지 응답을 생성했으며, 각 선택지는 0부터 시작하는 index번호로 매겨져 있다.
각 선택지의 message도 보자.
각기 다른 응답이 설정되어 있다.
이는 temperature=1로 설정돼 있어 모델이 다양한 응답을 생성하기 쉬웠기 때문이다!
각 선택지의 finish_reason도 보자.
finish_reason은 모델이 응답을 종료한 이유를 나타낸다.
단어에서 예측할 수 있듯이, 우리가 설정해 준 max_tokens에 맞춰 생성된 것을 확인할 수 있다.
stop | 자연스러운 끝을 찾은 경우 |
length | max_tokens에 도달한 경우 |
마지막으로, usage를 살펴보겠다.
prompt_tokens: 28
completion_tokens: 100
total_tokens: 128
입력한 토큰이 28, 생성된 응답 토큰이 100, 총합 128 토큰임을 나타낸다.
max_tokens을 50으로 설정했음에도 응답 토큰이 100인 이유는, n=2, 2개의 응답이 생성됐기 때문!
이렇듯 모델의 출력을 이해하기 위해서는 출력의 각 부분이 무엇을 의미하는지 알고 있어야 하며,
매개변수를 적절히 활용하면 더 나은 응답을 얻을 수 있음을 배웠다.
여기까지 Chat 모델의 기본적인 API 호출 방법과 응답 읽는 방법에 대해 알아봤다.