Apache Burr: 신뢰할 수 있는 AI 에이전트 빌드 프레임워크
Apache Burr: Build reliable AI agents and applications
TL;DR Highlight
LangChain 같은 복잡한 프레임워크에 지친 개발자들을 위해 순수 Python으로 AI 에이전트와 상태 머신을 만들 수 있는 Apache 인큐베이팅 프레임워크다. 상태 관리, 관측성, Human-in-the-Loop 등을 DSL 없이 제공한다는 점이 특징이다.
Who Should Read
LangChain이나 LangGraph 같은 프레임워크의 복잡한 추상화에 불만을 느끼고 있는 AI 애플리케이션 개발자. 특히 상태 관리와 디버깅이 중요한 멀티에이전트 시스템이나 챗봇을 프로덕션에 배포하려는 백엔드 개발자.
Core Mechanics
- Apache Burr는 순수 Python 함수와 데코레이터만으로 AI 에이전트를 정의하는 프레임워크다. DSL이나 YAML 설정 없이, `@action` 데코레이터로 함수를 액션으로 등록하고 `ApplicationBuilder`로 전환(transition)을 선언하는 방식이다.
- 핵심 추상화는 `State` 객체다. 각 액션은 어떤 상태를 읽고(`reads`) 어떤 상태를 쓰는지(`writes`) 명시적으로 선언하며, 상태는 불변 방식으로 업데이트된다. 이 덕분에 상태 변화를 추적하고 특정 시점부터 재실행(replay)이 가능하다.
- 내장 UI를 통해 실시간으로 각 스텝의 상태 변화, 실행 흐름, 트레이스를 시각적으로 모니터링할 수 있다. 별도의 설정 없이 `.with_tracker('local')`만 추가하면 로컬에서 바로 관측성을 확보할 수 있다.
- Human-in-the-Loop 기능을 내장 지원한다. 실행 중 특정 스텝에서 일시 정지하고 인간의 입력을 기다릴 수 있어서, 승인 워크플로우나 대화형 에이전트 구현이 쉽다.
- 병렬 실행, 팬아웃/팬인(fan-out/fan-in), DAG(방향성 비순환 그래프) 구조를 지원하며, 서브 애플리케이션을 모듈처럼 조합해서 복잡한 멀티에이전트 시스템을 만들 수 있다.
- 상태를 디스크, 데이터베이스(PostgreSQL 등), 커스텀 백엔드에 자동으로 영속화(persist)할 수 있다. 앱이 중단되더라도 마지막 상태부터 재개할 수 있어서 장시간 실행되는 에이전트에 유용하다.
- OpenAI, Anthropic, LangChain, Hamilton, Haystack, Instructor, Pydantic, FastAPI, Streamlit 등 주요 LLM/서빙 도구와 통합된다. 특정 플랫폼에 종속되지 않는 것을 설계 목표로 내세우고 있다.
- 현재 Apache Incubating 프로젝트 상태이며, 커뮤니티 사용자들 사이에서 LangChain 대비 학습 곡선이 낮고 프로덕션 전환이 빠르다는 평가가 나오고 있다.
Evidence
- 에이전트 프레임워크 자체에 회의적인 시각도 있었다. 에이전트는 결국 '컨텍스트 빌드 → LLM 호출 → 툴 실행 → 결과 파싱'이 전부인데, 프레임워크의 추상화가 오히려 핵심 로직을 가리고 특정 방식에 묶이게 만든다는 지적이다. 에이전트별로 1:1로 코드를 짜는 게 더 유지보수하기 쉽다는 경험담이 공유됐다.
- 한 개발자는 Burr를 개인/업무 프로젝트에 실제 사용해봤다며 긍정적인 경험을 공유했다. 특히 Burr 상태 머신을 MCP(Model Context Protocol)로 마운트하는 도구(theodosia)를 직접 만들어서, 아무리 복잡한 상태 머신이라도 MCP 툴이 상태 머신 네비게이션으로 제한되도록 구현했다고 밝혔다.
- 코드 샘플을 보고 'LangGraph에 빌더 패턴 붙인 것 아니냐'는 반응이 있었다. 차별점이 랜딩 페이지에서 명확히 드러나지 않는다는 지적으로, 마케팅 카피가 수많은 에이전트 프레임워크 대비 무엇이 다른지를 더 명확히 설명해야 한다는 의견이었다.
- Python 데코레이터와 빌더 패턴 사용 방식에 대한 기술적 비판도 나왔다. 데코레이터는 캐싱처럼 '필터' 역할에만 써야지 플로우 제어나 등록 용도로 쓰면 안 된다는 의견과, 빌더 패턴은 Rust에서 키워드 인자가 없어서 쓰는 것인데 Python에서는 불필요하다는 주장이었다.
- LangChain에서 Burr로 전환한 사용자들의 긍정적 후기가 여럿 있었다. 한 Data Science Architect는 LangChain 파악하는 데 수일~수주 걸렸던 반면 Burr는 몇 시간 만에 시작할 수 있어서 팀 전체 코드베이스를 Burr로 전환했다고 밝혔다.
How to Apply
- LangChain이나 LangGraph 기반으로 챗봇이나 에이전트를 만들었는데 디버깅이 힘들거나 추상화가 너무 불투명하다고 느끼는 경우, Burr의 `@action` 데코레이터와 `State` 객체로 동일한 로직을 재작성해보면 각 스텝의 상태 변화를 명시적으로 추적할 수 있다.
- 장시간 실행되는 에이전트(예: 몇 시간 걸리는 리서치 에이전트)를 만들 때 `.with_tracker('local')` 또는 PostgreSQL 백엔드를 붙이면, 중간에 실패해도 마지막 상태부터 재개(resume)할 수 있어서 전체 재실행 비용을 줄일 수 있다.
- 승인이 필요한 자동화 워크플로우(예: AI가 코드 생성 후 사람이 검토하고 배포 승인)를 구현할 때 Human-in-the-Loop 기능을 활용하면, 특정 액션에서 실행을 일시 정지하고 외부 입력을 받아 재개하는 패턴을 별도 상태 저장 로직 없이 구현할 수 있다.
- MCP 기반 에이전트 환경에서 특정 스킬이나 워크플로우를 안정적으로 실행시키고 싶다면, 커뮤니티 기여 도구인 theodosia(https://github.com/msradam/theodosia)를 참고해서 Burr 상태 머신을 MCP로 노출하는 방식을 검토해볼 수 있다.
Code Example
from burr.core import action, State, ApplicationBuilder
# @action 데코레이터로 읽을 상태(reads)와 쓸 상태(writes)를 선언
@action(reads=["messages"], writes=["messages"])
def chat(state: State, llm_client) -> State:
response = llm_client.chat(state["messages"])
return state.update(
messages=[*state["messages"], response]
)
# ApplicationBuilder로 액션, 전환, 초기 상태, 트래커 설정
app = (
ApplicationBuilder()
.with_actions(chat)
.with_transitions(("chat", "chat")) # chat -> chat 루프
.with_state(messages=[]) # 초기 상태
.with_tracker("local") # 로컬 관측성 활성화
.build()
)
# halt_after로 종료 조건, inputs으로 외부 의존성 주입
app.run(halt_after=["chat"], inputs={"llm_client": client})Terminology
관련 논문
프로덕션 AI 에이전트를 GPT-5.6으로 마이그레이션: 2.2배 빠르고 27% 저렴
마케팅 웹사이트를 자동 생성하는 프로덕션 AI 에이전트를 Claude Opus 4.8에서 GPT-5.6 Sol로 전환한 실전 경험담으로, 단순 모델 교체가 아니라 eval 하네스, 툴 스키마, 캐싱, 추론 리플레이까지 손봐야 했던 과정을 구체적인 수치와 함께 정리했다.
xAI Grok Build CLI가 xAI 서버로 전송하는 데이터: 네트워크 레벨 분석
xAI의 공식 코딩 CLI 도구 Grok Build가 사용자 동의 없이 전체 Git 저장소와 .env 시크릿 파일을 xAI 서버로 업로드한다는 사실이 네트워크 트래픽 분석으로 밝혀졌다.
중요할 때 기억하라: Long-Horizon 에이전트를 위한 Proactive Memory Agent
LLM 에이전트가 긴 작업 중 중요한 정보를 잊어버리는 문제를 별도의 메모리 에이전트가 '적절한 타이밍에' 끼어들어 해결하는 방법
WebSwarm: 깊고 넓은 웹 검색을 위한 재귀적 Multi-Agent Orchestration
복잡한 웹 검색을 재귀적으로 분해하고 각 노드에 적합한 검색 모드를 동적으로 할당하는 멀티에이전트 프레임워크
웹 앱을 리버스 엔지니어링해서 AI Agent 도구로 자동 변환하기
로그인된 웹 앱의 API 호출을 브라우저에서 감시해 자동으로 MCP 도구로 변환하는 에이전트를 만들었다. 소스 코드나 공식 API 문서 없이도 Jira, Spotify 같은 서비스에 AI 어시스턴트를 붙일 수 있다.
FableCut – AI 에이전트가 조작할 수 있는 브라우저 기반 비디오 에디터 (zero deps)
타임라인 전체를 JSON 파일 하나로 표현하고 MCP/REST로 AI 에이전트가 직접 편집할 수 있는 브라우저 비디오 에디터로, Claude 같은 AI가 프롬프트 하나로 영상을 자동 컷편집하고 결과를 실시간으로 UI에 반영해준다.