이 문서에서는 OpenAI 스타일 도구 호출을 지원하는 AKS(Azure Kubernetes Service)에서 KAITO(AI 도구 체인 연산자) 유추 작업 영역을 구성하고 배포합니다. vLLM 메트릭 및 로컬 함수 모의 함수를 사용하여 도구 호출 기능의 유효성을 검사하는 방법도 알아봅니다.
도구 호출이란?
도구 호출을 사용하면 LLM(대규모 언어 모델)이 외부 함수, API 또는 서비스와 상호 작용할 수 있습니다. LLM은 텍스트를 생성하는 대신 다음을 결정할 수 있습니다.
- "날씨 API를 호출해야 합니다."
- "계산기를 사용해야 합니다."
- "데이터베이스를 검색해야 합니다."
사용자의 요청에 따라 선택한 매개 변수를 사용하여 정의된 "도구"를 호출하여 이 작업을 수행합니다. 도구 호출은 다음과 같은 경우에 유용합니다.
- 예약, 요약 또는 계산하는 챗봇.
- 환각을 최소화해야 하는 엔터프라이즈 LLM 애플리케이션.
- 에이전트 프레임워크(AutoGen, LangGraph, LangChain, AgentOps 등).
프로덕션 환경에서 AI 지원 애플리케이션은 자연어 생성보다 더 많은 것을 요구하는 경우가 많습니다. 사용자 의도에 따라 작업을 수행할 수 있는 기능이 필요합니다. 도구 호출을 통해 LLM은 외부 도구, API 또는 사용자 지정 논리를 실시간으로 호출하여 텍스트 응답을 넘어 확장할 수 있습니다. 이렇게 하면 언어 이해와 실행 간의 격차를 해소하여 개발자가 정확하고 유용한 대화형 AI 도우미, 에이전트 및 자동화 워크플로를 빌드할 수 있습니다. 이제 LLM은 정적 응답에 의존하는 대신, 안전하고 안정적으로 사용자를 대신하여 라이브 데이터에 액세스하고, 서비스를 트리거하고, 작업을 완료할 수 있습니다.
AKS에 배포하면 도구 호출이 확장 가능하고 안전하며 프로덕션이 준비됩니다. Kubernetes는 vLLM과 같은 고성능 런타임을 사용하여 유추 워크로드를 오케스트레이션하는 동시에 도구 사용의 가시성과 거버넌스를 보장하는 유연성을 제공합니다. 이 패턴을 사용하면 AKS 운영자와 앱 개발자가 안정성을 손상시키지 않으면서 모델 또는 도구를 독립적으로 보다 원활하게 업데이트하고 고급 AI 기능을 배포할 수 있습니다.
따라서 AKS를 호출하는 도구는 이제 컨텍스트 인식, 실행 가능 및 엔터프라이즈 지원인 최신 AI 앱을 빌드하기 위한 기본 패턴이 되었습니다.
KAITO를 사용하여 도구 호출
이 배포 모델을 간소화하기 위해 AKS용 KAITO(AI 도구 체인 연산자) 추가 기능은 도구 호출 지원을 통해 유추 서비스를 실행하기 위한 관리형 솔루션을 제공합니다. KAITO 유추 작업 영역을 활용하여 도구 호출 및 OpenAI 호환 API에 대한 기본 제공 지원을 통해 확장 가능한 GPU 가속 모델 엔드포인트를 신속하게 스핀업할 수 있습니다. 이렇게 하면 런타임 구성, 종속성 관리 또는 인프라 크기를 수동으로 조정하는 작업 오버헤드가 제거됩니다.
필수 조건
- 이 문서에서는 기존 AKS 클러스터가 있다고 가정합니다. 클러스터가 없는 경우 Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 클러스터를 만듭니다.
- AKS 클러스터가 Kubernetes 버전
1.33이상에서 실행되고 있습니다. 클러스터를 업그레이드하려면 AKS 클러스터 업그레이드를 참조하세요. - Azure CLI 버전
2.77.0이상을 설치하고 구성합니다.az --version을 실행하여 버전을 찾습니다. 설치 또는 업데이트하려면 Azure CLI 설치를 참조하세요. - 클러스터에서 AI 도구 체인 연산자 애드온이 활성화되었습니다.
- 도구 호출을 지원하는 배포된 KAITO 유추 작업 영역입니다. vLLM을 사용하여 지원되는 모델을 호출하는 도구에 대한 공식 KAITO 도구 호출 설명서를 참조하세요.
- 기본 구성을 사용하여
workspace‑phi‑4-mini-toolcallKAITO 작업 영역을 배포했습니다.
KAITO 유추 작업 영역이 실행 중인지 확인
kubectl get명령을 사용하여 작업 영역 배포를 모니터링합니다.kubectl get workspace workspace‑phi‑4‑mini-toolcall -w출력에서 리소스(
ResourceReady) 및 추론(InferenceReady)이 준비되었고 작업 영역이 성공 (WorkspaceSucceeded에서true)했는지 확인하려고 합니다.
유추 API가 처리할 준비가 됐 있는지 확인합니다.
작업 영역이 준비되면 명령을 사용하여 서비스 엔드포인트를 찾습니다
kubectl get.kubectl get svc workspace‑phi‑4-mini-toolcall비고
출력은
ClusterIP거나 내부 주소일 수 있습니다. 서비스가 수신 대기하는 포트(들)를 확인합니다. 기본 KAITO 유추 API는 HTTP용 포트80에 있습니다. 내부 전용인 경우 로컬로 포트 전달을 수행할 수 있습니다.테스트하기 위해 명령
kubectl port-forward를 사용하여 유추 서비스를 포트포워딩합니다.kubectl port-forward svc/workspace‑phi‑4‑mini-toolcall 8000:80엔드포인트
/v1/models를 검사하여 LLM을 사용할 수 있는지curl로 확인합니다.curl http://localhost:8000/v1/modelsLLM이 배포되고 API가 작동하는지 확인하려면 출력이 다음과 유사해야 합니다.
... { "object": "list", "data": [ { "id": "phi‑4‑mini‑instruct", ... ... } ] } ...
명명된 함수 도구-호출 테스트
이 예제 workspace‑phi‑4‑mini-toolcall 에서 작업 영역은 기본적으로 명명된 함수 도구 호출을 지원하므로 LLM이 OpenAI 스타일 요청에서 "도구" 사양을 수락하고 "함수 호출" 구조를 반환하는 것을 확인할 수 있습니다.
이 섹션에서 사용하는 Python 코드 조각은 KAITO 설명서 에서 제공되었으며 OpenAI 호환 클라이언트를 사용합니다.
LLM이 OpenAI 스타일 요청에서 "도구" 사양을 수락하고 "함수 호출" 구조를 반환하는지 확인합니다. 예:
- 로컬 유추 서버와 통신하도록 OpenAI 호환 클라이언트를 초기화합니다. 서버는 실행 중인
http://localhost:8000/v1것으로 간주되며 OpenAI 스타일 API 호출을 수락합니다. - 라는
get_weather도구에 대한 백 엔드 논리를 시뮬레이션합니다. (실제 시나리오에서는 날씨 API를 호출합니다.) - 도구 인터페이스를 설명합니다. LLM은
Phi-4-mini이 도구를 보고 사용자의 입력에 따라 사용할지 여부를 결정합니다. - 샘플 채팅 메시지를 모델에 보내고 도구 사양을 제공합니다. 이 설정을
tool_choice="auto"통해 LLM은 프롬프트에 따라 도구를 호출할지 여부를 결정할 수 있습니다. - 이 경우 사용자의 요청은 도구와 관련이 있으므로 모델에서 선택한 인수를 사용하여
get_weather로컬 함수를 호출하여 도구 실행을 시뮬레이션합니다.
from openai import OpenAI import json # local server client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy") def get_weather(location: str, unit: str) -> str: return f"Getting the weather for {location} in {unit}..." tool_functions = {"get_weather": get_weather} tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Get the current weather in a given location", "parameters": { "type": "object", "properties": { "location": {"type": "string"}, "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]} }, "required": ["location", "unit"] } } }] response = client.chat.completions.create( model="phi‑4‑mini‑instruct", # or client.models.list().data[0].id messages=[{"role": "user", "content": "What's the weather like in San Francisco?"}], tools=tools, tool_choice="auto" ) # Inspect response tool_call = response.choices[0].message.tool_calls[0].function args = json.loads(tool_call.arguments) print("Function called:", tool_call.name) print("Arguments:", args) print("Result:", tool_functions[tool_call.name](**args))출력은 다음과 유사해야 합니다.
Function called: get_weather Arguments: {"location": "San Francisco, CA", "unit": "fahrenheit"} Result: Getting the weather for San Francisco, CA in fahrenheit..."tool_calls" 필드가 다시 나타납니다. 즉, LLM이
Phi-4-mini함수를 호출하기로 결정했습니다. 이제 KAITO 유추 배포를 사용하여 종단 간 도구 호출 동작을 확인하는 모델의 결정에 따라 샘플 도구 호출이 성공적으로 구문 분석되고 실행되었습니다.- 로컬 유추 서버와 통신하도록 OpenAI 호환 클라이언트를 초기화합니다. 서버는 실행 중인
Troubleshooting
모델 사전 설정은 도구 호출을 지원하지 않습니다.
지원되는 목록에 없는 모델을 선택하면 도구 호출이 작동하지 않을 수 있습니다. 도구 호출을 지원하는 사전 설정을 명시적으로 나열하는 KAITO 설명서를 검토해야 합니다.
잘못 정렬된 런타임
KAITO 유추는 도구 호출에 vLLM 런타임 을 사용해야 합니다(HuggingFace 변환기 런타임은 일반적으로 KAITO에서 도구 호출을 지원하지 않음).
네트워크/엔드포인트 문제
포트 전달 시 서비스 포트가 올바르게 전달되었는지 확인합니다. 외부 MCP 서버에 연결할 수 없는 경우 오류가 발생합니다.
타임아웃
외부 MCP 서버 호출에는 시간이 걸릴 수 있습니다. 어댑터 또는 클라이언트 시간 제한이 충분히 높은지 확인합니다.
Authentication
외부 MCP 서버에 인증(API 키, 헤더 등)이 필요한 경우 올바른 자격 증명을 제공해야 합니다.
다음 단계
- AKS에서 Prometheus와 Grafana를 사용하여 AI 도구체인 운영자 애드온의 vLLM 모니터링을 설정합니다.
- KAITO를 사용한 MCP 서버 지원 및 AKS 클러스터의 표준화된 도구 호출 예제 테스트에 대해 알아봅니다.