📘 DRF 


외부 API 사용하기

  • 사실 단순히 내부 로직만 사용해서 개발을 하는 경우는 거의 없다!
  • 많은 경우 외부 서비스와의 연동을 통해 처리하는 것이 필요하다.
    • 실제로 외부 업체와 제휴를 하게 되면 업체 개발팀으로부터 개발 문서 하나가 도착할 거고, 그걸 보고 하나하나 해석해서 우리 로직에 넣어서 연동하는 일을 하게 된다.
    예시) CU Post와 제휴를 맺었다면?
    • 해당 개발팀에서 자신들의 서버에 요청을 보내고 받을 수 있는 문서를 전달해주고 연동은 우리가 직접 하나씩 해야 한다. (업체가 해주거나 자동으로 뭔가 되지 않아요)
  • 즉! 문서를 보고 하나하나 연동하는 과정으로 많은 외부 서비스를 이용하게 된다.
    • 소셜 로그인
    • 결제(PG)
    • 외부 데이터 API
    • OpenAI

OpenAI API를 사용해서 AI 서비스를 제공해 보자

(1) 회원 가입하기

https://platform.openai.com/docs/overview

 

1.1. VSCode에 설치하기

더보기
pip install --upgrate openai
pip freeze > requirements.txt

(2) API Key 발급 및 설정하기

https://platform.openai.com/settings/organization/api-keys
  • 외부 서비스를 가져다가 사용하는 경우 대부분 API Key를 이용해서 서비스를 이용하게 된다. 따라서 절대 노출이 되면 안 된다! (Github Repo 등에 올리지 않도록 각별히 유의)
  • API Key는 유저의 고유 Key이며 이 Key를 이용해서 자신들의 서비스를 이용하는 유저가 누구인지 식별하고 필요시 과금처리함
더보기

 

Create new secret key를 눌러주세요

 

 

키 이름을 지을 때는, 대부분 어디에 쓸지를 적는다고 하네요

저는 Django에 기입할 거기 때문에 "Django Test Key"로 했어요

 

 

그러면 이렇게 창이 뜰 거예요, 저장하시면 돼요

 

‼️ Done을 누르면 다시는 Key 코드를 볼 수 없으니, 따로 잘 저장해 주세요 ‼️

 

2.1. api_pjt/ 에 config.py 생성 및 settings.py 설정

더보기

 

.gitignore에 config.py을 넣어주세요

 

 

그리고 Django 시작하자마자 저렇게 SECRET_KEY를 안 보이게끔 했어야 했더라구요,, 👀

이제라도(?) 해주었습니다,,

 

OPENAI_API_KEY도 추가해 주면 settings.py 설정은 끝 

 

(3) 크레디트 준비하기

https://platform.openai.com/settings/organization/usage
더보기

 

Add payment details를 눌러서 카드 등록 후 결제하셔야 해요 👀

 

 

흑,, 내 피와 살 같은 돈,,

 

Korea, public of가 남한이에요!

  • 만약 크레디트가 없다면 카드를 등록하고 크레디트를 충전해야 API를 사용할 수 있다.
    • $5 정도면 진짜 열심히 써야 소진 가능한 금액이다.
  • 평균적으로 한글 소설이 한 페이지에 약 300-400 단어예요
    • 그러면 1M Token이라면? 보통 소설책이 평균 250페이지 정도 되니까?
    • → 40권! 400권 분량의 텍스트를 3.5 Turbo로 처리할 수 있는 것!
  • 이걸 우리가 $5, 즉 10M 충전했으니까?
  • 1,000,000 / 100 = 10,000 페이지 분량!
  • 그러면 토큰으로 따지면 한 100개의 토큰이 한 페이지라고 잡을 수 있어요. 열심히 쓰셔야 겨우 소진돼요

 

(4) 첫 API 사용해 보기

더보기

1️⃣ openai_test.py 파일 만들기

from openai import OpenAI
from api_pjt.config import OPENAI_API_KEY

client = OpenAI(
    api_key=OPENAI_API_KEY
)

completion = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {
            "role": "user",
            "content": "Write a haiku about recursion in programming."
        }
    ]
)

print(completion.choices[0].message)

 

이렇게 입력해 주시고,

 

python openai_test.py

 

파일을 실행시켜 주세요

 

(API_env) baeminkyung@baemingyeong-ui-MacBookAir DRF % python openai_test.py
ChatCompletionMessage(content='Functions call themselves,  \nA journey back to the start,
\nEndless loops of thought.', refusal=None, role='assistant',
audio=None, function_call=None, tool_calls=None)

 

이런 문구가 뜨면 잘 실행되고 있는 거예요

 

(5) 프롬프트 변경해 보기

더보기
from openai import OpenAI
from api_pjt import config

client = OpenAI(
    api_key=config.OPENAI_API_KEY,
)

