ChatGPT API 기본¶

학습 목표¶

  • ChatGPT API를 이용하여 GPT-4를 활용하는 간단한 챗봇을 구현해 본다.
In [ ]:
 

라이브러리 설치¶

pip install openai
In [1]:
!pip install openai
Collecting openai
  Downloading openai-1.42.0-py3-none-any.whl.metadata (22 kB)
Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.10/dist-packages (from openai) (3.7.1)
Requirement already satisfied: distro<2,>=1.7.0 in /usr/lib/python3/dist-packages (from openai) (1.7.0)
Collecting httpx<1,>=0.23.0 (from openai)
  Downloading httpx-0.27.2-py3-none-any.whl.metadata (7.1 kB)
Collecting jiter<1,>=0.4.0 (from openai)
  Downloading jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.6 kB)
Requirement already satisfied: pydantic<3,>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from openai) (2.8.2)
Requirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from openai) (1.3.1)
Requirement already satisfied: tqdm>4 in /usr/local/lib/python3.10/dist-packages (from openai) (4.66.5)
Requirement already satisfied: typing-extensions<5,>=4.11 in /usr/local/lib/python3.10/dist-packages (from openai) (4.12.2)
Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai) (3.7)
Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai) (1.2.2)
Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from httpx<1,>=0.23.0->openai) (2024.7.4)
Collecting httpcore==1.* (from httpx<1,>=0.23.0->openai)
  Downloading httpcore-1.0.5-py3-none-any.whl.metadata (20 kB)
