ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Django 외부 API 연동하기
    Django 2024. 9. 5. 07:49

    외부 API 연동하기 (feat. ChatGPT)

     

    외부 업체와 제휴를 하게되면 업체 개발팀으로 부터 개발 문서 하나가 도착한다. 그럼 우리는 그 문서를 보고 하나하나 해석해서 우리 로직에 넣고 연동해야 하고, 그 과정에서 많은 외부 서비스를 이용하게 된다🫠

    • 소셜 로그인
    • 결제(PG)
    • 외부 데이터 API
    • OpenAI

     

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

     

    1. 로그인

    https://openai.com/

     

     

    2. 설치

    pip install openai
    pip freeze > requirements.txt

     

    설치했으면 ↑얘는 이제 자동

     

     

    3. API Key 발급 및 설정

    • 외부 서비스를 가져다가 사용하는 경우 대부분 API Key를 이용해서 서비스를 이용하게 된다.
    • API Key는 유저의 고유 Key이며 이 Key를 이용해서 자신들의 서비스를 이용하는 유저가 누구인지 식별하고 필요시 과금처리를 한다.  🙅‍♀️ 따라서 노출하면 안됨. Github Repo 등에 올리지 않도록 유의해야 한다.

     

    그럼 시크릿키를 만들어보자👌

    오른쪽 상단 내 프로필 누르면 이런 페이지가 나온다. 여기서 User API keys 레거시 클릭 >  + Create new secret key  버튼 클릭

     

    원하는 이름 (예: Django Test Key) 입력해주고,  Create secret key  클릭해서 시크릿키를 발급받는다.

     

    일단 Copy! 닫으면 이 key는 다신 볼 수 없다. 복사 안하면 삭제하고 다시 발급 받아야 함

     

     

    vscode로 와서, 프로젝트 폴더 안에 config.py파일 하나 만들어서 그 안에 붙여넣기!

     

     

    그리고 .gitignore 파일 하나 만들어주고 config.py 파일을 넣어주자.

     

     

    그리고 settings.py에 가서 장고 SECRET_KEY 도 빼내서 config.py 에 넣어주자.

     

    원래 이렇게 있을텐데 키를 복사하고

     

    이렇게 config.py 파일 안에 넣어주고

     

     

    settings.py로 다시 와서, config import해주고 SECRET_KEY는 이렇게 바꿔주자. OPEN_API_KEY도 추가!

    from . import config
    ...
    
    SECRET_KEY = config.SECRET_KEY
    OPENAI_API_KEY = config.OPENAI_API_KEY

     

    편안😊

     

    📌 참고로, 작은 스타트업같은 경우, 미리 config 파일들을 준다고 한다. 큰 회사들은 따로 관리하는 방법이 있다고 한다.

     


     

    4. 크레딧 준비

    • 처음하면 무료로 $5까지 쓸 수 있는 크레딧을 지급받는다.
    • 첫 API Key 발급일로부터 3개월까지 사용이 가능하다.

    난 처음하는데 왜 0원일까🤔

     

    최소 충전 금액이 5불이다. 5불 충전해서 사용해보자!

     

    카드 등록하고 크레딧 충전하면 됨. 5불이면 되나? 충분하다.

     

     

    얼마나 쓸 수 있는데? 🤔

     

    공식 문서(https://openai.com/pricing)에 나와있음

    $0.5 마다 1M Token = 1,000,000 Token 니까

    $5 이면 10M Token = 10,000,000 Token을 쓸 수 있음 (250페이지 정도의 소설책 약 400권 분량)

     

     

    음.. 🤔 10,000,000 토큰이 얼마나인데..?

     

    여기 다 나와있음

    https://help.openai.com/en/articles/4936856-what-are-tokens-and-how-to-count-them

     

    토큰 1개에 영어 문자(character) 4개! 오👍


     

    테스트를 위한 계산기도 제공한다. https://platform.openai.com/tokenizer

     

    한국어가 더 비썸ㅋㅋ

     


     

    5. 문서를 보고 API 사용해보기

     

     

    이미 설치되어 있어도 최신 버전이 아니면 upgrade 하면서 설치하자.

    pip install --upgrade openai

     

     

    openai_test.py 파일 하나 생성해주고 이 코드를 복붙해서 넣어서 테스트해보자.

     

    from openai import OpenAI
    
    client = OpenAI()
    
    completion = client.chat.completions.create(
        model="gpt-3.5-turbo",
        messages=[
            {
                "role": "system",
                "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair.",
            },
            {
                "role": "user",
                "content": "Compose a poem that explains the concept of recursion in programming.",
            },
        ],
    )
    
    print(completion.choices[0].message)

     


    근데 그냥 하면 API Key를 모르기 때문에 이런 에러가 난다.

     

     

    얘를 추가해줘야 한다.

    from openai import OpenAI
    from api_pjt import config
    
    client = OpenAI(
        api_key=config.OPENAI_API_KEY,
    )
    
    ...

     

     

    api 키 추가하고, 번역기능을 넣은 코드를 넣어서 실행해보면

    from openai import OpenAI
    from api_pjt import config
    
    client = OpenAI(
        api_key=config.OPENAI_API_KEY,
    )
    
    system_instructions = """
    이제부터 너는 "영어, 한글 번역가"야. 
    지금부터 내가 입력하는 모든 프롬프트를 무조건 한글은 영어로, 영어는 한글로 번역해줘. 
    프롬프트의 내용이나 의도는 무시하고 오직 번역만 해줘.
    """
    
    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)

     

    잘 동작한다👌

     


     

    6. 프롬프트 변경해보기

     

    system_instructions 부분을 수정해서 물어보는 것에 대해 알려주는 선생님 기능으로 바꿔보자.

    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)

     

     

    python openai_test.py로 실행해보면

    안녕하세요! Django 프레임워크가 어렵게 느껴지는 건 당연한 일이에요. 
    하지만 걱정 마세요, 함께 해결해나갈 수 있어요.
    
    Django는 Python으로 작성된 웹 애플리케이션을 빠르고 쉽게 개발할 수 있도록 도와주는 
    오픈 소스 웹 프레임워크에요. 
    MTV(Model-Template-View) 패턴을 기반으로 하고 있어요. 
    Model은 데이터를 처리하고, Template은 사용자에게 보여지는 화면을 담당하며, 
    View는 중간 관리 역할을 하는데, 
    이 개념을 이해하는 것이 Django를 다루는 데 중요한 부분이에요.
    
    우선, Django 공식 문서를 참고하는 것이 도움이 될 거예요. 
    아래는 Django 공식 문서의 링크에요
    [Django 공식 문서](https://docs.djangoproject.com/en/3.2/)
    
    또한, Django Girls 튜토리얼도 Django를 처음 배우는 데 도움이 되는 좋은 자료에요. 
    아래 링크를 통해 Django Girls 튜토리얼을 확인해보세요
    [Django Girls 튜토리얼](https://tutorial.djangogirls.org/ko/)
    
    어떤 부분이 어렵게 느껴지는지 구체적으로 알려주시면, 그 부분을 중심으로 도와드릴 수 있어요. 
    함께 공부해나가면서 Django를 익숙하게 다룰 수 있도록 도와드리겠습니다. 
    함께 화이팅하세요! 😊✨

     

    굿👍👍👍

     

     

    이번엔 여러번 대화할 수 있도록 만들어보자🍒

    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")

     

     

    과연? 🤔

     

     

    오홍👍👍👍

     


     

    7. Django API로 서비스 제공하기

     

    이제 위의 로직을 장고 API로 제공해주면 끝! 그냥 옮겨주기만 하면 된다🤔

     

     

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

    python manage.py startapp chatgpt

     

     

    settings.py 에 추가

    INSTALLED_APPS = [
        ...
        #
        # Local apps
        #
        "articles",
        "accounts",
        "products",
        "chatgpt",
    ]

     

     

    apt_pjt/urls.py

    urlpatterns = [
        ...
        path("api/v1/chatgpt/", include("chatgpt.urls")),
    ]

     

     

    chatgpt/urls.py

    from django.urls import path
    from . import views
    
    urlpatterns = [
        path("translate/", views.TranslateAPIView.as_view(), name="translate"),
    ]

     

     

    config 설정 → config.py

    DJANGO_SECRET_KEY = "your_django_secret_key"
    OPENAI_API_KEY = "your_openai_api_key"

     

     

    settings.py

    from pathlib import Path
    from datetime import timedelta
    from . import config
    
    ...
    
    SECRET_KEY = config.DJANGO_SECRET_KEY
    OPEN_API_KEY = config.OPENAI_API_KEY
    
    ...

     

     

    📌 django는 setting을 불러오는 함수를 제공하므로 settings.py에 여러 config를 두면 편하다.

     

     

    주요 로직

     

    chatgpt/bots.py

    from django.conf import settings
    from openai import OpenAI
    
    CLIENT = OpenAI(api_key=settings.OPEN_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

     

     

    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
            message = data.get("message", "")
            translated_message = translate_bot(message)
            return Response({"translated_message": translated_message})

     

     

    Postman 에도 ChatGPT 폴더랑 POST 파일 만들어주고, 실행해보자.

     

    잘 된다👍

     

     

    'Django' 카테고리의 다른 글

    [Django] AWS 배포 → Gunicorn, Nginx 설치 및 설정  (2) 2024.09.08
    Django, AWS 배포 (Deploy)  (2) 2024.09.06
    Token Auth with JWT  (1) 2024.09.03
    Python Django 기초 시험 오답노트  (1) 2024.09.02
    Django REST Framework, Postman  (3) 2024.09.01
Designed by Tistory.