홈으로 돌아가기

에이전트용 이벤트 소싱: AI 시스템의 선언적 조립

이 기사는 zymi 프레임워크 예시를 통해 멀티 에이전트 시스템에서 이벤트 소싱의 적용을 검토합니다. 선언적 접근 방식이 가변 상태 문제를 해결하고 재현성을 보장하며 LLM과의 통합을 단순화하는 방법을 보여줍니다. 구성 예시와 아키텍처적 이점이 제공됩니다.

가변 상태가 에이전트 시스템을 왜 망치는지 (그리고 이를 고치는 방법)
Advertisement 728x90

# 선언적 에이전트 구성: 이벤트 소싱이 가변 상태 문제를 해결하는 방법

LLM 기반의 현대 멀티에이전트 시스템은 근본적인 도전에 직면해 있습니다: 가변 상태를 통한 상태 관리는 불안정성과 디버깅의 골칫거리를 초래합니다. 해결책은 예상치 못한 곳에서 나옵니다—데이터 엔지니어링 관행입니다. 새로운 zymi 프레임워크는 dbt에서 익숙한 이벤트 소싱과 선언적 정의 원리를 적용해 신뢰할 수 있는 에이전트 지향 시스템을 구축합니다.

명령형 코드 대신 선언적 접근

LangGraph 같은 전통적인 프레임워크는 가변 상태를 통해 데이터를 처리하는 방법에 대한 세부 지침을 요구합니다. 이는 여러 심각한 문제를 일으킵니다:

  • 상태가 숨겨진 의존성으로 가득 찬 엉망진창이 됨
  • 모든 변경마다 수동 동기화가 필요
  • 디버깅이 프린트 로그를 뒤지는 고된 작업으로 변함

zymi는 패러다임을 뒤집습니다: YAML 설정 파일로 무엇을 해야 하는지 설명하면 엔진이 실행을 자동으로 처리합니다. 프로젝트 구조는 dbt 프로젝트를 그대로 따릅니다:

Google AdInline article slot
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}'

파이프라인은 의존성을 가진 단계로 에이전트를 연결합니다:

Google AdInline article slot
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와 다른 핵심은 가변 상태를 버리고 이벤트 소싱 아키텍처를 채택한 것입니다. 모든 상호작용은 암호화 검증된 체인에 불변 이벤트로 기록됩니다. 각 이벤트는 다음을 포함합니다:

  • 이전 이벤트의 해시 (체인 무결성 보장)
  • 작업 데이터
  • 타임스탬프
  • 이벤트 소스

이 모델은 세 가지 중요한 이점을 제공합니다:

Google AdInline article slot
  • 완전한 추적성 — 이벤트 체인으로부터 모든 결과를 재구성 가능
  • 내장된 감사 추적 — 모든 변경이 쉽게 기록됨
  • 작업 안전성 — 모니터가 실행 전에 의도를 평가

실행 로그의 한 조각:

#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

Advertisement 728x90

다음 읽기