Amazon Bedrock AgentCore Runtime의 양방향 스트리밍 기능으로 실시간 AI 음성 에이전트 구축하기
최근 들어 자연스러운 음성 대화를 위한 인공지능 에이전트 구축 수요가 빠르게 증가하고 있습니다. 기존의 턴 기반(request-response) 방식은 실시간 대화의 흐름을 재현하기 어렵고, 사용자 경험에서도 한계를 보여왔습니다. 이를 해결하기 위한 방법 중 하나가 바로 양방향 스트리밍을 활용한 통신입니다. 이제 Amazon Bedrock AgentCore Runtime은 WebSocket 프로토콜 기반의 양방향 스트리밍 기능을 공식 지원하며, 이를 통해 음성 중심의 대화형 AI 서비스를 보다 자연스럽고 유연하게 구현할 수 있게 되었습니다.
양방향 스트리밍이란?
양방향 스트리밍(Bi-directional Streaming)은 하나의 지속적인 TCP 커넥션을 기반으로, 클라이언트와 서버 간에 데이터를 동시에 주고받는 방식입니다. 특히 Amazon Bedrock AgentCore Runtime에서는 WebSocket 기반의 양방향 통신을 지원하여 에이전트가 사용자 입력을 수신하면서 동시에 응답을 생성할 수 있게 됩니다. 이로 인해 음성과 시각 등 멀티모달 인터페이스에서도 사용자와의 실시간 상호작용이 가능해져, 사람과 비슷한 자연스러운 대화 흐름을 구현하는 데 매우 효과적입니다.
양방향 통신이 가능한 음성 에이전트는 인간과의 대화처럼 도중에 말을 끊거나, 정정하거나, 화제를 전환하는 등의 동작을 실시간으로 처리하게 됩니다. 이 기능을 구현하기 위해서는 낮은 지연의 연결, 지속적인 상태 관리, 오디오 스트림 처리, 다중 세션 확장성 등 복잡한 시스템 아키텍처가 요구되었지만, 이제 AgentCore Runtime은 이 모든 요소를 서버리스 방식으로 지원하여 개발자 부담을 대폭 줄였습니다.

AgentCore Runtime 양방향 통신 구성 가이드
AgentCore에서 양방향 통신을 구현하려면 다음과 같은 요건을 따라야 합니다:
- 컨테이너는 WebSocket 엔드포인트를 8080 포트의 /ws 경로에 구현해야 합니다.
- 동일 컨테이너에서 기존 API(InvokeAgentRuntime)와 WebSocket용 API(InvokeAgentRuntimeWithWebsocketStream)를 모두 지원해야 합니다.
- /ping 엔드포인트를 구현하여 헬스 체크를 가능하게 합니다.
클라이언트는 다음 구성으로 WebSocket 연결을 생성해야 합니다:
wss://bedrock-agentcore.
이 연결에는 SigV4 인증, 사전 서명 URL, 또는 OAuth2 인증 방식 중 하나를 사용해야 하며, HTTP 프로토콜 계약에 따라 엔드포인트를 구현해야 합니다.
Strands 양방향 에이전트 프레임워크의 활용
Amazon은 음성 이해 및 합성을 통합한 Amazon Nova Sonic 모델을 통해, 초저지연의 고품질 음성 AI 서비스를 제공하고 있습니다. 그리고 Strands 프레임워크를 이용하면 복잡한 음성 에이전트 로직 구성 없이도 양방향 음성 통신이 가능합니다.
Strands 에이전트는 agent = BidiAgent(…) 와 같이 단 몇 줄의 코드로 모델, 툴, 시스템 프롬프트를 설정하고 run() 메서드로 바로 실행할 수 있습니다. WebSocket 연결, JSON 프로토콜 파싱, 오디오 스트림 처리, 비동기 작업 관리 등은 프레임워크가 내부적으로 처리합니다. 아래는 실제 코드 예제입니다:
from strands.experimental.bidi.agent import BidiAgent
from strands.experimental.bidi.models.nova_sonic import BidiNovaSonicModel
from strands_tools import calculator
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, model_name: str):
model = BidiNovaSonicModel(
region="us-east-1",
model_id="amazon.nova-sonic-v1:0",
provider_config={
"audio": {
"input_sample_rate": 16000,
"output_sample_rate": 24000,
"voice": "matthew"
}
}
)
agent = BidiAgent(
model=model,
tools=[calculator],
system_prompt="You are a helpful assistant with access to a calculator tool."
)
await agent.run(inputs=[receive_and_convert], outputs=[websocket.send_json])
Strands 프레임워크는 OpenAI Realtime API, Google Gemini Live와도 같은 코드 구조로 호환되어, 하나의 코드 기반으로 다양한 모델에 쉽게 적용 가능합니다. 반면 Amazon Nova Sonic을 직접 구현할 경우 더 많은 자유도와 설정 제어가 가능하지만 약 150줄 이상의 복잡한 구현을 요구합니다. Strands는 이와 대비해 약 20줄로 동일한 기능을 구현할 수 있어, 빠른 활용에 적합합니다.
비교 요약: 프레임워크 vs. 직접 구현
| 항목 | Nova Sonic 직접 구현 | Strands 프레임워크 |
|---|---|---|
| 코드 라인 수 | 약 150줄 이상 | 20줄 이하 |
| 제어 능력 | 완전한 세부 제어 가능 | 고수준 추상화 |
| 확장성 | 세밀한 설정 가능 | SDK 형태로 통일 구성 |
| 대상 언어 | 전체 제어 가능한 Python 코드 | 현재 Python SDK 전용 |
| 특징 | 다양한 통신 패턴 대응 | 멀티모달 도구 통합 용이 |
결론
Amazon Bedrock AgentCore Runtime의 양방향 스트리밍 기능은 대화형 AI 에이전트 구현 방식을 근본적으로 변화시키고 있습니다. 복잡한 스트리밍 인프라를 직접 구축하지 않고도, WebSocket 기반 실시간 커뮤니케이션을 손쉽게 배포할 수 있으며, 음성 중심 혹은 멀티모달 상호작용을 위한 AI 에이전트를 빠르게 개발할 수 있습니다. Nova Sonic을 기반으로 고도화된 제어 기능이 필요한 경우 자체 구현 방식을, 개발 리소스를 최소화하고 빠른 시제품 제작이 필요한 경우에는 Strands 프레임워크를 활용해 보시길 권장합니다.
AI, Cloud 관련한 문의는 아래 연락처로 연락주세요!
(주)에이클라우드
이메일 : acloud@a-cloud.co.kr
회사 번호 : 02-538-3988
회사 홈페이지 : https://www.a-cloud.co.kr/
문의하기
