AI 에이전트를 구축하는 조직들은 공통적인 과제에 직면합니다. 일상적인 상태 확인이든 복잡한 분석이든 모든 요청이 일반적으로 하나의 크고 비용이 많이 드는 모델로 라우팅됩니다. 이러한 일률적인 접근 방식은 API 비용을 증가시키고, 예측하기 어려운 지연을 초래하며, 오프라인 운영의 가능성을 없앨 수 있습니다. 로컬에서 처리될 수 있는 일상적인 쿼리조차 클라우드에 호스팅된 대규모 언어 모델(LLM)로의 전체 네트워크 왕복을 필요로 하게 됩니다.
Strands Agents로 구축된 Adaptive Agentic Intelligence Framework(AAIF)는 다른 접근 방식을 취합니다. 모든 요청을 단일 대형 모델로 라우팅하는 대신, AAIF는 소형 언어 모델(SLM)을 사용해 루틴한 작업을 로컬에서 처리합니다. 더 복잡한 요청은 다음을 통해 클라우드 호스팅 모델로 라우팅됩니다. Amazon Bedrock이 접근 방식은 다음 연구 입장을 기반으로 합니다: NVIDIA의 Belcak 등그들은 소형 언어 모델이 “에이전틱 시스템에서의 많은 호출에 대해 충분히 강력하고, 본질적으로 더 적합하며, 필연적으로 더 경제적”이라고 주장합니다. Strands Agents를 기반으로 구축된 이 프레임워크는 지능적인 모델 오케스트레이션이 로컬 작업의 낮은 지연 시간을 유지하면서 비용을 줄이는 데 어떻게 도움이 될 수 있는지 보여줍니다.
이 게시물에서는 Ollama를 통한 로컬 SLM과 Amazon Bedrock을 통한 클라우드 모델과 함께 Strands Agents를 사용하여 AAIF의 핵심 구성 요소를 살펴봅니다. 사물인터넷(IoT) 모니터링 시나리오를 참조 구현으로 사용합니다.
솔루션 개요
AAIF는 그림 1에서 보여주듯 AI 처리를 세 개의 계층으로 구성하며, 각 계층은 서로 다른 작업 유형에 맞게 최적화되어 있습니다:
- 스마트 오케스트레이션은 경량 SLM(llama3.2:1b)을 의사 결정 레이어로 사용합니다. 이 오케스트레이터는 들어오는 요청을 분류하고 하드코딩된 규칙 없이 적절한 처리 레이어로 라우팅합니다.
- 로컬 처리는 로컬 하드웨어에서 실행되는 SLM을 통해 장치 텔레메트리 수집 및 이미지 분석과 같은 일상적인 작업을 처리합니다. Ollama. 이러한 작업은 낮은 지연 시간으로 완료되며 클라우드에 의존하지 않습니다.
- 클라우드 처리는 Amazon Bedrock의 프론티어 모델을 통해 복잡한 패턴 분석과 전략적 권고 사항을 처리합니다. 이러한 요청에는 SLM이 안정적으로 제공할 수 없는 더 넓은 맥락과 다단계 추론이 필요합니다.
그림 1: 스마트 오케스트레이션, 로컬 처리, 클라우드 처리를 위한 세 가지 AAIF 처리 계층
그림 1은 전체 AAIF 시스템 아키텍처를 보여줍니다. 중심에는 Strands 에이전트가 있으며, 이 에이전트는 1B 파라미터 오케스트레이터 모델과 비전 모델을 모두 호스팅하는 Ollama 런타임에 연결됩니다. 이 에이전트는 세 가지 도구를 노출합니다. 로컬 센서 데이터 검색을 위한 get_device_telemetry, llama3.2-vision을 통한 온디바이스 비전 처리를 위한 analyze_camera_feed, 그리고 boto3를 통해 Amazon Bedrock을 호출하여 복잡한 분석을 수행하는 get_expert_insights입니다. 들어오는 사용자 요청은 SLM 오케스트레이터를 통과하며, 이 오케스트레이터는 각 요청을 분류하여 작업 복잡도에 따라 로컬 도구 또는 클라우드 엔드포인트로 전달합니다.
그림 2: Strands 에이전트, Ollama 런타임, 도구 통합 및 Amazon Bedrock 연결을 보여주는 전체 AAIF 시스템 아키텍처
이 프레임워크는 인프라를 프레임워크에 맞춰 재구성하도록 요구하는 것이 아니라, 배포 제약 조건에 맞춰 적응합니다. 이 아키텍처는 8 GB 메모리를 갖춘 Raspberry Pi 같은 엣지 디바이스에서 실행되거나, 모든 추론이 Amazon Bedrock으로 향하는 완전한 클라우드 배포 환경에서, 또는 로컬 속도와 클라우드 추론을 결합한 하이브리드 구성에서 실행될 수 있습니다. 이러한 유연성은 라우팅 로직(SLM 오케스트레이터)을 처리 도구에서 분리함으로써 얻어지며, 가용한 하드웨어와 네트워크 연결 상태에 따라 이를 독립적으로 교체하거나 재구성할 수 있습니다.
전제 조건
이 연습을 따라 하려면 다음 사전 요구 사항이 필요합니다:
- 한 AWS 계정.
- Amazon Bedrock 필수 리전에서 구성된 모델 액세스.
- Python 3.10+ 설치되었습니다.
- Ollama 다음 모델들이 가져와진 상태로 설치되었습니다:
ollama pull llama3.2:1b(오케스트레이터).ollama pull llama3.2-vision(비전 분석).
- Strands Agents 가 설치되어 있어야 합니다:
pip install strands-agents strands-agents-tools. - AWS Command Line Interface (AWS CLI) 가 적절한 자격 증명으로 구성되어 있어야 합니다.
- Boto3 가 설치되어 있어야 합니다:
pip install boto3.
환경 설정
프로젝트 디렉터리를 생성하고 Ollama 서버를 시작합니다:
mkdir aaif-demo && cd aaif-demo
ollama serve
필요한 모델을 가져옵니다:
ollama pull llama3.2:1b
ollama pull llama3.2-vision
라는 이름의 파일을 생성하고 aaif_agent.py 다음 구성 요소를 추가합니다.
로컬 처리 도구 구현
Strands Agents는 에이전트가 호출할 수 있는 기능을 정의하기 위해 @tool 데코레이터를 사용합니다. 로컬 처리를 위한 도구를 만드는 것부터 시작합니다.
첫 번째 도구는 디바이스 텔레메트리 데이터를 검색합니다. 프로덕션 환경에서는 실제 IoT 센서에 연결하겠지만, 이 연습에서는 시뮬레이션된 디바이스 데이터를 사용합니다:
from strands import Agent, tool
import random
DEVICE_TELEMETRY = {
"sensor-001": {
"device_type": "Temperature Sensor",
"location": "Building A - Floor 2",
"temperature": 72.5,
"humidity": 45.2,
"status": "normal"
},
"camera-001": {
"device_type": "Security Camera",
"location": "Main Entrance",
"fps": 30,
"resolution": "1080p",
"status": "recording"
},
"hvac-001": {
"device_type": "HVAC Controller",
"location": "Building A - Central",
"set_temp": 71.0,
"current_temp": 72.5,
"mode": "cooling",
"status": "active"
}
}
@tool
def get_device_telemetry() -> str:
"""Retrieve current telemetry data from connected IoT devices."""
device_id = random.choice(list(DEVICE_TELEMETRY.keys()))
device_data = DEVICE_TELEMETRY[device_id]
report = f"Device: {device_id} ({device_data['device_type']})\n"
report += f"Location: {device_data['location']}\n"
report += f"Status: {device_data['status']}\n"
for key, value in device_data.items():
if key not in ['device_type', 'location', 'status']:
report += f"{key}: {value}\n"
return report
두 번째 도구는 로컬 SLM을 사용하여 비전 분석을 수행합니다. llama3.2-vision 모델은 전적으로 로컬 하드웨어에서 실행되므로 민감한 카메라 영상이 디바이스를 벗어나지 않습니다:
import ollama
@tool
def analyze_camera_feed(image_path: str) -> str:
"""Analyze visual data from cameras using local vision model."""
stream = ollama.chat(
model='llama3.2-vision',
messages=[{
'role': 'user',
'content': 'Describe this image in one sentence. '
'What are the 3 most important things you see?',
'images': [image_path]
}],
stream=True,
)
full_response = ""
for chunk in stream:
chunk_content = chunk['message']['content']
print(chunk_content, end='', flush=True)
full_response += chunk_content
return f"Object Detection Report:\n{full_response}"
클라우드 처리 구현
더 폭넓은 추론이 필요한 복잡한 분석을 위해 Amazon Bedrock을 호출하는 도구를 생성합니다. 이 도구는 오케스트레이터가 로컬 모델로 요청을 처리할 수 없다고 판단할 때만 호출됩니다:
import boto3
@tool
def get_expert_insights(context_data: str, question: str) -> str:
"""Get advanced analysis and expert recommendations
for complex questions via Amazon Bedrock."""
client = boto3.client("bedrock-runtime", region_name="us-east-1")
conversation = [
{
"role": "user",
"content": [
{"text": f"Context: {context_data}\n\nQuestion: {question}"}
],
}
]
response = client.converse(
modelId="<<model_id>", //Refer model id [details](https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models-reference.html)
messages=conversation,
inferenceConfig={
"maxTokens": 512,
"temperature": 0.5,
"topP": 0.9
}
)
response_text = response["output"]["message"]["content"][0]["text"]
return f"Expert Analysis:\n{response_text}"
스마트 오케스트레이션으로 Strands 에이전트 구성
AAIF의 핵심은 Strands 에이전트 구성입니다. 에이전트는 로컬 SLM(llama3.2:1b)을 오케스트레이터로 사용합니다. Strands Agents는 여러 모델 공급자를 지원하며, 여기서는 Ollama 공급자를 사용하여 오케스트레이터를 로컬에서 실행합니다:
from strands.models.ollama import OllamaModel
model = OllamaModel(
model_id="llama3.2:1b",
host="http://localhost:11434",
params={
"max_tokens": 300,
"temperature": 0.3,
},
)
system_prompt = """You are a monitoring assistant for operational facilities.
You have access to device telemetry tools, analysis capabilities,
and expert insights to help monitor operations effectively.
When users ask for:
- Device status or telemetry: use get_device_telemetry
- Image or data analysis: use analyze_camera_feed
- Expert advice or complex questions: use get_expert_insights
Always return the complete tool results directly to the user."""
agent = Agent(
model=model,
system_prompt=system_prompt,
tools=[
get_device_telemetry,
analyze_camera_feed,
get_expert_insights,
],
)
SLM 기반 오케스트레이터는 각 요청을 분석하고 하드코딩된 키워드 매칭 없이 적절한 도구로 라우팅합니다. 라우팅은 모델의 요청 이해를 통해 이루어집니다:
| 요청 | 라우팅 | 지연 시간 |
| “디바이스 상태 확인” | 로컬 SLM | 낮음(로컬 추론) |
| “이 이미지 분석” | 로컬 비전 AI | 낮음(로컬 추론) |
| “어떤 최적화 전략을 권장하나요?” | 클라우드(Amazon Bedrock) | 높음(네트워크 왕복) |
표 1: 로컬 추론과 클라우드 추론 비교에 대한 요청, 라우팅 및 지연 시간 추정치
에이전트 실행
에이전트가 구성되면 직접 상호 작용할 수 있습니다:
# Local processing - device telemetry
response = agent("What's the current status of our devices?")
print(response)
# Local processing - vision analysis
response = agent("Analyze the camera feed from camera-001")
print(response)
# Cloud processing - complex analysis
response = agent(
"Based on current telemetry patterns, "
"what optimization strategies do you recommend?"
)
print(response)
에이전트는 각 요청을 자동으로 분류하여 적절한 처리 계층으로 라우팅합니다. 명시적인 라우팅 규칙은 필요하지 않습니다.
다양한 배포 시나리오에 맞게 조정
AAIF 아키텍처는 모델 구성을 변경함으로써 다양한 인프라 요구 사항에 맞게 조정됩니다:
워크로드가 전적으로 클라우드에서 실행되고 엣지 하드웨어를 사용할 수 없는 경우, 모든 처리를 위해 Ollama 모델 구성을 Amazon Bedrock으로 대체합니다. 이렇게 하면 모든 요청이 관리형 클라우드 추론을 통해 라우팅되어 로컬 GPU 리소스 없이도 오토 스케일링을 얻을 수 있습니다. 안정적인 저지연 연결성을 갖추고 데이터 레지던시 제약이 없는 팀이 이 구성에서 가장 큰 이점을 얻습니다:
from strands.models import BedrockModel
model = BedrockModel(
model_id="<<model_id>", //Refer model id [details](https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models-reference.html)
region_name="us-east-1"
)
하이브리드 구성은 로컬 SLM 오케스트레이터를 그대로 유지하면서 로컬 모델의 능력을 초과하는 요청을 위한 클라우드 모델을 추가합니다. 이것이 이 연습에서 보여주는 기본 AAIF 구성입니다. 대부분의 요청이 로컬에서 해결될 만큼 충분히 일반적이지만 일부는 더 큰 모델의 폭넓은 추론이 필요한 환경에 적합합니다. 유료 API 엔드포인트에 도달하지 않는 약 80 퍼센트의 트래픽에서 비용 절감 효과를 얻을 수 있습니다.
완전히 에어갭(air-gapped) 환경이거나 엄격한 데이터 주권 요구 사항이 있는 환경의 경우, 클라우드 도구를 더 큰 로컬 모델로 대체하고 모든 처리를 온디바이스에서 실행합니다. 충분한 메모리를 갖춘 하드웨어에서 실행되는 3B 파라미터 모델은 1B 오케스트레이터가 그렇지 않으면 상위로 넘겼을 적당히 복잡한 작업을 처리할 수 있습니다. 가장 어려운 쿼리에서 추론 깊이가 감소하는 것이 트레이드오프이지만, 데이터가 프레미스를 벗어나지 않는다는 것이 이점입니다:
model = OllamaModel(
model_id="llama3.2:3b", # Larger local model for complex tasks
host="http://localhost:11434",
)
앞으로의 전망: MCP 서버를 통한 중앙화된 도구 호출
이 게시물의 구현은 에이전트 코드에 직접 정의된 로컬 도구 호출을 사용합니다. 여러 에이전트가 서비스 간에 도구를 공유하는 프로덕션 배포의 경우, 이러한 도구를 Model Context Protocol(MCP) 서버로 노출하세요. MCP는 도구 검색 및 호출을 위한 표준화된 인터페이스를 제공하므로, 도구 관리를 중앙화하고 서로 다른 에이전트와 환경에서 도구를 재사용할 수 있습니다. 그림 3에서는 AAIF 도구를 분산형 중앙화 도구 호출을 위한 MCP 서버로 변환하는 방법을 보여줍니다.
그림 3에 표시된 것과 같은 분산 구성에서는 Device 1이 오케스트레이팅 허브 역할을 하며, SLM 라우터와 로컬 텔레메트리 도구를 갖춘 Strands 에이전트를 실행합니다. Device 1은 MCP 프로토콜을 통해 llama3.2-vision을 실행하는 엣지 비전 처리 서버가 있는 Device 2에 연결됩니다. Device 3은 Amazon Bedrock에 연결된 클라우드 분석 게이트웨이 역할을 합니다. 오케스트레이터의 관점에서 모든 원격 도구는 로컬 함수 호출처럼 보이는데, 그 이유는 MCP 전송 계층이 직렬화와 네트워크 통신을 투명하게 처리하기 때문입니다.
그림 3: MCP 서버를 통한 분산형 지능
청소 작업
향후 요금이 부과되지 않도록 하려면 다음 정리 단계를 완료하십시오:
- Amazon Bedrock 모델 액세스 비활성화: Amazon Bedrock 콘솔을 열고 다음을 선택합니다. 모델 접근, 그리고 Amazon Nova Lite에 대한 액세스를 취소합니다. 자세한 단계는 Amazon Bedrock 사용 설명서의 모델 액세스 관리 를 참조하세요.
- Ollama 서버를 중지하고 모델을 제거하여 로컬 디스크 공간(약 2 GB)을 확보합니다:
ollama stop ollama rm llama3.2:1b ollama rm llama3.2-vision - 샘플 코드가 더 이상 필요하지 않다면 프로젝트 디렉터리를 삭제합니다:
rm -rf aaif-demo
결론
우리는 Strands Agents와 함께 Adaptive Agentic Intelligence Framework를 사용하여 비용 효율적인 AI 에이전트를 구축하는 방법을 보여주었습니다. 일상적인 요청을 로컬 SLM으로 라우팅하고 복잡한 분석을 위한 클라우드 모델은 Amazon Bedrock에 예약함으로써, AAIF는 일상적인 작업의 낮은 지연 시간을 유지하면서 API 비용을 절감하는 데 도움을 줄 수 있습니다.
프로덕션에서 이 패턴을 실행하기 전에 클라우드 추론 경로에 책임 있는 AI 통제 장치를 추가하십시오. 해당 요청에는 도구 출력, 검색된 데이터 및 사용자 입력이 포함되기 때문입니다. Amazon Bedrock Guardrails 를 guardrail ID 및 버전과 함께 Strands BedrockModel에 연결할 수 있습니다. 그러면 유해 범주에 대한 콘텐츠 필터, 프롬프트 주입 필터, 그리고 소스 데이터로 뒷받침되지 않는 응답을 차단하는 맥락적 근거 검사가 적용됩니다. 로컬 SLM 계층에 동일한 정책을 적용하려면 해당 입력과 출력에 독립형 ApplyGuardrail API를 호출하십시오. 이렇게 하면 어떤 모델이 처리하든 모든 요청이 하나의 안전 표준을 따르게 됩니다.
이 아키텍처 패턴은 IoT 모니터링을 넘어 적용될 수 있습니다. 의료기관은 환자 모니터링을 로컬에서 실행하면서 진단 지원은 클라우드 모델로 라우팅할 수 있습니다. 금융 서비스 회사는 온프레미스에서 거래를 처리하고 위험 분석을 위해 클라우드 용량을 예약할 수 있습니다. 제조 팀은 엣지에서 품질 관리 비전 모델을 실행하면서 최적화 요청은 클라우드로 보낼 수 있습니다.
Strands Agents로 에이전트를 구축하는 방법에 대해 자세히 알아보려면 Strands Agents 문서를 방문하세요. 사용 가능한 파운데이션 모델에 대한 정보는 Amazon Bedrock.