ChatGPT API를 사용해보자

category AI 인공지능/LLM 2023. 3. 6. 13:05
728x90
반응형

사전 준비

 

사용 방법

1. 필수 패키지 import

import openai

2.  API Key 설정

API Key 발급 을 통하여 발급한 키를 입력하여준다.

openai.api_key = '[YOU-OPENAI-API]'

3. 요청 함수 정의

def request_chatgpt(msg):
    return openai.ChatCompletion.create(
        model='gpt-3.5-turbo',
        messages=msg
    )

4. 초기 요청시

일반적으로 대화는 먼저 시스템 메시지로 형식화되고 그 다음에 사용자 및 보조자 메시지가 번갈아 표시되게 하여야 한다.
그렇기 때문에 초기 셋팅시에는 role에 system을 먼저 입력하여 설정한다.

msg = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': 'E-commerce 회사가 하는 일에 대해서 알려줘'},
]
res = request_chatgpt(msg)
print(res)
 
"""
<OpenAIObject chat.completion id=chatcmpl-6qsXr8j5hfK2NpjTMcqJVzW8Js9Q7 at 0x7fabdb2b94f0> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "E-commerce \ud68c\uc0ac\ub294 \uc778\ud130\ub137\uc744 \ud1b5\ud574 \uc0c1\ud488\uc774\ub098 \uc11c\ube44\uc2a4\ub97c \ud310\ub9e4\ud558\ub294 \ud68c\uc0ac\uc785\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c E-commerce \ud68c\uc0ac\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uc77c\uc744 \ud569\ub2c8\ub2e4:\n\n1. \uc81c\ud488 \ub610\ub294 \uc11c\ube44\uc2a4 \ud310\ub9e4: E-commerce \ud68c\uc0ac\ub294 \uc778\ud130\ub137\uc5d0\uc11c \uc81c\ud488\uc774\ub098 \uc11c\ube44\uc2a4\ub97c \ud310\ub9e4\ud558\ub294\ub370, \uc774\ub294 \uc804\uc790 \uc0c1\uac70\ub798 \ud50c\ub7ab\ud3fc\uc744 \ud1b5\ud574 \uc774\ub8e8\uc5b4\uc9d1\ub2c8\ub2e4. \uace0\uac1d\ub4e4\uc740 \uc6f9\uc0ac\uc774\ud2b8\uc5d0\uc11c \uc81c\ud488 \ub610\ub294 \uc11c\ube44\uc2a4\ub97c \uc120\ud0dd\ud558\uace0 \uacb0\uc81c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n2. \uc7ac\uace0 \uad00\ub9ac: E-commerce \ud68c\uc0ac\ub294 \uace0\uac1d\uc758 \uc8fc\ubb38\uc5d0 \ub300\uc751\ud558\uc5ec \uc801\uc808\ud55c \uc218\ub7c9\uc758 \uc0c1\ud488\uc744 \ubcf4\uc720\ud558\uace0 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub294 \ud6a8\uc728\uc801\uc778 \uc7ac\uace0 \uad00\ub9ac\ub85c \uac00\ub2a5\ud569\ub2c8\ub2e4.\n\n3. \ubc30\uc1a1 \ubc0f \ubb3c\ub958: E-commerce \ud68c\uc0ac\ub294 \uc8fc\ubb38\uc774 \ub4e4\uc5b4\uc624\uba74 \uc0c1\ud488\uc744 \ud3ec\uc7a5\ud558\uace0 \ubc30\uc1a1\ud558\ub294 \uc77c\uc744 \ub2f4\ub2f9\ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \ubb3c\ub958\uc13c\ud130\ub97c \uc6b4\uc601\ud558\uace0 \ubc30\uc1a1 \ud30c\ud2b8\ub108\uc0ac\uc640 \ud611\ub825\ud569\ub2c8\ub2e4.\n\n4. \uc628\ub77c\uc778 \ub9c8\ucf00\ud305: E-commerce \ud68c\uc0ac\ub294 \uc6f9\uc0ac\uc774\ud2b8\ub97c \ud1b5\ud574 \uc801\uadf9\uc801\uc778 \ub9c8\ucf00\ud305\uc744 \uc9c4\ud589\ud569\ub2c8\ub2e4. \uc774\ub294 \uac80\uc0c9\uc5d4\uc9c4 \ucd5c\uc801\ud654(SEO), \uac80\uc0c9\uad11\uace0(SEM), \uc18c\uc15c\ubbf8\ub514\uc5b4 \ub9c8\ucf00\ud305 \ub4f1\uc744 \ud3ec\ud568\ud569\ub2c8\ub2e4.\n\n5. \uace0\uac1d\uc11c\ube44\uc2a4: \uace0\uac1d\uc740 E-commerce \ud68c\uc0ac\uc640 \uc8fc\ubb38, \uacb0\uc81c, \ubc30\uc1a1 \ub4f1\uc5d0 \ub300\ud55c \ubb38\uc758\uc0ac\ud56d\uc744 \uac00\uc9c0\uace0 \uc788\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \ucc98\ub9ac\ud558\ub294 \uace0\uac1d\uc11c\ube44\uc2a4 \ud300\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.",
        "role": "assistant"
      }
    }
  ],
  "created": 1678060747,
  "id": "chatcmpl-6qsXr8j5hfK2NpjTMcqJVzW8Js9Q7",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 459,
    "prompt_tokens": 35,
    "total_tokens": 494
  }
}
"""
content = res['choices'][0]['message']['content']
print(content)
 
