도구 연동 Level 300 · 30분
도구(web_search·file_search)를 사용하는 AI 앱 만들기
Margie's Travel 브로슈어를 벡터 저장소에 업로드해 file_search 도구로 연결하고, web_search 도구까지 함께 사용해 데이터 기반 답변을 제공하는 앱을 만듭니다.
실습 준비물
- 활성 상태의 Azure 구독, Visual Studio Code, Python 3.13.xx, Git, Azure CLI가 설치되어 있어야 합니다.
- 참고: 이 실습에서 사용하는 일부 기술은 미리 보기 또는 활발히 개발 중인 상태입니다. 예상치 못한 동작·경고·오류가 발생할 수 있습니다.
1. Foundry 프로젝트 준비 및 모델 배포하기
- 3번 모듈과 같은 방법으로 Foundry 프로젝트를 만들거나 기존 프로젝트를 사용합니다.
- Discover 페이지의 Models 탭에서 gpt-5.2를 검색해 모델 카드를 검토한 뒤 기본 설정으로 배포합니다. 배포가 끝나면 모델 플레이그라운드가 열립니다.
2. 플레이그라운드에서 기본 지침으로 대화해 보기
- 챗 애플리케이션을 개발하기 전에, 플레이그라운드에서 모델이 어떻게 응답하는지 살펴보며 그라운딩 데이터(grounding data)가 왜 중요한지 이해해 봅니다.
- 모델을 배포한 뒤라면 플레이그라운드에 해당 모델이 선택된 상태여야 합니다(아니라면 상단 메뉴의 Build를 선택하고 왼쪽에서 Deployments를 선택한 뒤 배포한 모델을 선택합니다).
- 왼쪽 패널에서 gpt-5.2 모델이 선택되어 있는지 확인합니다.
- Instructions 필드에 다음 프롬프트를 입력합니다: '당신은 Margie's Travel에서 제공하는 여행 서비스 정보를 안내하는 여행 어시스턴트입니다.'
- 채팅 창에 '다음 달 뉴욕에서 추천할 만한 관광 활동은 뭐가 있어?'라는 질의를 입력하고 응답을 검토합니다. 응답은 대체로 일반적일 것입니다 - 모델은 학습 데이터를 기반으로 한 일반 지식을 제공하지만, 다음 달 뉴욕에서 일어나는 최신 정보에는 접근하지 못합니다.

3. web_search 도구로 최신 정보 반영하기
- 왼쪽 패널의 지침 아래 Tools 섹션에서 Add를 선택해 web_search 도구를 추가합니다.
- 채팅 창에 같은 질의 '다음 달 뉴욕에서 추천할 만한 관광 활동은 뭐가 있어?'를 다시 입력하고 응답을 검토합니다. 이번에는 모델이 web_search 도구를 사용해 뉴욕의 최신 활동 정보를 찾아 답합니다.

