Strands와 함께 차세대 음성 에이전트 구축

발행: (2026년 1월 8일 오후 08:35 GMT+9)
15 min read
원문: Dev.to

Source: Dev.to

소개

오늘날의 초고속 기술 환경에서는 새로운 프레임워크가 거의 매일 등장합니다. 실제 어려움은 최신 정보를 따라잡는 것뿐만 아니라, 깊이 있는 탐구 시간을 투자할 가치가 있는 도구를 결정하는 데 있습니다.

Strands Agents와 그들의 새로운 양방향 스트리밍(BidiAgent)에 대한 이야기를 들어본 적이 있다면, 이 가이드는 바로 당신을 위한 것입니다. 이 기능이 무엇인지 간단히 설명하고, 실시간 음성 비서와 같은 실제 사례를 살펴보며, 단점을 솔직하게 평가합니다. 마지막까지 읽으면 다음 고동시성 프로젝트에 이 기술이 적합한지 정확히 알 수 있을 것입니다.

Voice‑controlled concierge

Strands Agents

Strands Agents는 AWS에서 개발한 오픈‑소스 SDK로, 확장 가능한 AI 에이전트를 쉽게 구축할 수 있게 해줍니다. AWS 생태계에서 시작했지만 “폐쇄된 정원”은 아닙니다. Amazon Bedrock에 제한되지 않으며, 이 프레임워크는 완전히 모델‑agnostic(model‑agnostic)으로, 다른 클라우드 제공업체와 통합하거나 Ollama를 사용해 로컬에서 실행할 수도 있습니다.

Strands Agents 양방향 스트리밍 (Experimental)

보통 우리는 AI와 “핑‑퐁” 텍스트 교환을 통해 상호작용합니다: 메시지를 보내고, 기다렸다가 에이전트가 답변합니다. 새 Bidirectional Streaming 기능(현재 실험 중)은 이 흐름을 뒤집습니다.

마치 인간과 대화하는 듯한 느낌을 상상해 보세요. 풀‑듀플렉스 통신을 활용하면 이제 실시간 음성으로 에이전트와 상호작용할 수 있습니다.

  • 기존에 별도의 Speech‑to‑Text와 Text‑to‑Speech 모델을 체인처럼 연결하던 방식—대부분 지연이 발생함—과 달리 Strands는 Amazon Nova Sonic과 같은 네이티브 speech‑to‑speech 모델을 사용합니다.
  • 이를 통해 지연 시간과 비용을 줄이고, 에이전트가 듣고 말하는 것을 동시에 할 수 있습니다.
  • 결과는? 이제 AI 비서를 “바지‑인”(barge‑in) 기능으로 친구와 대화하듯 중간에 끼어들어 말을 멈추게 할 수 있습니다.

Use Cases

Bidirectional streaming이 “멋진 기술”에서 필수 도구로 전환되는 순간은 언제일까요? 아래는 Strands BidiAgent가 번거로운 작업을 매끄러운 대화로 바꾸는 두 가지 고충격 시나리오입니다.

Use Case 1 – The Parking‑Location Assistant

The Problem – “Machine Interface” Barrier
우리 모두 겪어봤을 겁니다: 거대한 다층 주차장을 헤매다 차를 어디에 두었는지 완전히 잊어버리는 상황. 일부 고급 쇼핑몰에는 디지털 키오스크가 있지만, 경험은 종종 답답합니다. 기계를 찾아가서, 투박한 터치스크린 UI를 탐색하고, 번호판을 직접 입력해야 합니다. 마치 차가운 기계와 대화하듯, 컴퓨터의 조건에 맞춰 “말”해야 하는 느낌이죠.

The Solution – Conversational Environment
양방향 스트리밍 덕분에 마치 친절한 컨시어지가 바로 옆에 있는 것처럼 시스템에 말을 걸 수 있습니다. 상호작용은 유연하고 실시간이며—무엇보다도—기계와의 거래 같은 느낌이 없습니다.

Sample Conversation