"""
'E-commerce 회사는 인터넷을 통해 상품이나 서비스를 판매하는 회사입니다. 일반적으로 E-commerce 회사는 다음과 같은 일을 합니다:\n\n1. 제품 또는 서비스 판매: E-commerce 회사는 인터넷에서 제품이나 서비스를 판매하는데, 이는 전자 상거래 플랫폼을 통해 이루어집니다. 고객들은 웹사이트에서 제품 또는 서비스를 선택하고 결제할 수 있습니다.\n\n2. 재고 관리: E-commerce 회사는 고객의 주문에 대응하여 적절한 수량의 상품을 보유하고 있어야 합니다. 이는 효율적인 재고 관리로 가능합니다.\n\n3. 배송 및 물류: E-commerce 회사는 주문이 들어오면 상품을 포장하고 배송하는 일을 담당합니다. 이를 위해 물류센터를 운영하고 배송 파트너사와 협력합니다.\n\n4. 온라인 마케팅: E-commerce 회사는 웹사이트를 통해 적극적인 마케팅을 진행합니다. 이는 검색엔진 최적화(SEO), 검색광고(SEM), 소셜미디어 마케팅 등을 포함합니다.\n\n5. 고객서비스: 고객은 E-commerce 회사와 주문, 결제, 배송 등에 대한 문의사항을 가지고 있을 수 있습니다. 이를 처리하는 고객서비스 팀이 필요합니다.'
"""

5. 이전 문장을 이어서 요청시

여기서 포인트는 role을 assistant로 설정하고 이전 답변을 같이 넣어서 요청해야 한다.
(이전 답변 내용 대신 응답 ID를 넣어서 입력 token 수를 줄이는 방법도 있다.)
API 설명 내용을 보면 하기와 같이 기재되어있기 때문에 이어지는 문장이 길어지면 토큰 수가 길어질 수 있으므로 줄이는 방법을 검토해야한다.

모델은 과거 요청에 대한 기억이 없기 때문에 대화를 통해 모든 관련 정보를 제공해야 합니다. 대화가 모델의 토큰 제한에 맞지 않으면 어떤 방식으로든 대화를 줄여야 합니다.
msg.append({
    'role': 'assistant',
    'content': content
    # 'content': res['id']
})
 
msg.append({
    'role': 'user',
    'content': '위의 문장을 요약해줘'
})

따라서 이어서 문장을 요청시 전체 파라미터는 아래와 같다.

print(msg)

"""
[
   {
      "role":"system",
      "content":"You are a helpful assistant."
   },
   {
      "role":"user",
      "content":"E-commerce 회사가 하는 일에 대해서 알려줘"
   },
   {
      "role":"assistant",
      "content":"E-commerce 회사는 인터넷을 통해 제품이나 서비스를 판매하는 회사입니다. 일반적으로 온라인 상점이나 마켓플레이스를 운영하며, 고객이 원하는 제품을 찾고 구매할 수 있도록 다양한 기능과 서비스를 제공합니다. 이러한 서비스에는 주문 및 결제 처리, 배송 및 반환 정책, 상품 정보 관리, 마케팅 및 프로모션, 고객 서비스 등이 포함됩니다. 또한, 데이터 분석을 통해 고객 성향 및 행동 패턴을 파악하고 개선점을 찾아내며, 신제품 출시 및 제고 관리 등 다양한 업무를 수행합니다."
   },
   {
      "role":"user",
      "content":"위의 문장을 요약해줘"
   }
]
"""

 

es = request_chatgpt(msg)
print(res)
 
"""
<OpenAIObject chat.completion id=chatcmpl-6qsY3vY7GjDNrJ436xyIGlilWFlgt at 0x7fabda2790e0> JSON: {
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "E-commerce \ud68c\uc0ac\ub294 \uc778\ud130\ub137\uc744 \ud1b5\ud574 \uc81c\ud488\uc774\ub098 \uc11c\ube44\uc2a4\ub97c \ud310\ub9e4\ud558\uba70, \uc7ac\uace0\uad00\ub9ac, \ubc30\uc1a1 \ubc0f \ubb3c\ub958, \ub9c8\ucf00\ud305, \uace0\uac1d\uc11c\ube44\uc2a4 \ub4f1\uc758 \uc5c5\ubb34\ub97c \uc218\ud589\ud569\ub2c8\ub2e4.",
        "role": "assistant"
      }
    }
  ],
  "created": 1678060759,
  "id": "chatcmpl-6qsY3vY7GjDNrJ436xyIGlilWFlgt",
  "model": "gpt-3.5-turbo-0301",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 76,
    "prompt_tokens": 513,
    "total_tokens": 589
  }
}
"""
content = res['choices'][0]['message']['content']
print(content)
 
"""
'E-commerce 회사는 인터넷을 통해 제품이나 서비스를 판매하며, 재고관리, 배송 및 물류, 마케팅, 고객서비스 등의 업무를 수행합니다.'
"""
728x90
반응형