4. 도구를 사용하는 앱 만들기 · Foundry 프로젝트
- 플레이그라운드에서 도구가 모델의 능력을 어떻게 확장하는지 살펴봤으니, 이제 Margie's Travel 고객에게 여행 조언을 제공하는 도구 사용 클라이언트 애플리케이션을 만들어 봅니다.
- (Foundry 프로젝트 생성 단계는 이전 모듈과 동일합니다: 새 프로젝트 만들기, Advanced options에서 Foundry resource·Subscription·Resource group·Region 지정, 프로젝트가 생성되면 홈 페이지 확인.)
5. Azure OpenAI 엔드포인트 확인하기
- 클라이언트 애플리케이션에서 모델에 연결하려면 엔드포인트가 필요합니다. 이 실습에서는 OpenAI SDK로 모델과 대화하며, Entra ID 인증을 사용하는 Azure OpenAI 엔드포인트로 연결합니다.
- 참고: Entra ID 인증 대신 프로젝트의 API 키를 사용할 수도 있지만, 가능하면 Entra ID 인증을 사용하는 것이 좋습니다.
- 메뉴 바에서 Home 페이지를 선택하고 Azure OpenAI Endpoint를 확인합니다.
- TIP: 이 실습에서는 프로젝트 엔드포인트가 아니라 Azure OpenAI 엔드포인트를 사용합니다!
6. GitHub에서 애플리케이션 파일 가져오기
- Visual Studio Code를 엽니다.
- 명령 팔레트(Ctrl+Shift+P)에서 Git:clone 명령으로 https://github.com/microsoftlearning/mslearn-ai-studio 저장소를 로컬 폴더에 클론한 뒤 엽니다.
7. Python 환경 및 애플리케이션 파일 준비하기
- Extensions 창에서 Python 확장이 설치되어 있지 않다면 설치합니다.
- 명령 팔레트에서 python:select interpreter 명령으로 기존 환경을 선택하거나 Python 3.1x 설치를 기반으로 새 Venv 환경을 만듭니다.
- TIP: 종속성 설치 메시지가 뜨면 /labfiles/tools/python/tools-app 폴더의 requirements.txt에 있는 것들을 설치해도 되지만, 하지 않아도 괜찮습니다 - 나중에 설치할 것입니다!
- 탐색기 창에서 /labfiles/tools/python/tools-app 폴더로 이동합니다. 애플리케이션 파일에는 다음이 포함됩니다: brochures(Margie's Travel 브로슈어가 담긴 폴더) · .env(구성 파일) · requirements.txt(패키지 종속성) · tools-app.py(앱 코드).
- tools-app 폴더를 오른쪽 클릭하고 Open in integrated terminal을 선택합니다(또는 Terminal 메뉴에서 터미널을 열고 해당 폴더로 이동).
- (.venv) 접두사와 함께 터미널이 올바른 폴더에서 열려 있는지 확인한 뒤, 다음 명령으로 필요한 패키지를 설치합니다.
pip install -r requirements.txt8. .env 구성 값 채우기
- 탐색기 창의 /labfiles/tools/python/tools-app 폴더에서 .env 파일을 열고, Azure OpenAI Endpoint와 gpt-5.2 모델 배포 이름으로 구성 값을 업데이트합니다.
- TIP: Foundry 포털의 프로젝트 홈 페이지에서 Azure OpenAI Endpoint(프로젝트 엔드포인트 아님!)를 복사하고, MODEL_DEPLOYMENT 설정에 배포에 할당된 정확한 이름을 입력하세요.
- 수정한 구성 파일을 저장합니다.
9. OpenAI 클라이언트 초기화 코드 작성하기
- tools-app.py 파일을 열고 기존 코드를 검토합니다. OpenAI SDK로 모델에 접근하는 코드를 추가할 것입니다.
- TIP: 코드를 추가할 때 들여쓰기를 정확히 유지하세요.
- 코드 파일 상단에서 'Import namespaces' 주석을 찾아 다음 코드를 추가합니다. 그런 다음 main 함수에서 'Initialize the OpenAI client' 주석을 찾아 클라이언트를 만드는 코드를 추가합니다.
# import namespaces
from openai import OpenAI
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
# Initialize the OpenAI client
token_provider = get_bearer_token_provider(
DefaultAzureCredential(), "https://ai.azure.com/.default"
)
openai_client = OpenAI(
base_url=azure_openai_endpoint,
api_key=token_provider
)10. 벡터 저장소 만들고 브로슈어 업로드하기
- main 함수에서 'Create vector store and upload files' 주석을 찾아 다음 코드를 추가합니다. 이 코드는 모델용 벡터 저장소를 만들고 브로슈어를 업로드합니다 - 이 벡터 저장소는 file_search 도구와 함께 사용됩니다.
# Create vector store and upload files
print("Creating vector store and uploading files...")
vector_store = openai_client.vector_stores.create(
name="travel-brochures"
)
file_streams = [open(f, "rb") for f in glob.glob("brochures/*.pdf")]
if not file_streams:
print("No PDF files found in the brochures folder!")
return
file_batch = openai_client.vector_stores.file_batches.upload_and_poll(
vector_store_id=vector_store.id,
files=file_streams
)
for f in file_streams:
f.close()
print(f"Vector store created with {file_batch.file_counts.completed} files.")11. 두 도구를 함께 사용하는 응답 코드 작성하기
- main 함수에서 사용자가 종료할 때까지 프롬프트를 요청하는 코드가 이미 제공되어 있습니다. 이 루프 안에서 'Get a response using tools' 주석을 찾아 다음 코드를 추가합니다. 이 코드는 file_search 도구로 벡터 저장소를 검색하고, web_search 도구로 일반적인 웹 검색을 할 수 있도록 지정합니다.
# Get a response using tools
response = openai_client.responses.create(
model=model_deployment,
instructions="""
당신은 Margie's Travel에서 제공하는 여행 서비스 정보를 안내하는 여행 어시스턴트입니다.
Answer questions about services offered by Margie's Travel using the provided travel brochures.
Search the web for general information about destinations or current travel advice.
""",
input=input_text,
previous_response_id=last_response_id,
tools=[
{
"type": "file_search",
"vector_store_ids": [vector_store.id]
},
{
"type": "web_search"
}
]
)
print(response.output_text)
last_response_id = response.id12. 로그인 후 애플리케이션 실행하기
- 코드 파일 변경 사항을 저장합니다. 그런 다음 터미널에서 다음 명령으로 Azure에 로그인합니다(여러 테넌트에 구독이 있다면 --tenant 매개변수 필요).
az login13. 두 도구가 함께 동작하는지 확인하기
- 로그인 후 다음 명령으로 애플리케이션을 실행합니다.
python tools-app.py14. 웹 검색과 파일 검색 결과 비교해 보기
- 메시지가 표시되면 '다음 달 샌프란시스코에서는 무슨 일이 있어?'를 입력하고 생성형 AI 모델의 응답을 검토합니다. 응답에는 web_search 도구로 조회한 정보가 포함되어야 합니다.
- 후속 질문으로 'Margie's Travel에서 그곳에 제공하는 호텔은 뭐가 있어?'를 시도합니다. 응답에는 file_search 도구로 조회한 정보(브로슈어 내용)가 포함되어야 합니다.
- 완료되면 'quit'을 입력해 프로그램을 종료합니다.
15. 요약 및 정리
- 이 실습에서는 Microsoft Foundry 포털과 Responses API로 AI 챗 애플리케이션을 만들고, web_search·file_search 도구로 지식을 통합해 애플리케이션을 확장했습니다.
- 정리(Clean up): Azure 포털(portal.azure.com)에서 이 실습에 사용한 리소스가 포함된 리소스 그룹을 확인하고, 툴바에서 Delete resource group을 선택한 뒤 이름을 입력해 삭제를 확인합니다.