User: “완전히 길을 잃었어요—차를 찾는 데 도와줄 수 있나요?”
System: “물론이죠! 번호판을 알려주시겠어요?”
User: “EHU 62E입니다.”
System: “알겠습니다. 현재 쇼핑몰 반대편에 계시니 조금 걸어야 합니다. 오른쪽에 있는 엘리베이터를 타고—”
User (interrupting): “잠깐, 스타벅스 근처 엘리베이터 말인가요?”
System: “맞아요! 스타벅스를 지나서 출구에서 좌회전하면 오른쪽에 있는 차가 다섯 번째 차입니다.”

Why this is a game‑changer – 전통적인 AI 설정에서는 시스템이 긴 안내를 모두 마쳐야만 사용자가 clarification을 요청할 수 있습니다. Strands BidiAgent를 사용하면 시스템이 사용자의 중단을 즉시 “듣고” 대화를 전환시켜, 경직된 데이터베이스 질의를 인간적인 상호작용으로 바꿔줍니다.

이 대화를 실제로 구현하는 방법—물리적 설치, 통합 오디오, 맞춤형 하드웨어 등—이 바로 진정한 혁신이 일어나는 지점입니다.

Use Case 2 – The Interactive Mall Directory

The Problem – “Static Maze”
대부분의 쇼핑몰은 아직도 정적이거나 반정적인 “현재 위치” 보드를 사용합니다. 이를 이용하는 것은 GPS가 보편화된 시대에 종이 지도만 보는 느낌입니다. 방향을 잡고, 200여 개 매장을 스캔하고, 경로를 머릿속에 그려야 합니다. 마찰이 많고 혼란을 야기하기 쉽습니다.

The Solution – Upgrading the Edge with BidiAgents
전체 보드를 교체하는 대신, 2026년에 맞게 “업그레이드”합니다. Jetson Nano와 같은 System‑on‑Chip(SoC)을 설치하고 간단한 마이크/스피커 어레이를 추가하면, 정적 보드를 Strands BidiAgent가 구동하는 음성‑우선 어시스턴트로 변신시킬 수 있습니다.

Sample Conversation

User: “스타벅스를 찾고 있는데… 3층에 있나요?”
System (responding instantly while the user pauses): “사실 운이 좋으세요! 더 가깝습니다. 오른쪽에 있는 엘리베이터를 타고 2층으로 가세요.”
User: “잠깐, 분수 옆에 있는 거요?”
System: “맞아요. 나가서 좌회전하면 바로 앞에 있습니다.”

Why this wins – 엣지에서 speech‑to‑speech (S2S) 모델을 실행하거나 저지연 스트림으로 구동함으로써 “지도”가 능동적인 가이드가 됩니다. 터치스크린이 필요 없어 위생적이고 접근성이 높으며, 기계 중심 환경에서 human‑first 인터페이스를 제공합니다.

실제로 프로토타입을 제작해 실제 환경에서 어떻게 동작하는지 보여드렸습니다. 아래는 바로 그 사용 사례의 작동 예시입니다.

몰 어시스턴트 실전 – Strands와 양방향 오디오 루프 활용

작업 예시: 상점 위치 어시스턴트

import asyncio
from strands.experimental.bidi import BidiAgent, BidiAudioIO
from strands.experimental.bidi.io import BidiTextIO
from strands.experimental.bidi.models import BidiNovaSonicModel
from strands import tool
from strands_tools import calculator, current_time

# Create a bidirectional streaming model
model = BidiNovaSonicModel()

# Define a custom tool
@tool
def get_shop_location(shop: str) -> str:
    """
    Get the shop location for a given shop name.

    Args:
        shop: Name of the shop to locate

    Returns:
        A string with the directions to find the shop.
    """
    print("get_shop_location called with shop:", shop)
    # In a real application, call the location API that returns these instructions
    locations = {
        "starbucks": (
            "Take the elevator at your right, go to the second floor and turn left "
            "in that hall – you will find it on the right."
        ),
        "apple store": (
            "Go straight ahead from the main entrance, take the escalator to the "
            "first floor, and it's on your left."
        ),
        "food court": (
            "Head to the centre of the mall, take the stairs to the third floor, "
            "and you'll see it right in front of you."
        ),
        "bookstore": (
            "From the main entrance, turn right and walk past the clothing stores; "
            "it's next to the toy store."
        ),
    }
    if shop.lower() in locations:
        print("Found location for shop:", shop)
        return locations[shop.lower()]
    else:
        return "Sorry, we don't have that shop in the mall."

