클라우드응용SW개발

[Cloud] 14주차. Azure AI 서비스, Azure Language Service 실습

tryinto_gmlt 2026. 6. 4. 07:22

⭐ Azure AI 서비스의 종류

Azure에서는 다양한 분야에 특화된 AI 서비스를 제공한다. 개발자와 조직이 AI 기술을 쉽게 도입하고 혁신적인 솔루션을 개발할 수 있도록 지속적으로 발전하는 AI 생태계를 제공한다.

Azure AI Foundry Service

OpenAI의 강력한 언어 모델에 접근할 수 있는 서비스

  • 언어 모델 접근: GPT-4, GPT-3.5-Turbo 등 OpenAI 언어 모델 사용 가능
  • 자연어 처리: 콘텐츠 생성, 요약, 코드 변환 등 다양한 작업 수행
  • 멀티모달 기능: 이미지 해석 및 의미론적 검색 기능 제공

Azure AI Language

텍스트를 분석하고 자연어를 이해하는 서비스

  • 감정 분석: 텍스트에서 긍정/부정/중립 감정 감지
  • 키워드 추출: 텍스트에서 핵심 단어 자동 추출
  • 언어 감지: 입력된 텍스트의 언어 자동 식별
  • 질문 답변: 대화형 언어 이해 및 질문 답변 기능 제공

Azure AI Translator

텍스트와 음성을 실시간으로 번역하는 서비스

  • 텍스트 번역: 100개 이상의 언어 및 방언 번역 지원
  • 실시간 음성 번역: 음성을 실시간으로 다른 언어로 번역

Azure AI Speech

음성과 텍스트를 상호 변환하는 서비스

  • Speech-to-Text: 음성을 텍스트로 변환
  • Text-to-Speech: 텍스트를 음성으로 변환
  • 실시간 음성 번역: 음성을 실시간으로 다른 언어로 번역
  • 화자 인식: 말하는 사람이 누구인지 구별

Azure AI Vision

이미지와 비디오를 분석하는 서비스

* Custom Vision 기능은 customvision.ai 사이트에서 사용할 수 있으며, 만들기 옵션에는 모두, 예측, 학습이 있다.

  • 이미지·비디오 분석: 이미지 및 비디오의 내용 자동 분석
  • 객체 감지: 이미지 내 사물의 위치와 종류 감지
  • 얼굴 인식: 이미지에서 사람의 얼굴 감지 및 분석
  • OCR(광학 문자 인식): 이미지 속 텍스트 추출
  • Custom Vision: 사용자가 직접 이미지 인식 모델 생성 가능

Azure AI Document Intelligence

문서에서 데이터를 자동으로 추출하고 처리하는 서비스

  • 텍스트·구조 추출: 문서에서 텍스트 및 레이아웃 구조 자동 추출
  • 양식 인식: 영수증, 계약서, 청구서 등 양식의 데이터 추출 자동화

Azure Bot Service

지능형 챗봇을 개발하고 배포할 수 있는 서비스

  • 챗봇 개발·배포: 대화형 AI 챗봇 개발 및 배포 지원
  • 멀티채널 통합: 웹, 모바일, Teams 등 다양한 채널에 봇 통합 가능

Azure AI Content Safety

콘텐츠의 유해성을 자동으로 감지하는 서비스

  • 유해 콘텐츠 감지: 텍스트, 이미지, 비디오에서 부적절하거나 유해한 콘텐츠 감지
  • 안전성 검사: 사용자 생성 콘텐츠 및 AI 생성 콘텐츠의 안전성 검사

Azure Machine Learning

머신러닝 모델의 개발부터 배포까지 전 과정을 지원하는 엔드투엔드 플랫폼

  • 통합 환경: 모델 개발, 훈련, 배포, 관리를 위한 통합 환경 제공
  • 컨테이너 연동: Docker 컨테이너 및 ACR과 연동하여 모델 패키징 및 배포 가능
  • Azure 서비스 통합: Azure Storage, Azure Container Registry 등과 통합 지원

Azure AI Search

AI 기술을 결합한 클라우드 검색 서비스

  • 고급 검색: 자연어 처리와 결합된 의미 기반 검색 기능 제공
  • 다양한 데이터 소스: 문서, 이미지 등 다양한 형식의 데이터에서 검색 가능

 

⭐ Azure Language Service를 이용한 FAQ 기반 챗봇 서비스 제작

