LLM

[LangChain] Chat 모델 API 호출하기

JanginTech 2025. 1. 15. 17:51

우선 랭체인 말고 파이썬 소스코드를 통해 API 호출을 해보려고 했는데,

 

 

openai.error.RateLimitError 에러가 떴다.

 

1. ⚠️RateLimitError?

OpenAI API를 사용할 때 발생하는 오류로, 현재 할당량을 초과했음을 의미한다.

속도제한(1분) 기다려라, 토큰 더 적게 해라 등 여러 가지 해봤는데 다 무용지물이었다 ㅜ

API 키도 방금 만들었고, 계정도 문제없는데 뭐가 문제지 서치만 하다가 문득 카드 등록을 안 했다는 사실이 떠올랐다.

 

https://platform.openai.com/settings/organization/billing/overview

 

소름 돋게도 카드 등록하고(openai한테 팔천얼마 뜯기고) 터미널 명령어 재실행하니까 정상적으로 호출된 것을 확인할 수 있었다.

API 정상 호출

 

 

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 됐다.

 

API 정상 호출

 

결과의 의미를 살펴보자.

  • 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로 설정했고, 모델은 서로 다른 두 개의 문장을 생성한다.

 

 

결과를 보자.

choices 배열을 집중적으로 보겠다

 

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 호출 방법과 응답 읽는 방법에 대해 알아봤다.