Zpět na domů

Event sourcing pro agenty: deklarativní sestava systémů AI

Článek rozebírá použití event sourcing v multiagentních systémech na příkladu frameworku zymi. Je ukázáno, jak deklarativní přístup řeší problém mutable state, zajišťuje reprodukovatelnost a zjednodušuje integraci s LLM. Jsou uvedeny příklady konfigurací a architektonické výhody.

Proč mutable state ničí vaše agent-systémy (a jak to opravit)
Advertisement 728x90

# Deklarativní sestava agentů: jak event sourcing řeší problém mutable state

Současné multiagentní systémy založené na LLM čelí zásadnímu problému: správa stavu prostřednictvím mutable state vede k nestabilitě a složitosti ladění. Řešení bylo nalezeno na nečekaném místě — v přístupech data engineering. Nový framework zymi aplikuje principy event sourcing a deklarativního popisu, známé z dbt, pro budování spolehlivých systémů orientovaných na agenty.

Deklarativní přístup místo imperativního kódu

Tradiční frameworky jako LangGraph vyžadují podrobný popis jak zpracovávat data prostřednictvím měnitelného stavu. To vytváří několik kritických problémů:

  • State se stává „skládkou" s nejasnými závislostmi
  • Každá změna vyžaduje ruční synchronizaci
  • Ladění se mění v rutinu hledání v print-logách

zymi mění paradigmu: popisujete co má být uděláno prostřednictvím YAML konfigurací a engine to zpracování provede sám. Struktura projektu připomíná dbt projekt:

Google AdInline article slot
zymi-research/
├── agents/
│  ├── researcher.yml
│  └── writer.yml
├── pipelines/
│  └── research.yml
├── tools/
└── project.yml

Každý agent je definován prostřednictvím deklarativního manifestu. Například výzkumný agent:

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

Nástroje jsou také popsány deklarativně. Implementace web_search prostřednictvím Tavily API:

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}'

Pipeline spojuje agenty do sekvence kroků se závislostmi:

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]

Spuštění pipeline přes CLI:

zymi run research -i topic="Event sourcing in AI"

Event sourcing: od neměnných událostí k reprodukovatelnosti

Klíčový rozdíl zymi oproti LangGraph je odmítnutí mutable state ve prospěch architektury event-sourced. Všechny interakce jsou zaznamenávány jako neměnné události v řetězci s kryptografickou verifikací. Každá událost obsahuje:

  • Hash předchozí události (zajišťuje integritu řetězce)
  • Data operace
  • Časovou značku
  • Zdroj události

Tento model přináší tři kritické výhody:

Google AdInline article slot
  • Plná sledovatelnost — jakýkoli výsledek lze obnovit z řetězce událostí
  • Přirozený audit — všechny změny jsou logovány bez dalšího úsilí
  • Bezpečnost operací — monitor hodnotí záměry před provedením

Podívejme se na fragment logu provedení:

#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

Zde je vidět, jak systém nejprve generuje záměr provést operaci (intention_emitted) a monitor rozhodne, zda akci povolit (intention_evaluated). Při pokusu o zápis do souboru monitor požádal o potvrzení — mechanismus, který není možný při přímé modifikaci state.

Výhody pro vývojáře a LLM

Deklarativní přístup přináší praktické výhody, zejména v éře generativního AI:

  • Snížení složitosti pro LLM — YAML konfigurace jsou jednodušší na generování než imperativní kód
  • Přísná schémata validace — JSON Schema zabraňuje chybám konfigurace
  • Paralelní provádění — engine automaticky určí nezávislé kroky
  • Reprodukovatelnost — jakýkoli běh lze opakovat prostřednictvím event logu

Experimenty ukazují, že generování pipelineů prostřednictvím LLM pro zymi vyžaduje o 30-40 % méně iterací než psaní ekvivalentního kódu na LangGraph. To je způsobeno:

  • Nepotřebou ruční správy stavu
  • Jasnými hranicemi odpovědnosti mezi komponentami
  • Statickou kontrolou konfigurací

Co je důležité

  • Deklarativnost místo imperativity — popis co udělat, ne jak, snižuje kognitivní zátěž
  • Event sourcing jako základ — neměnné události zajišťují reprodukovatelnost a bezpečnost
  • Integrace s vývojem LLM — strukturované konfigurace jsou snadněji generovány a opravovány AI
  • Kryptografická integrita — hash-chain zaručuje důvěryhodnost historie provedení
  • Monitorování záměrů — samostatná vrstva kontroly operací zabraňuje nežádoucím akcím

Framework zymi demonstruje, jak nápady z data engineering mohou vyřešit systémové problémy v oblasti programování orientovaného na agenty. Přechod od mutable state k event-sourced architektuře nejen zjednodušuje vývoj — vytváří zásadně nové možnosti pro kontrolu a analýzu chování AI agentů. Pro technické specialisty to znamená přechod od křehkých systémů k spolehlivým, sledovatelným řešením, kde každý krok provedení má jasný důkaz a reprodukovatelnost.

— Editorial Team

Advertisement 728x90

Číst dál