전체 흐름

  1. Azure AI 언어 리소스 생성
    Azure에서 Language Service를 사용할 수 있도록 AI 언어 리소스를 생성한다.
  2. Language Studio에서 프로젝트 생성
    Azure Language Studio에 접속하여 질문 응답 기능을 위한 프로젝트를 만든다.
  3. Knowledge base 구축
    FAQ 데이터를 활용하여 질문과 답변으로 구성된 지식 베이스를 생성한다.
  4. 모델 학습 및 테스트
    등록한 질문과 답변을 바탕으로 모델을 학습시키고, 사용자가 입력한 질문에 적절히 응답하는지 테스트한다.
  5. 모델 배포
    테스트가 완료된 모델을 실제 애플리케이션에서 사용할 수 있도록 배포한다.
  6. 애플리케이션에 통합
    고객 웹 사이트와 연결하여 사용자가 질문을 입력하면 Knowledge base 기반으로 답변을 제공하도록 구성한다.

학습시킬 데이터

서울 관광 자주 묻는 질문

 

1) Azure 마켓플레이스에서 언어 서비스를 검색하여 리소스를 생성한다.

 

2) 추가 기능 선택에서 사용자 지정 질문 답변을 선택한다.

 

3) 리소스 이름, 구독, 지역 등 기본 사항을 설정하고 리소스를 생성한다.

 

4) 생성된 리소스 개요 페이지에서 Language Studio 시작하기를 통해 이동한 후, 로그인한다.

 

5) Language Studio 사이트에서 방금 생성한 리소스를 선택한다.

 

6) Create new - Custom question answering을 선택해 새 프로젝트를 생성한다.

 

7) 언어 설정에서 한국어를 선택한다.

 

8) 프로젝트 이름과 디폴트 답변을 입력한 뒤 Next - Create project를 클릭해 프로젝트를 생성한다.

 

9) Add source - URLs에서 서울 관광 FAQ 페이지 링크를 추가하여 Knowledge base를 구축한다.

Failed to extract QnAs from the source
추출기가 입력된 URL에 정상적으로 접근하지 못하면 에러가 발생할 수 있다.
이 경우에는 FAQ 내용을 .txt 파일 또는 Excel 파일 형태로 정리하여
질문과 답변을 직접 수동으로 입력하는 것도 가능하다.

 

 

10) 입력된 데이터를 확인한다. 실험실 모양 버튼을 클릭하면 질문을 입력해 답변이 잘 나오는지 테스트할 수 있다.

 

11) Deploy를 완료한 후 Prediction URL을 확인한다.

 

12) VSCode에서 seoulfaq.py 파일을 생성하고 아래 코드를 작성한다. api_url에는 Prediction URL을, api_key에는 Sample request의 Ocp-Apim-Subscription-Key 값을 입력한다.

import streamlit as st
import requests

# Azure Language Studio에서 제공하는 Prediction URL과 API Key 입력
api_url = "<Prediction URL>"
api_key = "<Ocp-Apim-Subscription-Key 값>"

# API 요청에 필요한 인증 정보와 데이터 형식 설정
headers = {
    "Ocp-Apim-Subscription-Key": api_key,
    "Content-Type": "application/json"
}

# 사용자의 질문을 API로 보내고 답변을 받아오는 함수
def ask_question(question):
    payload = {
        "question": question
    }
    # API에 POST 방식으로 질문 전송
    response = requests.post(api_url, headers=headers, json=payload)

    # 요청이 성공하면 답변 반환, 실패하면 에러 메시지 반환
    if response.status_code == 200:
        return response.json()["answers"][0]["answer"]
    else:
        return "Error: Unable to get a response"

# Streamlit 화면 제목과 안내 문구 출력
st.title("SEOUL FAQ Question & Answer")
st.write("서울시 관광과 관련된 궁금한 사항을 물어보세요")

# 사용자 질문 입력창과 버튼 생성
question = st.text_input("Ask a question about SEOUL!")
button_click = st.button("Query")

# 버튼을 누르면 로딩 표시 후 답변 출력
if button_click:
    with st.spinner("Wait for it..."):
        answer = ask_question(question)
        st.write(f"Answer: {answer}")
        st.success("Done!")

 

터미널에서 아래 명령어로 실행한다.

streamlit run seoulfaq.py

 

13) 실행 후 출력되는 링크로 이동하면 서울 관광 FAQ 챗봇 결과를 확인할 수 있다.