[MS Azure] Azure OpenAI Studio로 GPT 모델을 배포하고 서비스에 OpenAI 기능 도입하기

이한슬·2024년 11월 5일

Azure

목록 보기
1/1
post-thumbnail

최근에 MS에서 Azure OpenAI Studio라는 것을 새로 공개해서 굉장히 편리하게 AI 작업을 할 수 있게 된 것 같다. 오늘은 이것을 이용해서 서비스에 OpenAI의 기능을 도입해보려고 한다.

MS Azure 학생 인증

AWS의 경우, 처음 가입 시 1년동안 프리티어를 사용할 수 있다. 물론, 1년 후에도 계속해서 계정을 만들 수는 있지만, 카드 정보를 가입할 때 기입하기 때문에 실수로 인스턴스를 중지시키지 않으면 요금이 부과된다. 필자도 이 때문에 어제 1100원이 날라갔다...

Azure의 경우 학생 인증을 받으면, 1년 $100를 무료로 제공한다. 가장 좋은 점은 카드 정보를 가져가지 않고 크레딧을 다 사용하면 자동으로 서비스를 이용할 수 없는 시스템이다. 실수로 내 돈이 나갈일이 없어서 좋다.

학생 인증은 아래 사이트에서 받을 수 있다.
https://azure.microsoft.com/ko-kr/free/students

인증을 받고 나면 Azure에 접속해 이처럼 남은 크레딧을 확인할 수 있다. 본인은 조금 사용한 적이 있어서 절반 정도 남았다.

GPT 모델 배포

Azure AI Studio를 검색해서 접속해 모델 카탈로그를 누른다.

이제 생성하고자하는 모델을 선택한다.

다른 설정할 필요가 없어진 듯 하다. 바로 배포를 눌러준다.

배포할 이름을 작성하고 배포를 눌러준다.

프로비전 상태에 성공이라고 나오면 배포가 완료된 것이다.

오른쪽을 보면 마스킹 처리가 된 키라는 항목을 확인할 수 있다. 미리 메모장에 복사해 둔다.

모델 호출

이번 서비스는 FastAPI를 이용하여 구현하였다. 꼭 FastAPI가 아니어도 된다. 여러 언어로도 구현이 가능한 것으로 보이며, 파이썬의 경우는 이처럼 구현할 수 있다. 다른 언어를 사용할 경우, 다음 링크를 참조하면 된다.
https://learn.microsoft.com/ko-kr/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cjavascript-keyless%2Ctypescript-keyless%2Cpython-new&pivots=programming-language-python

프로젝트 폴더를 생성하고 requirements.txt에 다음 내용들을 적고 pip install -r requirements.txt로 패키지들을 설치해준다.

fastapi
uvicorn
openai
langchain
langchain-community
python-dotenv
pydantic

.env 파일에 아까 복사해 둔 키와 배포된 이름을 적는다.

OPENAI_API_KEY=[키]
DEPLOYMENT_NAME=[배포된 이름]

이제 핵심 코드를 살펴보자. 먼저, 구현해본 기능은 사용자가 글을 작성하면 글의 스펠링이 문제가 없는 지 체크하는 기능이다.

import os
import openai
from fastapi import APIRouter
from dotenv import load_dotenv
from langchain.chat_models import AzureChatOpenAI
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.schema import SystemMessage, HumanMessage
from core.clean import clean_html
from models.text import Text

load_dotenv()

router = APIRouter()

os.environ['OPENAI_API_KEY'] = os.getenv('OPENAI_API_KEY')

@router.post('/spelling', response_model=Text)
async def spelling(text: Text):
    chatgpt = AzureChatOpenAI(deployment_name=os.getenv('DEPLOYMENT_NAME'),
                              temperature=1,
                              callbacks=[StreamingStdOutCallbackHandler()])

    messages = [
        SystemMessage(content='너는 입력 받은 글의 틀린 맞춤법을 수정을 도와주는 가이드야. 맞춤법을 수정한 게시물을 응답해줘.'),
        HumanMessage(content=clean_html(text.text))
    ]

    response = chatgpt(messages).content
    return Text(text=response)

필수적인 부분만 살펴보면, os.environ['OPENAI_API_KEY']에 위처럼 키를 설정해 주어야 한다.
다음으로, 이번 코드에서는 AzureChatOpenAI 모델을 import하였으며, 인자의 deployment_name은 배포된 모델의 이름이 들어가야 한다.
temperature는 대답의 다양성이라고 생각하면 좋을 것 같다. 값이 높을수록 더 창의적으로 답한다.
callback으로는 StreamingStdOutCallbackHandler()로 설정하였는데, 모델의 응답을 실시간으로 스트리밍하는 콜백 핸들러라고 한다.
SystemMessagegpt에게 내릴 사전 명령을 적어주고, HumanMessage유저에게 전달받은 글을 적어주었다. 나는 Text라는 모델과 내용의 불필요한 부분들을 다듬는 clean_html 함수를 따로 정의해둬서 이용했다.
이 메세지를 gpt 모델에게 전달하고 답변을 받아오는 과정으로 이루어진다.

서버를 실행시키고 FastAPI docs에서 다음처럼 틀린 문장을 입력해보았다.

교정된 문장으로 답변이 잘 전달되었다.

Azure OpenAI Studio에 접속해서 매트릭 항목을 눌러보면 모델에 대한 요청, 토큰 정보를 확인할 수 있다.

AzureChatOpenAI 말고도 다른 여러 모델을 활용할 수 있으며, 다른 기능도 구현이 가능하다. 입맛에 맞는 모델을 선택해서 사용하면 될 것 같다.
이번에 새로 Azure OpenAI Studio을 사용해보았는데 정말 편리해진 것 같다는 생각이 든다.

profile
궁금하면 일단 먹어보는 소프트웨어 전공생

0개의 댓글