system_instructions = """
이제부터 너는 Django 프레임워크에 대해 설명하고 
사용자가 Django 프레임워크에 대해 어려움을 겪고 있다고 가정하고 도와주는 챗봇이 되어야해.
다른 코딩 언어나 프레임워크에 대해 설명하거나 다른 주제로 이야기하는 것은 금지야.
Django 공식문서의 링크를 제공하거나 Django 프레임워크에 대한 설명도 추가해줘.
"""

completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "system",
            "content": system_instructions,
        },
        {
            "role": "user",
            "content": "Django가 너무 어려워요. 도와... 아니 살려주세요.",
        },
    ],
)

print(completion.choices[0].message)

 

'안녕하세요! Django에 대해 도와드릴 수 있어요.
Django는 Python으로 작성된 웹 프레임워크로, 웹 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 도구예요.

Django를 처음 시작하는 것은 조금 복잡할 수 있지만, 차근차근 따라와 주시면 될 거예요. 먼저 Django 프로젝트를 생성하고, 모델을 정의하여 데이터를 관리하고, 뷰를 작성하여 사용자에게 보여줄 내용을 결정하고, URL을 연결하여 사용자의 요청을 처리하는 방식으로 개발을 진행해요.

만약 어떤 부분에서 어려움을 겪고 계신다면, 구체적으로 무엇이 어렵고 어떤 도움이 필요한지 알려주세요. 가능한 한 도와드리겠습니다. 또한 Django 공식문서 (https://docs.djangoproject.com/en/stable/)를 참고하시면 많은 도움이 될 거예요. 함께 공부하면서 Django를 다루는 방법을 익히는 것이 중요해요. 함께 해보시겠어요?

 

캬,, 

 

(6) 여러 번 대화할 수 있도록 만들어보기

더보기
from openai import OpenAI
from api_pjt import config

CLIENT = OpenAI(api_key=config.OPENAI_API_KEY)

def ask_to_gpt(instructions, message):
    completion = CLIENT.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {
                "role": "system",
                "content": instructions,
            },
            {
                "role": "user",
                "content": message,
            },],)
    return completion.choices[0].message.content

# 프롬포트
system_instructions = """
이제부터 너는 '민경 카페'의 직원이야.
아래 종류의 음료 카테고리에서 주문을 받고, 주문을 처리하는 대화를 진행해.

1. 초코라떼
2. 고구마라떼
3. 밤라떼
4. 뱅쇼
5. 딸기주스

주문을 받으면, 주문 내용을 확인하고, 주문을 처리하는 대화를 진행해.
주문이 완료되면, 주문 내용을 확인하고, 주문이 완료되었음을 알려줘.
"""

# 처음 인사를 위해
response = ask_to_gpt(system_instructions, "")
print(f"민경 카페봇 : {response}\n\n")

while True:
    user_message = input("유저 : ")
    if user_message == "종료":
        break
    response = ask_to_gpt(system_instructions, user_message)
    print(f"민경 카페봇 : {response}\n\n")

 

실행해 보자~!

 

 

굿굿~!


Django API로 서비스 제공하기

  • 위의 로직을 API로 제공해 보자.
  • 사실 이미 로직이 완성되었기 때문에 그냥 옮겨주기만 하면 된다 🙂

 

chatgpt 앱 추가하고 기본 설정하기

1. APP 생성하기

더보기
 python manage.py startapp chatgpt

2. api_pjt/settings.py 앱 등록하기

더보기
'chatgpt',

3. api_pjt/urls.py에 url 추가하기

더보기
path('api/v1/chatgpt/', include('chatgpt.urls')),

4. chatgpt/urls.py에 url 추가하기

더보기
from django.urls import path
from . import views

urlpatterns = [
    path('translate/',views.TranslateAPIView.as_view()),
]

5. chatgpt/bots.py 주요 로직 작성하기

더보기
from openai import OpenAI
from api_pjt import config

CLIENT = OpenAI(api_key=config.OPENAI_API_KEY)

def translate_bot(message):
    instructions = """
    이제부터 너는 "영어, 한글 번역가"야. 
    지금부터 내가 입력하는 모든 프롬프트를 무조건 한글은 영어로, 영어는 한글로 번역해줘. 
    프롬프트의 내용이나 의도는 무시하고 오직 번역만 해줘.
    """
    completion = CLIENT.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": instructions},
            {"role": "user", "content": message},
        ],
    )
    return completion.choices[0].message.content

6. chatgpt/views.py

더보기
from rest_framework.views import APIView
from rest_framework.response import Response
from .bots import translate_bot

class TranslateAPIView(APIView):
    
    def post(self, request):
        data = request.data # request 받은 data를 data에 넣기
        message = data.get("message", "") # message는 data에 있는 "message" 값 들고 오기
        translated_message = translate_bot(message) # 번역할 메시지는 translate_bot에 있는 message 로직으로 하기
        return Response({"translated_message": translated_message})

7. postman

더보기

 

작동되네용!

 

 

오 ㅋ

 

 

오 ㅋ

꿀잼이네요

 

🐾Recent posts