Collecting h11<0.15,>=0.13 (from httpcore==1.*->httpx<1,>=0.23.0->openai)
  Downloading h11-0.14.0-py3-none-any.whl.metadata (8.2 kB)
Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1.9.0->openai) (0.7.0)
Requirement already satisfied: pydantic-core==2.20.1 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1.9.0->openai) (2.20.1)
Downloading openai-1.42.0-py3-none-any.whl (362 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 362.9/362.9 kB 10.2 MB/s eta 0:00:00
Downloading httpx-0.27.2-py3-none-any.whl (76 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 76.4/76.4 kB 2.7 MB/s eta 0:00:00
Downloading httpcore-1.0.5-py3-none-any.whl (77 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.9/77.9 kB 4.1 MB/s eta 0:00:00
Downloading jiter-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (318 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 318.9/318.9 kB 11.4 MB/s eta 0:00:00
Downloading h11-0.14.0-py3-none-any.whl (58 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 2.3 MB/s eta 0:00:00
Installing collected packages: jiter, h11, httpcore, httpx, openai
Successfully installed h11-0.14.0 httpcore-1.0.5 httpx-0.27.2 jiter-0.5.0 openai-1.42.0

API KEY 인증¶

In [3]:
import os
from openai import OpenAI

def init_api():
    with open("chatgpt.env") as env:
       for line in env:
           key, value = line.strip().split("=")
           os.environ[key] = value

init_api()
client = OpenAI(api_key  = os.environ.get("API_KEY"))

print(client)
<openai.OpenAI object at 0x7d84e0452440>

OpenAI의 GPT-4모델을 활용하여 사용자에게 여행정보를 제공하는 챗봇을 구현¶

In [4]:
model = "gpt-4"
# First prompt to hashtags into a Python list
messages = [
    {
        "role": "system",
        "content":
            "당신은 사람들이 여행정보를 제공하는 챗봇입니다. "
            "친절한 설명을 해 주세요."
    },
    {
        "role": "user",
        "content":
            "한국여행을 하려고 해. 서울의 여행지를 몇군데 추천해주렴."
    },
]

## OpenAI의 API를 호출하여 주어진 메시지를 바탕으로 모델에게 응답을 요청
response = client.chat.completions.create(
  model=model,          # 사용자 모델 지정
  messages=messages,    # 대화 내용 리스트
  max_tokens=500,       # 생성할 응답의 최대 길이
  temperature=0,        # 응답의 창의성 정도를 조절
)

answer = response.choices[0].message.content   # 모델이 생성한 응답을 추출
print(answer)
물론이죠, 한국의 수도인 서울에는 다양한 여행지가 있습니다. 

1. 경복궁: 조선 시대의 궁궐로, 한복을 입고 방문하면 입장료가 무료입니다. 궁 내부에는 국립민속박물관도 있어 한국의 전통문화를 체험하실 수 있습니다.

2. 명동: 쇼핑과 먹거리가 가득한 곳으로, 특히 화장품 쇼핑에 좋습니다. 명동성당도 방문해보세요.

3. 남산타워: 서울의 전경을 한눈에 볼 수 있는 곳입니다. 낮이나 밤이나 멋진 풍경을 즐길 수 있습니다.

4. 북촌한옥마을: 전통적인 한옥이 잘 보존된 곳으로, 한국의 고유한 아름다움을 느낄 수 있습니다.

5. 이태원: 다양한 나라의 음식과 문화를 체험할 수 있는 곳입니다. 국제적인 분위기를 즐기고 싶다면 추천드립니다.

6. 청계천: 도심 속에서 힐링을 즐길 수 있는 곳입니다. 밤에는 아름다운 조명이 켜져 분위기가 더욱 좋습니다.

이 외에도 서울에는 많은 관광지가 있으니, 여행 계획에 따라 선택하시면 좋을 것 같습니다. 좋은 여행 되세요!

텍스트에서 키워드 추출하기¶

  • ChatGPT에게 텍스트에서 중요한 단어들(키워드)을 찾아달라고 요청하는 예제
  • 시스템 역할: 첫 번째 메시지에서 role이 "system"인 것은 AI의 역할을 설정
  • 사용자 요청: role이 "user"인 메시지는 사용자가 AI에게 요청하는 내용
  • AI의 응답: role이 "assistant"인 메시지는 AI가 사용자에게 응답
In [5]:
model = "gpt-4"
messages = [
    {
        "role": "system",
        "content":
            "당신은 사람들이 텍스트에서 중요한 개념과 관련된 키워드를 "
            "추출할 수 있도록 돕는 도우미입니다. 키워드는 텍스트의 주요 주제를 "
            "나타내는 가장 중요한 단어들입니다."
    },
    {
        "role": "user",
        "content":
            "리오넬 메시는 아르헨티나의 축구 선수로, 그의 기술과 비전은 "
            "세계적으로 유명합니다. 그는 바르셀로나에서 대부분의 경력을 보냈으며, "
            "수많은 골과 어시스트 기록을 세웠습니다. 최근에는 파리 생제르맹으로 이적하여 "
            "새로운 도전에 나섰습니다. 메시는 여러 차례 발롱도르를 수상한 경력이 있으며, "
            "현존하는 최고의 선수 중 하나로 평가받고 있습니다."
    },
    {
        "role": "assistant",
        "content":
            "[\"리오넬 메시\", \"아르헨티나\", \"축구 선수\", "
            "\"기술\", \"비전\", \"바르셀로나\", "
            "\"골\", \"어시스트\", \"파리 생제르맹\", "
            "\"이적\", \"발롱도르\", \"최고의 선수\"]"
    },
    {
        "role": "user",
        "content":
            "크리스티아누 호날두는 포르투갈의 축구 선수로, 놀라운 신체 능력과 "
            "득점력으로 유명합니다. 그는 맨체스터 유나이티드와 레알 마드리드에서 "
            "큰 성공을 거두었으며, 유벤투스에서 뛰어난 경기력을 이어갔습니다. "
            "호날두는 챔피언스 리그 최다 득점자로 기록되어 있으며, 여러 차례 "
            "발롱도르를 수상하였습니다. 그의 헌신과 훈련 태도는 많은 젊은 선수들에게 "
            "영감을 주고 있습니다."
    },
    {
        "role": "assistant",
        "content":
            "[\"크리스티아누 호날두\", \"포르투갈\", \"축구 선수\", "
            "\"신체 능력\", \"득점력\", \"맨체스터 유나이티드\", "
            "\"레알 마드리드\", \"유벤투스\", \"챔피언스 리그\", "
            "\"최다 득점자\", \"발롱도르\", \"훈련 태도\"]"
    },
    {
        "role": "user",
        "content":
            "네이마르는 브라질의 축구 선수로, 화려한 드리블과 창의적인 플레이로 "
            "유명합니다. 그는 산투스에서 경력을 시작해 바르셀로나에서 리오넬 메시와 "
            "함께 강력한 공격 조합을 이루었습니다. 이후 파리 생제르맹으로 이적하여 "
            "팀의 핵심 선수로 활약하고 있습니다. 네이마르는 브라질 국가대표로도 "
            "많은 경기에 출전하여 팀을 이끌고 있으며, 그의 독특한 스타일은 팬들에게 "
            "큰 즐거움을 줍니다."
    },
]
In [6]:
response = client.chat.completions.create(
  model=model,
  messages=messages,
  max_tokens=100,
  temperature=0,
)
print(response.choices[0].message.content)
["네이마르", "브라질", "축구 선수", "드리블", "창의적인 플레이", "산투스", "바르셀로나", "리오넬 메시", "공격 조합", "파리 생제르맹", "이적", "국가대표", "
In [7]:
answer
Out[7]:
'물론이죠, 한국의 수도인 서울에는 다양한 여행지가 있습니다. \n\n1. 경복궁: 조선 시대의 궁궐로, 한복을 입고 방문하면 입장료가 무료입니다. 궁 내부에는 국립민속박물관도 있어 한국의 전통문화를 체험하실 수 있습니다.\n\n2. 명동: 쇼핑과 먹거리가 가득한 곳으로, 특히 화장품 쇼핑에 좋습니다. 명동성당도 방문해보세요.\n\n3. 남산타워: 서울의 전경을 한눈에 볼 수 있는 곳입니다. 낮이나 밤이나 멋진 풍경을 즐길 수 있습니다.\n\n4. 북촌한옥마을: 전통적인 한옥이 잘 보존된 곳으로, 한국의 고유한 아름다움을 느낄 수 있습니다.\n\n5. 이태원: 다양한 나라의 음식과 문화를 체험할 수 있는 곳입니다. 국제적인 분위기를 즐기고 싶다면 추천드립니다.\n\n6. 청계천: 도심 속에서 힐링을 즐길 수 있는 곳입니다. 밤에는 아름다운 조명이 켜져 분위기가 더욱 좋습니다.\n\n이 외에도 서울에는 많은 관광지가 있으니, 여행 계획에 따라 선택하시면 좋을 것 같습니다. 좋은 여행 되세요!'
  • 사용자가 리오넬 메시에 대해 글을 주면, AI는 그 글에서 "리오넬 메시", "축구 선수", "발롱도르" 같은 중요한 키워드 뽑아냅니다.

마무리¶

이번 프로젝트에서는 AI 모델을 활용하여 텍스트 분석 및 챗봇 구현에 대해 알아보았습니다.

주요 학습 성과¶

  1. 기본 개념 이해: ChatGPT와 같은 대규모 언어 모델의 기본 동작 원리를 이해
  2. API 사용법 습득: OpenAI API를 활용하여 실제 애플리케이션에 AI 기능을 추가하는 방법 확인.
  3. 실용적인 예제: 실제 텍스트 데이터를 사용하여 AI가 유용한 결과를 생성할 수 있는지 확인.

추가적으로 탐구해볼 만한 주제:

  • 챗봇의 자연스러운 대화 흐름 개선하기
  • 다양한 도메인에 맞는 맞춤형 챗봇 만들기
  • 사용자 경험을 향상시키기 위한 UI/UX 디자인 고려하기

수고하셨습니다.

In [ ]: