Azure AI - Microsoft Foundry에 Machine Learning + RAG 연동하기
개요
개인적으로 꼭 구현해보고 싶은 시나리오였습니다.
그러나 2026년 1월 기준 아무리 찾아봐도 이 시나리오를 Azure로 구현한 사례는 보이지 않았습니다.
그래서 그냥 제가 만들기로 하였습니다.
ML이 진단하고
RAG가 근거를 검색하며
LLM이 결과를 종합하는
ML(Machine Learning) + RAG + LLM 에이전트입니다.


구성 요소
기존 챗봇은 사실 데이터 기반의 판단력이 부족하고, ML 모델은 열심히 만들었지만 구체적인 대응 전략은 제시하지 못하다 보니
Microsoft Foundry를 활용해서 ML의 예측 지능과 RAG의 지식 탐색 능력을 결합한 지능형 에이전트를 만들었습니다.
Azure Machine Learning은 해당 포스팅에 정리되어 있습니다 이번 실습에서는 AutoML로 진행하였습니다.
Azure Machine Learning - 고객이탈률(Churns) 모델 만들기
Azure Machine Learning - 고객이탈률(Churns) 모델 만들기
1. 개요Churns라는 데이터셋이 있습니다.번역기로 찾아보니 고객 이탈이라는 뜻이라고 하는데요 (그냥 Customer Leave 라 하면 안되는지...)이번에는 Churns라는 데이터셋으로 Machine Learning 모델을 만들
ww0610.tistory.com
RAG 또한 포스팅에 정리되어 있습니다
Azure AI Search - Microsoft Foundry에 RAG 연동하기
Azure AI Search - Microsoft Foundry에 RAG 연동하기
개요얼마 전에 세미나를 진행했습니다Azure AI Search로 RAG를 만들고 Microsoft Foundry의 Agent에 연동하여RAG 기반 AI를 구축하는 것이 세미나 주제였습니다. Foundy가 현재는 개발 중이라 preview 단계인 것
ww0610.tistory.com
어떻게 보면 기존의 포스팅들을 전부 결합한 일종의 어벤저스 같기도 합니다.
ML용 데이터셋은 Churns_final
GitHub - rohit-chandra/Customer_Churn_Analysis: Customer churn prediction for telecom dataset
GitHub - rohit-chandra/Customer_Churn_Analysis: Customer churn prediction for telecom dataset
Customer churn prediction for telecom dataset. Contribute to rohit-chandra/Customer_Churn_Analysis development by creating an account on GitHub.
github.com
RAG용 데이터셋은 GPT로 생성한 PDF입니다.
azure-projects/Churn Retention Playbook (demo용 Rag 문서).pdf at 88843f6a1b5fb3a3a516ce80dab3e76274ddbffe · ww0610/azure-pro
Contribute to ww0610/azure-projects development by creating an account on GitHub.
github.com
진행 과정
Azure Machine Learning 생성
(Azure에서 리소스 생성하는 과정은 생략하겠습니다)
Azure Machine Learning 작업을 시작하면 가장 먼저 보게 되는 화면입니다.
작업 영역에 들어가 줍니다.

직업 영역을 간단하게 새로 만들어 준 뒤 해당 작업 영역으로 이동합니다.

왼쪽 메뉴의 컴퓨팅을 눌러 머신 러닝을 실행할 엔진을 생성해 주도록 합니다.


대규모 학습보다는 AutoML 실행과 ML 엔드포인트 테스트가 목적이기 때문에 CPU 기반 Standard_DS11_v2를 선택했습니다.

혹시라도 리소스 정리를 잊었을 때... 유용한 기능입니다.

이제 왼쪽 메뉴에서 AutoML에 들어가 줍니다.
디자이너를 사용할까 하다가 지금은 ML연동에 초점을 두도록 하겠습니다.

현 데이터셋은 churns 즉 고객 이탈 여부이므로 분류로 선택해 준 뒤 데이터셋을 업로드해 줍니다.

로컬 파일을 클릭해 준 뒤


Churn 칼럼에 대해서는 부울 값으로 정의해 줍니다.

이 단계에서 모델이 예측해야 할 정답 칼럼을 지정합니다.
이진 분류 문제이므로 부울 형식인 Churns을 대상 영으로 설정합니다.

아까 생성해 둔 컴퓨팅 인스턴스를 선택해 준 뒤... 학습 작업을 제출해 줍니다.

사실 모든 학습이 완료될 때까지 기다리는 게 실무이긴 합니다만
지금은 단순 실습이기도 해서... 중간에 취소했습니다.
그중 AUC 가중치가 가장 높은 모델을 선택해 줍니다.

행복한 달팽이;; 라는 모델을 등록해 줍니다.
이 단계에서 모델 등록을 하면 Azure ML 모델 레지스트리에 저장되며,
이후 Online Endpoint 또는 Batch Endpoint 배포를 위한 기준 모델로 활용할 수가 있습니다.

적절하게 이름을 선택해 준 뒤

모델을 등록해 줍니다.

Azure AI Search(RAG) 생성
RAG 생성에 대한 자세한 포스팅은 이전에 다뤘으므로, 빠르게 넘어가겠습니다.
Azure AI Search를 생성해 주고..

임베딩을 시킬 데이터를 업로드할 스토리지를 생성해 줍니다.


깃허브에 올려놓고 깨달은 사실인데 티스토리 글에도 파일 첨부가 가능했습니다
아무튼 PDF 파일을 업로드해 줍니다.

데이터 가져오기(신규)를 클릭해 준 뒤

Azure Blob Storage를 클릭해 주고

RAG를 생성해 줍니다.

텍스트 벡터화 단계를 설정해 주고
임베딩 모델로 text-embedding-3-large를 지정해 문서를 벡터 형태로 변환하도록 구성해 줍니다.

RAG가 이쁘게 생성되었습니다!

Machine Learning 모델 배포
다시 ML로 돌아와 줍니다.
왼쪽 메뉴에 모델을 보면 아까 등록해 둔 모델을 확인할 수가 있는데요

이 모델 사용을 드롭으로 내린 후 실시간 엔드포인트를 선택해 줍니다.

엔드포인트 인스턴스 수와 가상 머신 사양을 지정하고, 실시간 엔드포인트를 생성해 REST API 형태의 추론 URL을 발급해 줍니다.

Swagger URI를 잘 복사해 주고
화면에는 나오지 않았지만 다른 화면에 보이는 API key 값도 메모장에 복사해 둡니다.

Microsoft Foundry 생성 및 연동
여전히 preview가 많은 Microsoft Foundry(new)입니다.

에이전트의 도구에서 추가 버튼을 클릭해 줍니다.

사용자 지정 탭에서 OpenAPI 도구를 선택하면 외부 REST API를 에이전트에 연결이 가능합니다.
같은 Azure 환경에서 Machine Learning만 API로 호출해야 하는 점은 다소 아쉬운 부분입니다.

중요한 과정입니다.
자격 증명에서 왼쪽은 Authorization
오른쪽은 Bearer (한칸 띄우고)API Key 값을 입력해야 합니다.
Bearer a1b2c3d4...
Bearer는 호텔에 갔을 때 받는 카드키 같은 겁니다. 누구인지 묻지 않아도 카드키가 있는 사람이면 방문을 열어주는 원리

그리고 OpenAPI 3.0 스키마는 다음과 같이 작성해 줍니다.
각 코드에 대한 의미는 접은 글에 있으며,
바이브코딩입니다.
{
"openapi": "3.0.1",
"info": {
"title": "ChurnFinal",
"version": "1.0"
},
"servers": [
{
"url": "Swagger URI (뒤에 Swagger.json 빼고) "
}
],
"paths": {
"/score": {
"post": {
"operationId": "predict",
"security": [
{
"BearerAuth": []
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"input_data": {
"type": "object",
"properties": {
"columns": {
"type": "array",
"items": {
"type": "string"
},
"default": [
"call_failure",
"complains",
"subs_len",
"charge_amount",
"seconds_of_use",
"freq_of_use",
"freq_of_sms",
"distinct_call_nums",
"tariff_plan",
"status",
"age",
"ageGroup",
"customer_value",
"FN",
"FP"
]
},
"data": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "number"
}
}
}
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "OK"
}
}
}
}
},
"components": {
"securitySchemes": {
"BearerAuth": {
"type": "apiKey",
"in": "header",
"name": "Authorization"
}
}
}
}
경로 및 동작
- 코드: /score, operationId: predict
- 설명: 주소 뒤에 붙는 세부 문 번호 /score라는 문을 열고 들어가서 predict (예측)라는 업무를 수행하겠다는 약속임
보안 설정
- 코드: BearerAuth: [], type: apiKey, in: header
- 설명: 아까 이야기한 호텔 카드키 (Bearer 토큰) 설정
데이터 규격 (requestBody - 핵심!)
- 코드: columns: [call_failure, complains, ...]
- 설명: 이 분석기(ML)가 먹고 소화할 수 있는 반찬의 종류와 순서
- Columns: ML 모델이 학습할 때 썼던 15개의 데이터 항목 이름
- Data: 실제 사용자 질문에서 추출한 수치들이 들어가는 자리

