[LLM] OpenAI API (3) - 파이썬 코드로 호출해 보기

2024. 11. 2. 23:11·AI
728x90

 

ChatGPT를 내가 개발하고 있는 서비스에서 호출해서 사용하려면 어떻게 해야 할까? 현재 OpenAI에서는 Curl, Node.js 그리고 Python 이렇게 세 종류의 API를 제공하고 있으며, 이 중 Python에서 사용하는 방법을 정리해보려 한다.

 

 

[LLM] OpenAI API (1) - API key 발급하기

ChatGPT를 내가 개발하고 있는 서비스에서 호출해서 사용하려면 어떻게 해야 할까? 현재 OpenAI에서는 Curl, Node.js 그리고 Python 이렇게 세 종류의 API를 제공하고 있으며, 이 중 Python에서 사용하는 방

dusanbaek.tistory.com

 

[LLM] OpenAI API (2) - Playground를 사용해 보자

ChatGPT를 내가 개발하고 있는 서비스에서 호출해서 사용하려면 어떻게 해야 할까? 현재 OpenAI에서는 Curl, Node.js 그리고 Python 이렇게 세 종류의 API를 제공하고 있으며, 이 중 Python에서 사용하는 방

dusanbaek.tistory.com

 

API key 불러오기

 

먼저 실습은 MacOS, 그리고 주피터 노트북 환경에서 진행한다. API key를 불러오는 방식은 두 가지가 있다. 먼저 시스템 환경 변수에 저장해 두고 필요할 때 가져오는 방식 (보안에 강하다), 그리고 코드에서 직접 api key를 작성하여 불러오는 법이다.

 

먼저 터미널을 열고 해당 명령어를 실행하여 .zshrc 파일을 편집한다.

 

vi ~/.zshrc

 

.zshrc 파일 원하는 위치 아무 데다가

 

export OPENAI_API_KEY= "발급받은 키값을 여기에 넣기"

 

를 작성하고 저장해 준다.

 

from openai import OpenAI
import os

client = OpenAI(api_key= os.getenv("OPENAI_API_KEY"))

 

불러올 때는 이런 방식으로 초기화하면 되는데, 간혹 주피터 노트북으로 실습을 할 때에는 이렇게 환경 변수를 불러오는 방식이 잘 작동하지 않을 때가 있으므로, 만약 오류가 난다면 아래와 같이 직접 불러오는 방식을 사용하자.

 

client = OpenAI(api_key= "이곳에 키값 작성")

 

챗봇 방식의 요청 보내기

 

response = client.chat.completions.create(
    model= "gpt-3.5-turbo",
    messages= [
        {
            "role": "system",
            "content": "너는 AI 전문가야."
        },
        {
            "role": "user",
            "content": "트랜스포머 구조에 대해 알려줘."
        }
    ],
    max_tokens= 50,
    temperature= 1,
    top_p= 1,
    frequency_penalty= 0,
    presence_penalty= 0
)

print(response.choices[0].message.content)

 

client에 api key를 올바르게 넣었다면 위와 같은 코드로 요청을 보내볼 수 있다. create() method가 지니고 있는 프로퍼티가 많지만, 우리가 필수적으로는 model, message만 작성해 주면 되고 나머지 값들은 default 값으로 반영된다. 앞서 설명한 포스팅에 각 프로퍼티가 무엇을 의미하는지 적어뒀으니 해당 포스팅을 참고하면 도움이 될 것이다.

 

위 코드에서는 시스템에게 AI 전문가라는 페르소나를 설정해 주었고, 트랜스포머 구조에 대해 물어보았다. api 비용을 아끼기 위해 max_tokens을 50으로 지정해 보았는데,

 

 

위와 같이 그냥 생성하다가 최대 토큰 수에 닿으면 생성을 멈춘다. 짧게 설명받기 위해서는 최대 토큰 수를 조정하는 것이 아니라 프롬프트를 작성해 주는 게 옳은 절차로 보인다.

 

만약 api의 기능으로 대화형 시스템을 만들고 싶다면 이렇게 GPT가 내보낸 답변을 message에 assistant로 추가해 주는 것이 중요하다.

 

