Azure/Azure Open AI

Azure OpenAI 와 Gradio를 활용하여 나만의 GPT 제작 및 웹 배포하기 (1)-REST API를 활용하여 Azure OpenAI 모델 호출

nakyung1007 2024. 11. 21. 16:18

 

이번 포스팅에서는 MicroSost AI school 5th에서 배운 Azure OpenAI API를 활용하여 개인화된 GPT를 만들고, Gradio를 사용해 이를 웹 애플리케이션으로 배포하는 방법을 정리했습니다.

 

리소스를 다 배포했다고 생각하고 진행하겠습니다.


1.  Azure OpenAI Studio로 이동후 모델 배포 (일단 gpt-4o-mini로 진행하겠습니다.)

 

 

2.  나만의 gpt를  설정

(1) Azure OpenAI Playground에서 나만의 GPT 설정 (모델 기반)

: 데이터를 업로드하지 않고, 모델이 이미 학습한 지식을 기반으로 동작하며, 지침으로만 모델을 맞춤화 (모델의 동작을 제어)

더보기

(1) 배포된 모델을 선택 

    : gpt-4o-mini 선택

 

(2) 모델에 지침 및 컨텍스트 제공

   : 자신의 목적에 따라 입력후 조정

 

(3) 섹션을 추가하여 예시 사용자 질문 작성

  : 사용자 질문에 따라 응답을 개선

 

(4) 매개변수 설정

지난 메시지 포함 추천 설정 

     - 문맥이 중요한 대화형 응용 프로그램: 5~10

     - 독립적인 질문/응답: 0

 

최대 응답 (Max Tokens)

     - 간단한 응답: 100~300

 

     - 상세 설명: 800 이상

 

온도 (Temperature)

     - 0.2~0.5: 결정적인 답변 (정확성과 일관성이 중요한 경우)

     - 0.7~1.0: 창의적이고 다양한 답변 (아이디어 생성, 글쓰기 등)

 

상위P(Top-P, Nucleus Sampling) 

: 모델이 가장 가능성 높은 토큰의 하위 집합에서만 샘플링하도록 설정(온도와 비슷한 역할)

   - 낮은 값: 응답이 더 예측 가능

   - 높은 값: 응답이 더 다양하고 창의적

 

중지 시퀀스 (Stop Sequence)

: 모델의 응답이 특정 텍스트를 생성하면 출력을 중지하도록 설정합니다

 

빈도 패널티 (Frequency Penalty)

: 모델이 이미 생성한 토큰(단어/문장)을 반복하지 않도록 패널티를 부과합니다

 

현재 상태 패널티 (Presence Penalty)

: 새로운 주제를 도입하도록 장려하는 매개변수입니다

 

(2) Azure AI Search에서 데이터 추가 (데이터 기반)

: 사용자가 업로드한 데이터를 기반으로 동작하며, Azure Search가 데이터를 색인화하고 검색 엔진을 구축하여 사용자 맞춤형 답변 제공

 

자세한 내용은 아래에 적었습니다.

https://nakyung1007.tistory.com/7

 

Azure OpenAI 와 Gradio를 활용하여 나만의 GPT 제작 및 웹 배포하기 (0)- Azure AI Search에서 데이터 추가

https://nakyung1007.tistory.com/5 Azure OpenAI 와 Gradio를 활용하여 나만의 GPT 제작 및 웹 배포하기 (1)-REST API를 활용하여 Azure OpenAI 모이번 포스팅에서는 MicroSost AI school 5th에서 배운 Azure OpenAI API를 활용하

nakyung1007.tistory.com

 

3.  코드 보기를 눌러서 키 인증 복사 후 vs code에 넣어줍니다(Rest API 호출)

Rest api란?

클라이언트와 서버 간의 통신을 가능하게 하는 인터페이스로, 데이터를 주고받는 방식 중 하나입니다. REST API는 웹 프로토콜(주로 HTTP)을 기반으로 하며, 자원을 요청하거나 작업을 수행하기 위해 특정한 엔드포인트(URL)와 메서드(HTTP Method)를 사용합니다.

 

이때, API_KEY, ENDPOINT는 자신의 환경에 맞게 고쳐줍니다.

 

4.  Python 환경에서 REST API를 호출하여 모델 테스트

위에 코드를 이용하여 자신이 설정한 gpt-4o-mini 모델을 확인할수 있습니다. 

import os
import requests # API 요청을 보내기 위한 라이브러리
import base64
# Jupyter Notebook에서 Markdown 형식으로 출력하기 위한 라이브러리
from IPython.display import Markdown as md  