ML이 잘 연동되었다면
RAG를 붙여줄 차례입니다.

Azure AI 검색을 선택해 주고

앞서 생성해 둔 Azure AI Search 서비스(terryaisearch)를 선택한 뒤,
RAG 용도로 구성된 인덱스를 지정해 에이전트의 지식 소스로 연결해 줍니다.

마지막으로 약간의 프롬프트 엔지니어링이 필요합니다.
이 부분을 지침에 추가해 줍니다.
사용자가 자연어로 상황을 설명하면, 당신은 이를 아래 15개 컬럼 수치로 자동 변환해야 합니다. 언급되지 않은 값은 무조건 0으로 설정하십시오.
데이터 매핑 가이드:
- "통화 실패", "연결 안 됨" -> call_failure (횟수 언급 없으면 5로 설정)
- "불만", "화남", "항의" -> complains = 1
- "신규 고객", "가입한 지 얼마 안 됨" -> subs_len = 1, age = 20
- "장기 고객", "오래 씀" -> subs_len = 60, age = 50
- "비싼 요금제", "VIP" -> charge_amount = 100, customer_value = 500
- 기타 수치가 명시된 경우 해당 수치를 우선 적용
이탈 예측 (ML 호출):
- 위에서 매핑한 15개 숫자를 순서대로 withML 도구에 전달합니다.
- 데이터 순서: call_failure, complains, subs_len, charge_amount, seconds_of_use, freq_of_use, freq_of_sms, distinct_call_nums, tariff_plan, status, age, ageGroup, customer_value, FN, FP
정책 적용 및 답변 (RAG 필수):
- ML 결과가 1이면 Playbook의 '고위험군' 정책을, 0이면 '안정군' 정책을 Knowledge에서 찾아 답변하십시오.
실무 상담원이 이 고객은 call_failure=10이고 complains=1이야라고 말할 순 없기 때문에
프롬프트로 먼저 자연어를 데이터로 매핑해줘야 합니다
또한 머신러닝 모델(ML)은 정해진 15개의 입력 칸이 하나라도 비어 있으면 작동을 멈추기 때문에
모르면 0으로 채워라는 지침을 추가해 주고
call_failure 자리에 age가 들어가면 분석이 망가질 수 있어서
프롬프트로 데이터의 순서(Schema)를 고정해 줌으로써 별도의 미들웨어 없이도 LLM이 ML 모델과 정확하게 통신하게 만듭니다.
단순히 예측 결과를 보여주는 데서 그치지 않고, 위험하면 할인 정책(RAG)을 펼치고, 안전하면 감사 인사(RAG)를 펼쳐라
라는 의사결정 알고리즘을 프롬프트에 심어서 에이전트가 진단과 처방을 동시에 할 수 있게 로직을 정해줍니다.

이제 대망의 결과입니다.
에이전트는 Azure Machine Learning 실시간 엔드포인트를 호출해 고객 이탈 가능성을 예측하고,
동시에 Azure AI Search 기반 RAG를 통해 사전에 정의한 플레이북 정책을 검색·분석합니다.
그 결과를 종합해 현재 고객 상태 진단, 정책 근거 분석, 그리고 실제 실행 가능한 대응 전략까지 하나의 응답으로 생성해 줍니다.

퇴근 후 고생한 결과물이 이쁘게 나와서 뿌듯합니다
다만 ML이 Microsoft Foundry에 곧바로 연동되는 시스템이 생기면 더욱 수월할 것 같습니다.
'Azure > Azure AI & Machine Learning' 카테고리의 다른 글
| Azure AI - Microsoft Foundry에 RAG 연동하기 (1) | 2025.12.30 |
|---|---|
| Azure Machine Learning - 고객이탈률(Churns) 모델 만들기 (0) | 2025.11.18 |
| Azure AI - Custom Vision 음식 구분하기 (0) | 2025.10.14 |
| Azure Machine Learning - AutoML로 타이타닉 생존자 예측하기 (0) | 2025.07.04 |
| Azure Machine Learning – Notebook으로 IRIS 데이터 시각화 (1) | 2025.07.03 |