채팅이 끝나면 AI 에이전트가 죽습니다. 그것이 진짜 아키텍처 버그입니다.
요약
현재 대부분의 AI 에이전트는 채팅 세션에 종속되어 세션 종료 시 컨텍스트가 소실되는 아키텍처적 한계를 가집니다. 진정한 에이전트는 모델과 분리된 지속 가능한 런타임을 통해 장기 실행 작업과 메모리를 관리해야 합니다.
핵심 포인트
- 에이전트는 채팅 턴이 아닌 지속 가능한 프로세스(Durable Process)로 설계되어야 함
- 모델은 판단을, 런타임은 연속성과 스케줄링을 담당하도록 분리해야 함
- 장기 실행 작업을 위해 크론 잡, 감시자, 목표 기반 메커니즘 등 영수증(증거)이 필요함
- 관찰 가능성(Observability)을 통해 백그라운드 자율성을 관리해야 함
대부분의 “AI 에이전트 (AI agents)”는 도구 호출 (tool calls) 기능이 포함된 채팅 세션입니다.
요청이 실행되는 동안에는 살아있는 것처럼 보입니다. 하지만 프로세스가 종료되고, 컨텍스트 (context)가 증발하면, “계속 지켜보고 있겠다”는 모든 약속은 조용히 허구가 되어버립니다.
모델 (model)이 문제인 경우는 드뭅니다. 계산 단위 (unit of computation)가 문제입니다.
만약 에이전트가 며칠에 걸쳐 관찰하고, 기억하고, 후속 조치를 취하거나 작업을 완료해야 한다면, 채팅 턴 (chat turn)이 그 생명 주기 (lifecycle)가 될 수는 없습니다. 그것은 지속 가능한 프로세스 (durable process)여야 합니다.
유용한 에이전트는 세 가지 다른 시계를 가집니다
장기 실행 작업은 보통 세 가지 범주로 나뉩니다:
| 의도 (Intent) | 기본 요소 (Primitive) | 예시 (Example) |
|---|---|---|
| 정해진 시간에 실행 | 크론 잡 (Cron job) | 주간 프로젝트 요약 전송 |
| ... |
이것들을 하나의 모호한 “백그라운드 에이전트 (background agent)” 추상화로 결합하고 싶은 유혹이 들겠지만, 이는 동작을 추론하기 더 어렵게 만듭니다.
크론 잡 (Cron job)은 결과물을 이해하는 척해서는 안 됩니다. 트리거 (trigger)는 채팅 루프 (chat loop) 내부에서 영원히 폴링 (poll)해서는 안 됩니다. 목표 (goal)가 생존하기 위해 정확한 타임스탬프 (timestamp)를 필요로 해서도 안 됩니다.
런타임 (runtime)이 이러한 보장 사항들을 소유해야 합니다.
모델은 교체 가능해야 합니다
지속 가능한 아키텍처는 챗봇보다는 운영 체제 (operating system) 프로세스에 더 가깝습니다:
Telegram / Discord / Terminal / Desktop
|
agent runtime
...
모델은 판단을 담당합니다. 런타임은 연속성을 담당합니다.
이러한 분리는 유용한 결과를 가져옵니다: 모델 백엔드 (model backend)를 변경하더라도 에이전트의 생명은 삭제되지 않습니다. Claude 세션, Codex 작업, 또는 OpenAI 에이전트 모두 동일한 스케줄링 (scheduling), 메모리 (memory), 도구 (tool), 그리고 프론트엔드 (frontend) 메커니즘 뒤에 위치할 수 있습니다.
“나중에 확인하겠습니다”에는 영수증이 필요합니다
에이전트는 동일한 턴 내에서 지속 가능한 무언가를 생성하지 않는 한, 미래의 작업을 약속해서는 안 됩니다.
그것은 다음과 같을 수 있습니다:
- 다음 실행 시간이 포함된 크론 레코드 (cron record);
- 조건이 있는 감독 대상 감시자 (supervised watcher);
- 백그라운드 실행이 다시 방문하게 될 목표 (goal).
지속성 있는 메커니즘 (persisted mechanism)이 없다면, “내일 후속 조치를 취하겠습니다”는 계획이 아닙니다. 그것은 생성된 대화 (generated dialogue)일 뿐입니다.
이것이 바로 로그(logs)와 작업 검사(task inspection)가 중요한 이유이기도 합니다. 관찰 가능성 (observability) 없는 백그라운드 자율성 (background autonomy)은 그저 유령이 들린 서버일 뿐입니다. 무엇이 실행되고 있는지, 왜 깨어났는지, 어떤 도구 (tools)를 사용했는지, 그리고 실패했는지 여부를 반드시 알아야 합니다.
프론트엔드 (Frontends)는 뇌가 아니라 입이어야 합니다
사용자들은 자연스럽게 여러 곳에서 동일한 어시스턴트를 사용하기를 원합니다. 만약 각 채팅 통합 (chat integration)이 각자의 메모리 (memory)와 스케줄링 (scheduling)을 소유하게 된다면, 이름만 같고 서로 단절된 여러 개의 어시스턴트를 갖게 될 것입니다.
더 나은 분리는 다음과 같습니다:
- 프론트엔드 (frontends)는 플랫폼 이벤트 (platform events)를 번역합니다.
- 코어 (the core)는 세션 (sessions)과 지속 가능한 상태 (durable state)를 소유합니다.
- 도구 (tools)는 기능 (capabilities)을 노출합니다.
- 백엔드 (backends)는 모델별 실행 (model-specific execution)을 제공합니다.
- 백그라운드 메커니즘 (background machinery)은 열려 있는 채팅과 무관하게 작업을 재개합니다.
이렇게 하면 Telegram, Discord, 터미널 (terminal), 또는 전화 앱 (phone app)은 동일한 시스템으로 들어가는 서로 다른 문이 됩니다.
우리는 우리가 원하던 런타임 (runtime)을 구축했습니다
Talon은 이 아이디어를 오픈 소스로 구현한 결과물입니다. 이는 다음과 같은 기능을 갖춘 셀프 호스팅 (self-hosted) TypeScript 에이전트 하네스 (agent harness)입니다:
- 지속적인 목표 (persistent goals), 크론 잡 (cron jobs), 그리고 조건 기반 트리거 (condition-driven triggers)
- 하트비트 (heartbeat) 및 메모리 통합 (memory-consolidation) 워커 (workers)
- Telegram, Discord, Teams, 터미널, 데스크톱, 그리고 모바일 프론트엔드
- Claude, Codex, OpenAI Agents, Kilo, 그리고 OpenCode 백엔드
- 로컬 및 원격 MCP 도구
- 검사를 위한 라이브 작업 테이블 (live task table) 및
/proc스타일의 파일 시스템 뷰 (filesystem views)
다음 명령어로 설치하세요:
npm install -g talon-agent
talon setup
talon start
저장소 주소는 github.com/dylanneve1/talon입니다.
만약 여러분이 데모보다 더 오래 생존해야 하는 어시스턴트를 구축하고 있다면, 이 아키텍처를 가져가거나 코드를 가져가십시오. 그리고 Talon이 유용하다면, 더 많은 빌더 (builders)들이 찾을 수 있도록 스타 (star)를 눌러주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기