최근에 MS에서 Azure OpenAI Studio라는 것을 새로 공개해서 굉장히 편리하게 AI 작업을 할 수 있게 된 것 같다. 오늘은 이것을 이용해서 서비스에 OpenAI의 기능을 도입해보려고 한다.
AWS의 경우, 처음 가입 시 1년동안 프리티어를 사용할 수 있다. 물론, 1년 후에도 계속해서 계정을 만들 수는 있지만, 카드 정보를 가입할 때 기입하기 때문에 실수로 인스턴스를 중지시키지 않으면 요금이 부과된다. 필자도 이 때문에 어제 1100원이 날라갔다...
Azure의 경우 학생 인증을 받으면, 1년 $100를 무료로 제공한다. 가장 좋은 점은 카드 정보를 가져가지 않고 크레딧을 다 사용하면 자동으로 서비스를 이용할 수 없는 시스템이다. 실수로 내 돈이 나갈일이 없어서 좋다.
학생 인증은 아래 사이트에서 받을 수 있다.
https://azure.microsoft.com/ko-kr/free/students

인증을 받고 나면 Azure에 접속해 이처럼 남은 크레딧을 확인할 수 있다. 본인은 조금 사용한 적이 있어서 절반 정도 남았다.
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()로 설정하였는데, 모델의 응답을 실시간으로 스트리밍하는 콜백 핸들러라고 한다.
SystemMessage에 gpt에게 내릴 사전 명령을 적어주고, HumanMessage에 유저에게 전달받은 글을 적어주었다. 나는 Text라는 모델과 내용의 불필요한 부분들을 다듬는 clean_html 함수를 따로 정의해둬서 이용했다.
이 메세지를 gpt 모델에게 전달하고 답변을 받아오는 과정으로 이루어진다.
서버를 실행시키고 FastAPI docs에서 다음처럼 틀린 문장을 입력해보았다.

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

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

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