# 선언적 에이전트 구성: 이벤트 소싱이 가변 상태 문제를 해결하는 방법
LLM 기반의 현대 멀티에이전트 시스템은 근본적인 도전에 직면해 있습니다: 가변 상태를 통한 상태 관리는 불안정성과 디버깅의 골칫거리를 초래합니다. 해결책은 예상치 못한 곳에서 나옵니다—데이터 엔지니어링 관행입니다. 새로운 zymi 프레임워크는 dbt에서 익숙한 이벤트 소싱과 선언적 정의 원리를 적용해 신뢰할 수 있는 에이전트 지향 시스템을 구축합니다.
명령형 코드 대신 선언적 접근
LangGraph 같은 전통적인 프레임워크는 가변 상태를 통해 데이터를 처리하는 방법에 대한 세부 지침을 요구합니다. 이는 여러 심각한 문제를 일으킵니다:
- 상태가 숨겨진 의존성으로 가득 찬 엉망진창이 됨
- 모든 변경마다 수동 동기화가 필요
- 디버깅이 프린트 로그를 뒤지는 고된 작업으로 변함
zymi는 패러다임을 뒤집습니다: YAML 설정 파일로 무엇을 해야 하는지 설명하면 엔진이 실행을 자동으로 처리합니다. 프로젝트 구조는 dbt 프로젝트를 그대로 따릅니다:
zymi-research/
├── agents/
│ ├── researcher.yml
│ └── writer.yml
├── pipelines/
│ └── research.yml
├── tools/
└── project.yml
각 에이전트는 선언적 매니페스트로 정의됩니다. 예를 들어 researcher 에이전트:
name: researcher
description: "Research agent — searches the web, scrapes pages, and stores findings in memory"
model: ${default_model}
system_prompt: |
You are a thorough research assistant. Your job is to find accurate,
up-to-date information on the given topic.
tools:
- web_search
- web_scrape
- write_memory
max_iterations: 15
도구들도 선언적으로 설명됩니다. Tavily API를 통한 web_search 구현:
name: web_search
description: "Search the web for information on a given query"
parameters:
type: object
properties:
query:
type: string
description: "Search query"
required: [query]
implementation:
kind: http
method: POST
url: "https://api.tavily.com/search"
headers:
Authorization: "Bearer ${env.TAVILY_API_KEY}"
body_template: '{"query": "${args.query}", "max_results": 5}'
파이프라인은 의존성을 가진 단계로 에이전트를 연결합니다:
name: research
steps:
- id: search_web
agent: researcher
task: "Search the web for information about: ${inputs.topic}"
- id: analyze
agent: researcher
task: "Analyze findings and store structured summary"
depends_on: [search_web]
- id: write_report
agent: writer
task: "Write report to ./output/report.md"
depends_on: [analyze]
CLI를 통해 파이프라인 실행:
zymi run research -i topic="Event sourcing in AI"
이벤트 소싱: 불변 이벤트에서 재현성으로
zymi가 LangGraph와 다른 핵심은 가변 상태를 버리고 이벤트 소싱 아키텍처를 채택한 것입니다. 모든 상호작용은 암호화 검증된 체인에 불변 이벤트로 기록됩니다. 각 이벤트는 다음을 포함합니다:
- 이전 이벤트의 해시 (체인 무결성 보장)
- 작업 데이터
- 타임스탬프
- 이벤트 소스
이 모델은 세 가지 중요한 이점을 제공합니다:
- 완전한 추적성 — 이벤트 체인으로부터 모든 결과를 재구성 가능
- 내장된 감사 추적 — 모든 변경이 쉽게 기록됨
- 작업 안전성 — 모니터가 실행 전에 의도를 평가
실행 로그의 한 조각:
#4 10:50:52.806 intention_emitted source=orchestrator
call_custom_tool data={"type":"CallCustomTool","data":{"tool_name":"web_search"}}
#5 10:50:52.806 intention_evaluated source=orchestrator
call_custom_tool -> approved
#49 11:20:15.321 intention_emitted source=orchestrator
write_file data={"path":"output/report.md"}
#50 11:20:15.322 intention_evaluated source=orchestrator
write_file -> requires_approval
이 로그는 시스템이 먼저 작업을 수행하려는 의도를 방출(intention_emitted)한 후 모니터가 이를 승인할지 결정(intention_evaluated)하는 과정을 보여줍니다. 파일 쓰기 시도에서 모니터가 승인을 요구한 것은 직접 상태 변형으로는 불가능한 안전 장치입니다.
개발자와 LLM을 위한 이점
선언적 접근은 생성 AI 시대에 실질적인 이점을 제공합니다:
- LLM의 복잡도 감소 — YAML 설정은 명령형 코드보다 생성하기 쉬움
- 엄격한 검증 스키마 — JSON Schema가 설정 오류 방지
- 병렬 실행 — 엔진이 독립 단계 자동 식별
- 재현성 — 이벤트 로그로부터 언제든 재실행 가능
실험 결과 zymi용 LLM 생성 파이프라인은 동등한 LangGraph 코드보다 30-40% 적은 반복으로 완성됩니다. 이는 다음에서 비롯됩니다:
- 수동 상태 관리 불필요
- 컴포넌트 간 명확한 책임 경계
- 정적 설정 검증
핵심 포인트
- 명령형 대신 선언적 — 어떻게가 아닌 무엇을 설명해 인지 부하 감소
- 이벤트 소싱을 기반으로 — 불변 이벤트가 재현성과 안전성 보장
- LLM 개발과의 통합 — 구조화된 설정이 AI 생성 및 개선에 용이
- 암호화 무결성 — 해시 체인이 실행 이력의 진위 보장
- 의도 모니터링 — 전용 레이어가 원치 않는 작업 차단
zymi 프레임워크는 데이터 엔지니어링 개념이 에이전트 지향 프로그래밍의 시스템적 도전을 어떻게 해결하는지 보여줍니다. 가변 상태에서 이벤트 소싱 아키텍처로 전환하는 것은 개발을 단순화할 뿐 아니라 AI 에이전트 행동 제어와 분석의 새로운 가능성을 열어줍니다. 기술 전문가에게 이는 취약한 시스템에서 검증 가능하고 재현 가능한 안정적 솔루션으로의 전환을 의미합니다. 모든 단계에 대한 입증 가능한 증거와 재현성이 있습니다.
— Editorial Team
아직 댓글이 없습니다.