Ambient Agents 소개
원문: Introducing ambient agents - LangChain Blog
개요
오늘날 대부분의 AI 앱은 친숙한 채팅 패턴(“채팅” UX)을 따릅니다. 구현하기는 쉽지만, 불필요한 상호 작용 오버헤드를 만들고, 우리 인간이 자신을 확장하는 능력을 제한하며, LLM의 잠재력을 충분히 활용하지 못합니다.
지난 6개월 동안 LangChain에서는 다른 접근 방식을 탐구해 왔습니다: 앰비언트 신호에 반응하고 중요한 기회를 감지하거나 피드백이 필요할 때만 사용자 입력을 요구하는 에이전트입니다. 사용자를 새로운 채팅 창으로 강제하는 대신, 이러한 에이전트는 가장 중요한 순간에 집중할 수 있도록 주의력을 절약하는 데 도움을 줍니다.
우리는 이러한 패턴을 쉽게 구현할 수 있도록 LangGraph를 구축했습니다. 오늘 우리는 첫 번째 참조 구현인 이메일 어시스턴트를 공유합니다. 이는 주요 앰비언트 에이전트 패턴을 보여줍니다. 앞으로 며칠 동안 자체 앰비언트 워크플로우를 구축하는 데 도움이 되는 추가 예제와 도구를 출시할 예정입니다.
Ambient Agent란 무엇인가?
ChatGPT(또는 다른 챗봇)를 사용할 때, 대화를 시작하는 것은 사용자입니다. 에이전트는 인간이 메시지를 보냄으로써 시작됩니다.
이것은 일부 사용 사례에는 훌륭하지만, 다른 사용 사례에는 심각하게 제한적입니다. 에이전트가 작업을 수행하기를 원할 때마다 사용자가 채팅 인터페이스로 들어가서 메시지를 보내야 합니다. 에이전트가 작업을 시작하는 데 많은 오버헤드가 있습니다.
추가적인 제한 사항은 한 번에 하나의 대화만 가질 수 있다는 것입니다. 이는 우리 인간이 자신을 확장하기 어렵게 만듭니다 - 에이전트는 한 번에 우리를 위해 한 가지만 할 수 있습니다.
이러한 제한을 극복할 수 있는 UX 패러다임을 생각한다면, 두 가지 주요 특성을 보여야 합니다:
- (오로지) 인간 메시지에 의해 트리거되어서는 안 됩니다
- 여러 에이전트가 동시에 실행될 수 있어야 합니다
이러한 특성이 우리가 앰비언트 에이전트(ambient agents) 라고 부르는 것을 정의합니다.
💡 Ambient Agents의 정의
Ambient agents는 이벤트 스트림을 수신하고 그에 따라 행동하며, 잠재적으로 한 번에 여러 이벤트에 대해 작업합니다.
그러나 우리는 앰비언트 에이전트가 반드시 완전히 자율적일 필요는 없다고 생각합니다. 실제로 앰비언트 에이전트를 대중에게 제공하는 데 있어 핵심 부분은 이러한 에이전트가 언제 그리고 어떻게 인간과 상호 작용하는지에 대한 사려 깊은 고려라고 생각합니다.
Human-in-the-loop (휴먼-인-더-루프)
우리는 human-in-the-loop를 이러한 에이전트가 언제 그리고 어떻게 인간과 상호 작용하는지를 나타내는 데 사용합니다. 어떻게에 대해서는 나중에 이야기하겠지만, 지금은 언제에 대해 논의하겠습니다.
우리는 일반적으로 앰비언트 에이전트에 대한 세 가지 일반적인 human-in-the-loop 패턴을 봅니다: 알림(notify), 질문(question), 검토(review).
1. 알림 (Notify)
어떤 이벤트가 중요하다는 것을 사용자에게 알리지만 어떠한 조치도 취하지 않습니다. 이는 사용자가 봐야 하는 이벤트를 플래그하는 데 유용하지만, 에이전트가 그에 대해 행동할 권한이 없는 경우입니다.
예시: 이메일 어시스턴트의 맥락에서, 에이전트가 받은 편지함의 Docusign을 플래그하는 것일 수 있습니다 - 에이전트는 그 Docusign에 서명할 수 없지만, 사용자는 그것이 존재한다는 것을 알아야 합니다.
2. 질문 (Question)
에이전트의 차단을 해제하는 데 도움이 되도록 사용자에게 질문합니다. 에이전트는 일부 조치를 취하려고 할 수 있지만, 관련 정보가 부족하여 어떻게 하는 것이 가장 좋은지 불확실합니다. 환각을 일으키거나 추측하는 대신, 에이전트가 인간에게 무엇을 해야 할지 물어보게 합니다.
예시: 이메일 어시스턴트의 맥락에서, 에이전트가 컨퍼런스에 참석하고 싶은지 물어보는 것일 수 있습니다. 프롬프트에 컨퍼런스 선호도에 대한 지침이 없다면, 에이전트가 그것을 알 방법이 없습니다. 인간 EA는 나에게 물어볼 것이고, 에이전트 EA도 그래야 합니다.
3. 검토 (Review)
에이전트가 취하려는 조치를 검토합니다. 일부 조치는 “위험”하기 때문에 에이전트가 취하려는 모든 조치에 대해 검토를 하드코딩하는 것이 가치가 있을 수 있습니다. 인간은 조치를 승인하거나, 직접 편집하거나, 에이전트에게 어떻게 변경해야 하는지 직접 피드백을 줄 수 있습니다.
예시: 이메일 어시스턴트의 맥락에서, 발신 이메일일 수 있습니다. 에이전트가 초안을 작성할 수 있지만, 사용자가 승인하거나, 메시지 내용을 직접 편집하거나, 특정 방식으로 수정하도록 에이전트에게 지시해야 합니다.
Human-in-the-loop의 중요성
우리는 이 human-in-the-loop 구성 요소가 앰비언트 에이전트에 세 가지 주요 이점을 제공한다고 생각합니다:
1. 위험 감소
Human-in-the-loop는 위험을 낮춥니다. 에이전트가 백그라운드에서 완전히 자율적으로 실행되는 경우, 실수를 할 수 없습니다. 특정 조치(데이터베이스 업데이트, 중요한 클라이언트에게 이메일 보내기 등)를 취하도록 허용하기 전에 에이전트를 엄청나게 신뢰해야 합니다. Human-in-the-loop를 사용하면 이러한 조치를 쉽게 게이트하고 명시적인 인간 승인을 요구할 수 있습니다. 이렇게 하면 잘못된 이메일이 전송되지 않도록 확신할 수 있습니다.
2. 인간 커뮤니케이션 모방
Human-in-the-loop는 인간이 소통하는 방식을 모방합니다. 다른 사람과 함께 일하는 중요한 부분은 그들과 소통하는 것입니다. 불확실할 때 질문하고, 아이디어를 공유합니다. 에이전트인 “동료”가 있다면, 유사한 패턴으로 소통하게 하면 사용자 신뢰를 구축하고 따라서 채택을 촉진합니다.
예시: Devin과 같은 것을 고려해보세요. 사용자가 Devin과 상호 작용하기 위해 선택한 주요 인터페이스 중 하나는 Slack입니다. 그곳이 우리가 인간 개발자와 상호 작용하는 곳인데, 왜 AI 개발자와 그런 식으로 상호 작용하지 말아야 할까요? 커뮤니케이션은 중요합니다.
3. 장기 메모리 및 학습 강화
Human-in-the-loop는 장기 메모리와 학습을 강화합니다. 우리는 AI 에이전트의 핵심 부분이 시간이 지남에 따라 학습하고 인간 사용자와 더 잘 정렬하는 능력이라고 강력히 믿습니다. 이러한 정렬이 일어나기 위해서는 어떤 형태의 사용자 피드백이 필요합니다. 이 human-in-the-loop 구성 요소가 이 피드백을 제공합니다.
Agent Inbox
우리는 에이전트가 언제 인간과 소통해야 하는지(알림, 질문, 검토)에 대해 이야기했지만, 어떻게 해야 하는지에 대해서는 이야기하지 않았습니다.
앰비언트 에이전트를 실험할 때 처음에는 Slack으로 시작했습니다. 이것의 주요 이점은 우리가 일상 업무를 위해 이미 모두 Slack에 있기 때문에 우리의 주의를 끌고 인간 대 인간 커뮤니케이션과 중앙 집중화하는 효율적인 방법이라는 것입니다.
Slack의 단점은 모든 알림을 추적하기 쉽다는 것입니다. 몇 개에 응답하지 않으면 Slack 알림의 백로그가 쌓입니다. Slack 채널(또는 DM)은 탐색하기 가장 쉽지 않습니다. 또한 에이전트와 소통하는 방법에 제약이 있습니다 - 쉽게 메시지를 보낼 수 있지만 다른 것은 조금 더 까다롭습니다.
Agent Inbox의 개념
우리는 “Agent Inbox”라고 부르는 것으로 이동했습니다. 이것은 앰비언트 에이전트와 상호 작용하기 위한 새로운 UX입니다. 이메일 받은 편지함과 고객 지원 티켓팅 시스템의 조합을 모델로 합니다.
주요 특징:
- 모든 열린 커뮤니케이션 표시: 사용자와 에이전트 간의 모든 열린 커뮤니케이션 라인을 표시하여 미해결 조치를 쉽게 추적할 수 있습니다
- 독립적인 UI: 사용자 피드백을 더 쉽게 캡처할 수 있는 패널, 버튼 또는 기타 UI 기능을 쉽게 추가할 수 있습니다
- 우선순위 정렬: 현재 항목은 시간순으로 정렬되지만, 향후에는 우선순위에 따라 정렬할 수 있습니다
- 멀티플레이어 지원: 현재 이 받은 편지함은 단일 플레이어이지만, 향후에는 어떤 항목이 사용자에게 할당되었는지 다른 사람에게 할당되었는지 확인할 수 있습니다
참고: 에이전트 받은 편지함의 오픈 소스 구현은 목요일에 출시될 예정입니다.
LangGraph가 Ambient Agents에 적합한 이유
앰비언트 에이전트를 구축하면서, LangGraph가 이러한 유형의 에이전트를 지원할 수 있도록 했습니다. LangGraph(및 LangGraph Platform)가 가지고 있는 몇 가지 주요 특성이 있으며, 이는 직접 구축하고 싶지 않을 것입니다:
1. 내장 지속성 레이어 (Persistence Layer)
LangGraph는 각 작업(또는 그래프의 노드) 사이에 에이전트의 상태를 저장하는 지속성 레이어로 지원됩니다. 이를 통해 에이전트는 본질적으로 “일시 중지”하고 사용자 피드백을 기다릴 수 있습니다. 이는 human-in-the-loop 상호 작용 패턴뿐만 아니라 단기 대화 메모리를 가능하게 하는 데 중요합니다.
2. 내장 Human-in-the-loop 지원
LangGraph는 human-in-the-loop 패턴을 기본적으로 지원합니다. 내장 지속성 레이어가 큰 부분이지만, 최근 엔드 유저와 통신하기 위한 새로운 내장 메서드인 “interrupt”도 추가했습니다.
3. 내장 장기 메모리 (Long-term Memory)
LangGraph는 내장 장기 메모리(본질적으로 의미 검색을 지원하는 네임스페이스 키-값 저장소)와 함께 제공됩니다. 이를 통해 에이전트가 human-in-the-loop 상호 작용 후 “메모리”를 쉽게 업데이트할 수 있습니다.
4. Cron Jobs
많은 앰비언트 에이전트는 새로운 이벤트를 확인하기 위해 일정에 따라 실행됩니다. LangGraph Platform에는 이를 지원하기 위한 내장 cron 작업이 제공됩니다.
AI 이메일 어시스턴트 구축
우리는 매일 사용하는 앰비언트 에이전트를 구축함으로써 LangGraph를 앰비언트 에이전트 구축에 적합하게 만들었습니다. 주요 에이전트 중 하나는 이메일 어시스턴트입니다. 지난 6개월 동안 나와 통신한 적이 있다면, AI 에이전트가 그 이메일을 작성했을 가능성이 높습니다(그리고 내가 무시했다면 - 그것은 확실히 AI 에이전트의 잘못입니다).
오늘 우리는 무료로 사용할 수 있는 호스팅 이메일 에이전트와 오픈 소스 프로젝트 모두로 이메일 어시스턴트를 출시합니다. 호스팅 이메일 에이전트가 앰비언트 에이전트를 쉽게 시도하고 경험하게 하고, 오픈 소스 버전이 이 새로운 디자인 패러다임의 참조 구현 역할을 하기를 바랍니다.
호스팅 이메일 어시스턴트
- Platform
- Instructions
- YouTube Walkthrough
오픈 소스 이메일 어시스턴트
- Code
- YouTube Walkthrough
주요 개념 요약
Ambient Agents의 핵심 특징
- 이벤트 기반 트리거: 인간의 명시적인 메시지 없이도 이벤트 스트림에 반응
- 동시 실행: 여러 에이전트가 동시에 실행 가능
- 선택적 자율성: 완전 자율이 아닌, 적절한 시점에 인간 개입 요청
Human-in-the-loop 패턴
| 패턴 | 목적 | 예시 |
|---|---|---|
| Notify | 중요 이벤트 알림 (조치 없음) | Docusign 도착 알림 |
| Question | 불확실한 상황에서 질문 | 컨퍼런스 참석 여부 확인 |
| Review | 위험한 조치 검토 및 승인 | 발신 이메일 검토 |
LangGraph의 지원 기능
- ✅ 지속성 레이어: 상태 저장 및 일시 중지
- ✅ Human-in-the-loop: Interrupt 메서드 지원
- ✅ 장기 메모리: 의미 검색 가능한 키-값 저장소
- ✅ Cron Jobs: 스케줄 기반 실행
관련 문서
에이전트 아키텍처
Human-in-the-loop
프로젝트
- Ambient Agents 프로젝트 - 이메일 어시스턴트 구현