response = client.chat.completions.create(
    model= "gpt-3.5-turbo",
    messages= [
        {
            "role": "system",
            "content": "너는 AI 전문가야."
        },
        {
            "role": "user",
            "content": "트랜스포머 구조에 대해 알려줘."
        },
        {
        	"role": "assistant",
            "content": "트랜스포머(Transformer)는 자연어 처리 분야에서 뛰어난 성능을 보이는 딥러닝 모델 구조로, 2017년에 발표된 "Attention is All You Need" 논문에서 처음 소개되었습니다. 트랜스포머는 순환 신경망(RNN)이나 합성곱 신경망(CNN) 없이도 시퀀스 데이터를 처리하는 데 효과적입니다. 주요 개념인 **어텐션 메커니즘(Attention Mechanism)**을 통해 입력 시퀀스의 모든 위치 간의 관계를 모델링하여 병렬 처리가 가능하고, 길고 복잡한 의존성을 다룰 수 있습니다."
        },
        {
        	"role": "user",
            "content": "너무 길잖아. 짧게 부탁해."
        }
    ],
    max_tokens= 50,
    temperature= 1,
    top_p= 1,
    frequency_penalty= 0,
    presence_penalty= 0
)

print(response.choices[0].message.content)

 

이렇게 message 속에 GPT의 답변을 assistant로 넣어줌으로써 모델이 이전 대화 내용을 기억하고 답변에 참조할 수 있다.

 

문장 완성하기

 

response = client.completions.create(
    model= "gpt-3.5-turbo-instruct",
    prompt= "옛날 옛적에",
    max_tokens= 50
)

print(response.choices[0].text.strip())

 

ChatGPT의 대화 기능이 필요한 것이 아니라면, GPT가 가진 디코더 기능에 초점을 둔 문장 생성 또한 가능하다. 앞선 문장을 주고, 뒤에 이어질 단어들을 확률에 기반하여 생성한다. 

 

 

중간에 잘라서 그런데, 아마 최대 토큰 수를 지정하지 않았다면 꽤 자연스러운 문장이 생성될 것으로 보인다.

 

 

이 외에도 편집, 임베딩 생성, 파인 튜닝을 위한 파일 관리, 그리고 이미지, 음성 인식과 같이 다양한 작업을 api를 통해 해결할 수 있다. 이 정도면 이것저것 할 수 있는 기반은 다진 것 같은데, 만약 시도를 해보다 심화적인 부분에 대한 기록이 필요하다면 추가 포스팅을 진행하겠다.

 

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'AI' 카테고리의 다른 글

[LLM] 트랜스포머 구조 파헤치기 (3) - 정규화와 피드 포워드 층  (0) 2024.11.07
[LLM] 트랜스포머 구조 파헤치기 (2) - 어텐션 (Attention) 이해하기  (3) 2024.11.04
[LLM] OpenAI API (2) - Playground를 사용해 보자  (1) 2024.11.01
[LLM] OpenAI API (1) - API key 발급하기  (0) 2024.10.30
[LLM] 트랜스포머 구조 파헤치기 (1) - 텍스트를 임베딩 (Embedding)으로 변환하기  (3) 2024.10.24
'AI' 카테고리의 다른 글
  • [LLM] 트랜스포머 구조 파헤치기 (3) - 정규화와 피드 포워드 층
  • [LLM] 트랜스포머 구조 파헤치기 (2) - 어텐션 (Attention) 이해하기
  • [LLM] OpenAI API (2) - Playground를 사용해 보자
  • [LLM] OpenAI API (1) - API key 발급하기
100두산
100두산
출발하게 만드는 힘이 동기라면, 계속 나아가게 만드는 힘은 습관이다.
  • 100두산
    정상에서 보자 ✈️
    100두산
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • Life (6)
        • living (1)
      • Research (6)
      • AI (20)
      • Dev (45)
        • iOS (28)
        • Web (4)
        • flutter (9)
        • etc (4)
      • PS (Problem Solving) (23)
      • Computer Science and Engine.. (21)
        • Data Structures and Algorit.. (13)
        • OOP (Object Oriented Progra.. (8)
      • etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    TIP
    ios
    자료구조
    알고리즘
    SKTelecom
    Challenger
    SKT
    백트래킹
    xcode
    PS
    AI
    Python
    파이썬
    c++
    swift
    티스토리챌린지
    오블완
    백준
    BOJ
    D3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
100두산
[LLM] OpenAI API (3) - 파이썬 코드로 호출해 보기
상단으로

티스토리툴바