Earendil, 내구성 있는 AI 에이전트용 하네스 Pi Durable과 Pi 1.0 공개
핵심 내용
Earendil이 크래시 복구형 AI 에이전트 하네스 Pi Durable과 코딩 에이전트 Pi 1.0을 공개했다.
자세히 보기
Earendil Engineering이 단일 사용자 원격 터미널 환경에 최적화된 코딩 에이전트 Pi 1.0과, 크래시 내구성을 갖춘 AI 에이전트를 위한 실험적 하네스 프레임워크 Pi Durable을 공개했다. Pi 1.0은 프로세스 종료 시 수동 재시작에 초점을 맞춘 반면, Pi Durable은 장시간 실행 및 장애 복구를 위한 견고한 인프라를 제공한다.
핵심 아키텍처 및 스토리지
Pi Durable 하네스는 Conversation(상호작용 기록)과 Tools(노트북이나 VM 등 환경에서 실행되는 작업)를 중심으로 설계되었으며, 모델 호출과 도구 실행 등 모든 연산은 Task로 취급된다.
- 경량 코드베이스: 테스트를 제외하고 약 15,000줄의 소스 코드로 구성되며, 스토리지 백엔드는 약 3,000줄이다.
- 스토리지 백엔드: Memory, SQLite, JSONL을 기본 지원한다. 인터페이스가 간결하여 Key-value 스토어나 Postgres용 구현이 가능하다.
- 런타임 유연성: 현재 JavaScript 런타임을 지원한다. SQLite/JSONL 백엔드는 Node API를 사용하지 않아 어댑터를 통해 Bun 및 Cloudflare Durable Objects에서 실행할 수 있다.
- 동시성 제어: 각 프로세스는 하나의 스토리지 인스턴스를 소유하며, 다른 클라이언트는 해당 프로세스에 연결한다.
내구성 및 크래시 복구
Pi Durable은 체크포인트 기능을 통해 장애 발생 후에도 에이전트가 작업을 재개할 수 있도록 보장한다.
- 체크포인트: 모든 실행 단계는 진행 전 진도를 저장한다. 프로세스가 죽으면 새 프로세스가 동일한 스토리지를 열고 미완료 작업을 찾아 마지막 체크포인트에서 재개한다.
- 작업 재개: 중단된 모델 요청은 재전송된다. 중단된 도구 호출은 안전할 경우 재실행되거나 모델에 보고된다.
- 정확히 한 번 제출:
requestId를 사용하여 제출이 정확히 한 번 처리되도록 보장하며, 재시도 시 원본 제출 내용을 반환한다. - 메모리 관리: 활성 대화 기록은 모델의 컨텍스트 윈도우로 제한되며 압축을 통해 요약된다. 이를 통해 수만 개의 메시지로 구성된 대화도 메모리에 저장할 수 있다.
동시성 및 확장
프레임워크는 블로킹 없이 여러 동시 대화를 지원하며 유연한 확장 시스템을 제공한다.
- 동시 대화: 하나의 하네스가 여러 대화를 실행할 수 있다. 대화는 부모 기록을 복사하지 않고도 역사상 임의의 지점에서 분기할 수 있다.
- 확장: 시스템 프롬프트, 도구, 훅, 작업의 묶음이다. 확장은 도구를 덮어쓰거나 시스템 프롬프트를 동적으로 수정할 수 있다.
- 훅: 모델 요청, 도구 호출, 압축에 개입할 수 있다.
beforeTool,afterTool,onYield같은 훅을 통해 인자 재작성, 호출 차단, 실행 유지가 가능하다. - 압축: 한계에 도달하면 컨텍스트를 자동으로 요약한다.
reserveTokens와backgroundTokens로 설정하여 컨텍스트 윈도우를 효율적으로 관리한다.
가변성 및 멀티플레이어 지원
Pi Durable은 동적 업데이트와 협업 상호작용을 허용한다.
- 가변 에이전트: 실행 중인 에이전트 코드를 변경할 수 있다. 동일한 이름의 대체 확장을 설치하면 이후 호출부터 에이전트가 업데이트되며, 기존 도구 호출은 이전 코드로 완료된다.
- 멀티플레이어: 여러 클라이언트가 동일한 대화에 연결할 수 있다. 클라이언트는 현재 보기와 이후 변경 사항을 수신하며, 늦은 참여와 재연결을 지원한다.
- 애플리케이션 상태: Todo나 계획 같은 상태는 문서로 저장되며, 일관성을 위해 대화 기록과 원자적으로 커밋된다.
가용성
Pi Durable은 현재 실험적이며 API 변경 가능성이 있다. npm 패키지 @earendil-works/pi-durable, @earendil-works/pi-ai, @earendil-works/chord를 통해 사용할 수 있다. 프로젝트는 부트스트래핑 편의성을 위해 TypeScript로 작성되었으며, 향후 Rust나 어셈블러로 포팅될 가능성도 배제하지 않았다.
이 한국어 요약은 AI가 자동으로 만들었습니다. 원문의 주장과 맥락은 원문에서 확인해 주세요. 저작권은 원저작자에게 있습니다.