# GPT 호출을 위한 함수 정의
def requests_gpt(user_text):

  # Azure OpenAI API 엔드포인트 설정
  ENDPOINT = 자신의 엔드포인트
  # Azure OpenAI API Key 설정
  API_KEY = 자신의 api 키
  
  #요청에 필요한 헤더 설정 (API 키 포함)
  headers = {
    "Content-Type": "application/json",
    "api-key": API_KEY,
  }

  # API 요청에 전달할 데이터(payload) 정의
  payload = {
    "messages": [
      {
        # 시스템 역할로, AI의 기본적인 성격이나 설정을 정의
        "role": "system",
        "content": [
          {
            "type": "text",
            "text": "IT에 잘알고 데이터 파이프라인, 데이터 구축, 수집 같은 데이터엔지니어, 데이터 사이언티스트 ,ML엔지니어에 특화된 모델이야"
          }
        ]
      },
      {
      # 사용자 역할로, 사용자의 입력 내용 정의
      "role": "user",
      "content": [
        {
          "type": "text",
          # "text": "간단한 프로젝트 2주정도인데 데이터 수집, 분석, 모델, 모델튜닝 같은걸 심화되서 배우고 싶어 azure도 많이 쓰고 싶어 그러면 단계가 어떻게 돼?"
          "text": user_text
        }
      ]
    },
    { # AI가 응답할 예상 내용 (optional, 실사용에서는 빈칸 가능)
      "role": "assistant",
      "content": [
        {
          "type": "text",
          "text": "1주차\n \n\n1. 프로젝트 주제 선정\n목표 설정: 해결하고자 하는 문제를 명확히 정의합니다. 예를 들어, 특정 데이터셋을 사용하여 예측 모델을 구축하거나 데이터 분석을 통해 인사이트를 도출하는 목표를 설정합니다.\n데이터 출처 선정: Kaggle, 공공 데이터 포털 등에서 적절한 데이터셋을 찾습니다.\n2. 데이터 수집\nKaggle API 또는 수동 다운로드: Kaggle에서 데이터셋을 다운로드하거나 Kaggle API를 사용하여 데이터를 자동으로 가져옵니다. 공공 데이터셋은 웹에서 직접 다운로드하거나 API를 통해 수집할 수 있습니다.\n3. 데이터 전처리\nAzure Notebooks vs. Jupyter Notebook:\nAzure Notebooks는 Microsoft에서 제공하는 클라우드 기반의 Jupyter Notebook 환경입니다. Jupyter Notebook과 비슷하지만 Azure의 다양한 서비스와 통합되어 있어 데이터 분석 및 머신러닝 작업을 보다 쉽게 진행할 수 있습니다.\n장점:\n클라우드 환경: 로컬 환경이 아닌 클라우드에서 작업하므로, 데이터와 리소스에 쉽게 접근할 수 있습니다.\nAzure 서비스와 통합: Azure의 다양한 서비스(Azure Storage, Azure Machine Learning 등)와 쉽게 연동할 수 있어 데이터 처리 및 모델링에 유리합니다.\n협업: 팀원과의 협업이 용이하며, 코드와 결과를 쉽게 공유할 수 있습니다.\n확장성: 필요에 따라 리소스를 쉽게 확장하거나 축소할 수 있습니다.\n2주차\n \n\n4. 데이터 분석\n탐색적 데이터 분석 (EDA): 데이터의 특성을 이해하기 위해 시각화 및 통계적 기법을 사용합니다. Python 라이브러리(예: Pandas, Matplotlib, Seaborn)를 활용합니다.\n5. 모델링\n모델 선택 및 학습: 적절한 머신러닝 모델을 선택하고 Azure Machine Learning을 통해 모델을 학습시킵니다. 필요한 경우 Azure Machine Learning Studio를 활용하여 시각적으로 모델을 구축할 수도 있습니다.\n6. 모델 튜닝\n하이퍼파라미터 튜닝: Grid Search 또는 Random Search를 사용하여 모델 성능을 최적화합니다. Azure Machine Learning의 HyperDrive 기능을 활용하면 자동으로 최적의 하이퍼파라미터를 찾을 수 있습니다.\n7. 결과 발표 및 문서화\n결과 정리 및 발표: 분석 결과와 모델 성능을 정리하고, 인사이트를 도출합니다. 이 과정에서 시각화 도구를 사용하여 결과를 효과적으로 전달합니다.\n추가 팁\nAzure 무료 계정: Azure의 무료 계정을 활용하면 다양한 서비스를 무료로 사용할 수 있으므로 실험해보기에 좋습니다.\n온라인 학습 자료: Microsoft Learn, Coursera, Udacity 등에서 Azure 및 머신러닝 관련 강의를 통해 심화 학습을 진행할 수 있습니다.\n\n이렇게 하면 Azure의 기능을 활용하면서도 다른 데이터 출처에서 데이터를 수집하고, 전처리 및 모델링을 진행할 수 있습니다. Azure Notebooks를 활용하면 클라우드 환경에서 작업하는 장점이 있으므로, 데이터 분석 및 머신러닝 프로젝트에 적합합니다."
        }
      ]
    }
  ],
  # OpenAI 모델의 파라미터 설정
  "temperature": 0.7, #모델의 창의성 수준 조정
  "top_p": 0.95, # 샘플링 전략
  "max_tokens": 800 # 응답의 최대 토큰 수 설정
}

    # API 요청 보내기
  try:
      # POST 요청을 통해 Azure OpenAI API 호출
      response = requests.post(ENDPOINT, headers=headers, json=payload)
      response.raise_for_status()  # HTTP 오류 발생 시 예외 처리
      response_data = response.json() # JSON 응답 데이터를 파싱
  except requests.RequestException as e:         # 요청 실패 시 에러 메시지 출력 후 종료
      raise SystemExit(f"Failed to make the request. Error: {e}")
  
# 응답 처리
  if response.status_code == 200:
    # 응답 데이터에서 AI의 답변 내용 추출
    assistant_message = response_data["choices"][0]["message"]["content"]
    return assistant_message
  else:
    # 요청이 실패한 경우 상태 코드와 오류 메시지 출력
    return f"요청 실패: 상태 코드 {response.status_code}, 메시지: {response.text}"


# 함수 실행 및 결과 출력
response_text = requests_gpt("간단한 프로젝트 2주정도인데 데이터 수집, 분석, 모델, 모델 튜닝 같은 걸 심화되게 배우고 싶어. Azure도 많이 쓰고 싶어. 그러면 단계가 어떻게 돼?")
md(response_text)  # Jupyter Notebook에서 Markdown 형식으로 응답 출력