# Create the agent
agent = BidiAgent(
    model=model,
    tools=[calculator, current_time, get_shop_location],
    system_prompt=(
        "You are a mall assistant that helps people find any shop in a mall. "
        "Keep responses concise and natural."
    ),
)

# Set up audio I/O for microphone and speakers
audio_io = BidiAudioIO()
text_io = BidiTextIO()

# Run the conversation
async def main():
    await agent.run(
        inputs=[audio_io.input()],
        outputs=[audio_io.output(), text_io.output()],
    )

asyncio.run(main())

Note: 상점 위치는 도구 내부에 하드코딩되어 있습니다. 이 사용 사례에서는 의도적인 선택으로, 몰의 지도는 정적이기 때문에 하드코딩을 하면 100 % 정확도거의 제로에 가까운 지연 시간을 얻을 수 있습니다. 외부 API에 연결하거나 디지털 지도를 활용한 Retrieval‑Augmented Generation (RAG) 방식을 사용할 수도 있지만, 이러한 방법은 비용이 증가하고 모델이 방향을 “환상”할 위험을 높입니다. 트래픽이 많은 대형 몰에서는 간단하고 로컬에 있는 “진실의 원천”이 가장 견고한 해결책이 되는 경우가 많습니다.

Demo Video: (embed or link the video here)

도전 과제: 환경 소음 다루기

실험적인 기능은 성장통 없이 존재하지 않습니다. 테스트 중에 백색‑노이즈 민감도라는 큰 장애물을 마주했습니다.

양방향 스트리밍은 자연스러운 대화를 위해 설계되었으며, 사용자가 AI를 방해할 때(‘바지‑인’)를 감지하기 위해 지속적으로 청취합니다. 컴퓨터 팬이 작동하면 내장 마이크가 그 윙윙거림을 방해 신호로 받아들여, 에이전트가 문장 중간에 멈추게 됩니다.

Nova Sonic 버전에 대한 기술 노트

  • 현재 상태: 작성 시점에 Strands 통합은 주로 nova‑sonic‑v1에 최적화되어 있습니다. 이 버전은 “방해 임계값”을 조정할 수 있는 세밀한 설정이 없습니다.
  • 미래: 곧 출시될 nova‑sonic‑v2는 노이즈 억제와 민감도 조정을 위한 더 나은 구성 옵션을 제공할 예정입니다.

실제 배포(예: 쇼핑몰 안내 로봇) 시 해야 할 일:

  1. 고품질 지향성 마이크 사용, 또는
  2. Nova Sonic v2의 광범위한 통합을 기다림, 또는
  3. 이미 조정 가능한 민감도를 제공하는 공급자(예: OpenAI 실시간 음성 모델)로 전환.

결론: 미래는 대화형이다

우리는 버튼을 클릭하는 방식에서 자연스러운 대화 방식으로 이동하고 있습니다. 양방향 스트리밍은 아직 실험 단계이며—특히 민감도와 관련해서—기술을 인간화할 수 있는 잠재력은 막대합니다. 더 똑똑한 쇼핑몰 안내판부터 인터랙티브한 산업용 어시스턴트까지, “텍스트 입력/텍스트 출력”에서 “실시간 대화”로의 전환이 다음 경계가 될 것입니다.

이러한 구현의 복잡성—특히 Jetson Nano와 같은 하드웨어를 다루거나 모델 민감도를 조정할 때—가 진정한 작업이 시작되는 지점입니다. 이 “인간 경험”을 여러분의 하드웨어나 프로젝트에 적용하고 싶다면, 언제든지 이야기해 보세요. 저는 현재 이러한 아키텍처를 활발히 탐구하고 있으며, 여러분이 다음 지능형 에이전트를 구축하는 데 필요한 미묘한 부분을 함께 고민하고 도와드리고 싶습니다.

Back to Blog

관련 글

더 보기 »