-
Open AI API - Open AI API를 이용해서 prompt 결과 반하기, 소모 비용 확인AI/OpenAI API 2024. 1. 27. 14:54
쥬피터 노트북 사용방법
주피터 노트북은 라이브 코드 형식으로 시각화 및 텍스트가 포함된 문서를 만들고 공유할 수 있는 오픈 소스 웹 어플리케이션이다. 진행하는 프로젝트나 코드에 대한 설명을 마크 다운 형식으로 넣을 수 있다. 그리고 작업하는 코드도 같은 화면에 쉽게 기록할 수 있다. 무엇보다 코드의 실행결과를 바로 아래 출력을 해서 프로젝트에 대한 설명 부터 코드 그리고 출력 결과까지 한페이지 안에서 문서화할 수 있는 굉장히 강력한 도구라고 할 수 있다.
특히 데이터 분석 분야에서는 주피터 노트북을 문서화해서 보고서로 작성하는 경우가 굉장히 많다. 주피터 노트북에서 입력하는 공간에 단위는 셀이다.
- 마크다운 셀 - 텍스트를 입력하는 셀
- 코드 입력 셀 - 코드를 입력하는 셀은 코드 입력 셀
보통 주피터 노트북은 따로 설치를 하거나 아나콘다를 통해 파이썬을 설치하면 자동으로 설치된다. VScode안에서도 주피터 노트북 기능을 지원한다.
.ipynb - 주피터 노트북에 파일 확장자.
(Interactive Python notebook)의 약자이다.openai 패키지 설치
pip install openai
예제 코드
#패키지 불러오기 impot openai #API 키 지정하가 open.ai_key = "api key 입력" #기본질문하기 response = openai.ChatCompletion.create( model="gpt-3.5-turbo", message=[{"role":"user", "content": "Tell me briefly how to make a pizza"}] temperature=1, top_p=1, presence_penalty=1, frequency_penalty=1, n=1, max_tokens=4000, ) response = openai.chat.completions.create( model="gpt-3.5-turbo", messages=[{"role":"user", "content": "Tell me briefly how to make a pizza"}] ) print(response.choices[0].message.content)
https://platform.openai.com/docs/api-reference/runs/step-object
위 링크에 질문시 사용되는 상세 파라미터에 대한 정보를 얻을 수 있다. 이런 파라미터들은 웹에서 Chat GPT를 사용할 때는 상세히 컨트롤할 수 없는 부분이다. 대신에 API를 사용해서 질문하면 컨트롤을 할 수 있다.
Model
- GPT-4: GPT4는 가장 많이 알려진 모델
- gpt-4
- gpt-4-32k
- GPT-3.5: 웹에서 무료로 사용시 활용되는 모델
- gpt-3.5-turbo
- gpt-3.5-16k
Message
- 사용자가 입력할 프롬프트가 포함된 리스트
- [{role: "user", "content":"프롬프트 입력"}]
- 역할을 부여하기, 이어서 질문하기 가능
메시지는 말그대로 ChatGPT한테 물어보고 싶은 질문 내용을 텍스트로 입력하는 것이다. 그냥 텍스트 형태로 입력하는 게 아니라 일정한 폼을 갖춰서 질문을 해야 만 답변을 해준다.
왜 이렇게 복잡한 구조를 가지고 있냐고 생각할 수도 있다. 그 이유는 질문을 할 때 역할을 부여할 수도 있고 이전 대화내용을 포함해서 질문하는 기능까지 구현하기 위해서 약간은 복잡해보일 수 있는 형태로 메시지를 입력한다.
Temperature
- 텍스트의 랜덤성과 관련된 파라미터
- 범위 : 0~2
- Default : 1
Temperature를 어떤 레벨로 설정하느냐에 따라 생성하는 텍스트가 사람이 보기에는 굉장히 예측을 벗어나고 다양하고 창의적인 답변의 양상을 띄고, 반대로 Temperature를 낮게 설정하면 좀 더 형식적이고 보수적인 텍스트를 생성하게 된다.
GPT 모델은 확률에 기반한 모델이다. 학습된 데이터를 활용해서 다음 나올 단어들중에 가장 확률이 높은 단어를 고르는게 바로 GPT 모델인데 Temperature를 0으로 하면 다음에 나올 단어 중에 확률이 가장 높은 단어만 골라서 답변을 하게된다. 즉 매번 같은 질문을 해도 동일한 답변만 나오게 된다.
반면 Temperature가 높아질 수록 GPT 모델은 다음에 나올 단어가 가장 확률이 높은 것을 고르는 것 뿐만 아니라 그 다음으로 높은 확률 세번째로 높은 확률이 높은 단어를 고를 수도 있게 설정 값이 변경이 되는 것이다. 이게 바로 Temperature이다.
Top_p
- 텍스트의 랜덤성과 관련된 파라미터
- 범위 : 0~1
- Default : 1
- Top_p가 0.1이면 상위 10%안에 단어만 사용
- Top_p가 1이면 모든 단어들 중 골라서 사용
Top_p는 사실 Temperature랑 거의 비슷한 개념이다. 텍스트 생성의 랜덤성을 조절하는 파라미터이다. Top_p는 토큰 자체의 확률을 조정하는 게 아니라 토큰들을 샘플링하는 범위를 제어하는 것이다. GPT 모델이 다음에 나올 단어에 대한 확률 분포를 계산하고 , Top_p가 0.1이 되면 그 확률상에서 퍼센트가 10%안에 들어오는 단어들 중에만 고를겠다는 개념이 된다. Top_p를 낮출수록 다음에 나올 확률이 높은 단어들 중에서만 선택을 하니까 랜덤성이 줄어들고 Top_p를 높일수록 랜덤성이 늘어나게 된다.
Frequency_penalty
- 동일한 단어를 반복적으로 생성하지 않도록 설정
- 범위 : 0 ~ 2
- Default : 0
모델이 동일한 단어를 반복적으로 생성하지 않도록 설정하는 것이다. Frequency_penalty는 어떤 단어가 어느 빈도로 등장했는지에 따라 영향을 받는다. Frequency_penalty 값을 높게 설정하면 모델이 이미 생성한 것을 다시 생성하는 것을 자제하므로 좀 더 다양하고 중복되지 않는 텍스트를 생성하게 유도할 수 있다.
Presence_penalty
- 이미 등장한 단어의 추가 등장 가능성 튜닝
- 범위 : 0~2
- Default : 0
Presence_Penalty는 이미 생성된 텍스트가 나타날 경우 해당 단어가 등장할 가능성을 줄이는 Penalty이다. Frequency_penalty와는 달리 과거의 예측에서 단어가 나타나는 빈도수에 따라서 달라지진 않는다. OpenAI의 공식 설명에 따르면 Presence_Penalty를 높게 설정할 수록 모델이 새로운 주제에 대해서 이야기할 가능성이 더 높아 진다.
n
- 답변 개수 설정
- Default :1
응답 개수에 대한 파라미터 매번 똑같은 질문에 하나의 답변만 얻는 것이 아니라 여러 개의 답변을 동시에 생성할 때 사용한다.
Max_tokens
- 완성시 생성할 토큰 최대개수
- Defualt : 16
Max_token은 텍스트 생서의 최대 토큰 수를 제한한다. API사용은 코큰 수에 따라 요금이 부과되기 때문에 Max_tokens파라미터를 통해 답변 길이를 조절해서 비용이 너무 많이 부과되는 것을 컨트롤할 수 있다.
예제코드에 대한 반환 결과
{ "id": 'chatcmpl-8lVBcrZyHMAILqsLCbeUuKiXVHUDC', "choices": [ { "finish_reason": 'stop', "index": 0, "logprobs": None, "message": { "content": 'To make a pizza, you will need the following ingredients: ...', "role": 'assistant', "function_call": None, "tool_calls": None } } ], "created": 1706331988, "model": 'gpt-3.5-turbo-0613', "object": 'chat.completion', "system_fingerprint": None, "usage": { "completion_tokens": 292, "prompt_tokens": 15, "total_tokens": 307 } }
- choice: 완료 개체 목록이다. 질문 시 응답 개수(n)를 1로 설정하면 한 개, 2로 설정하면 2개의 완료 개체가 리스트 형태로 저장된다.
- index: 완료 객체의 인덱스이다.
- message: 모델에서 생성된 메시지 내용이다. "content"는 답변 내용 "role"은 질문 시 지정한 역할이다.
- created : 요청한 시점의 타임스템프이다.
- object : 반환된 객체의 유형이다. ChatGPT의 경우 chat.completion 객체로 반환된다.
- usgae: 질문할 때 사용한 토큰 수, 응답할 때 사용한 토큰수, 총 사용한 토큰 수에 대한 정보를 제공한다.
소모 토큰 비용 확인하기
예제
.... print(response.usage)
출력결과
"usage": { "completion_tokens": 335, "prompt_tokens": 15, "total_tokens": 350 }
사용한 모델의 요금표
#0.000715 total_bill = response.usage.prompt_token * 0.001/1000 + response.usage.completion_token * 0.002/1000 #현재 환율을 곱 print("총 발생 비용 {} 원".format(total_bill*1,338)) #"총 발생 비용 0.9 원"
위 가격이 얼마 되지 않는다고 생각할 수도 있지만 모델을 더 성능이 좋은 것으로 바꾸로 계속해서 API를 사용하다보 모르는 사이에 비용이 눈덩이 처럼 불어 날 수 있다.
[초보자를 위한 ChatGPT API 활용법 - 저, 쭌랩]
'AI > OpenAI API' 카테고리의 다른 글
Open AI API - 소모 토큰 비용 확인하기 (1) 2024.01.27 Open AI API - Open API 설명 및 요금 체계 (0) 2024.01.27