> EulerAgent > 튜토리얼 > 패턴 > 패턴 02. 내장 패턴 실행 플레이북 — 4가지 패턴 ...

패턴 02. 내장 패턴 실행 플레이북 — 4가지 패턴 완전 가이드

학습 목표

이 튜토리얼을 마치면 다음을 할 수 있습니다.

사전 준비

# 에이전트 확인
euleragent agent list

# 내장 패턴 목록 확인
euleragent pattern list

패턴 1: report.evidence — 증거 기반 보고서 작성

패턴 설명

웹 검색으로 증거를 수집하고, 초안을 작성하고, Judge로 품질을 평가하는 패턴입니다. 검색 단계에서 HITL 승인이 발생합니다.

노드 흐름도

┌─────────────────────────────────────────────────────────────────┐
│ report.evidence 패턴 흐름                                        │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [outline]                                                      │
│     │ 보고서 개요 작성 (llm/execute)                              │
│     │ when: true                                                │
│     ▼                                                           │
│  [gather]  ◄── HITL PAUSE (web.search 승인 필요)                │
│     │ 웹 검색 제안 생성 (llm/plan, force_tool=web.search)         │
│     │ when: approvals_resolved                                  │
│     ▼                                                           │
│  [draft]                                                        │
│     │ 수집된 증거로 초안 작성 (llm/execute)                        │
│     │ when: true                                                │
│     ▼                                                           │
│  [evaluate] ──────────────── when: judge.route == finalize ─────┐
│     │ 품질 평가 (judge/evaluator_v1)                             │
│     │ when: judge.route == revise                               │
│     ▼                                                           │
│  [revise]                                                       │
│     │ 초안 개선 (llm/execute)                                    │
│     │ when: true                                                │
│     └────────────────────────► [evaluate] (루프, max: 3회)       │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ [FINALIZE]  report.md 저장                               │◄──┘
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

단계 1: 패턴 검증

euleragent pattern validate report.evidence

예상 출력:

Validating pattern: report.evidence

  Stage 1 (Schema)      PASS
  Stage 2 (Structural)  PASS
  Stage 3 (IR Analysis) PASS

Validation complete: 0 errors, 0 warnings

단계 2: 패턴 실행

euleragent pattern run report.evidence my-agent \
  --task "LangChain, CrewAI, AutoGen 경쟁사 분석 보고서 작성" \
  --project default

예상 출력 (gather 노드에서 pause):

[run:a3f2b1c0] Starting pattern: report.evidence
[run:a3f2b1c0] Agent: my-agent | Task: LangChain, CrewAI, AutoGen 경쟁사 분석...

  ✓ outline      Completed — 보고서 개요 6개 섹션 생성
  ⏸ gather       PAUSED — Waiting for HITL approval

Approval required. Run the following to review:
  euleragent approve list --run-id a3f2b1c0

Resume after approval:
  euleragent pattern resume a3f2b1c0 --execute

단계 3: 승인 항목 확인

euleragent approve list --run-id a3f2b1c0

예상 출력:

Pending Approvals for run: a3f2b1c0
─────────────────────────────────────────────────
Node: gather

  #1  web.search  "LangChain framework features 2024"
  #2  web.search  "CrewAI multi-agent framework overview"
  #3  web.search  "AutoGen Microsoft agent framework comparison"
  #4  web.search  "AI agent framework benchmark 2024"
  #5  web.search  "LangChain vs CrewAI vs AutoGen comparison"

5 tool calls pending approval.

단계 4: 일괄 승인 및 실행

euleragent approve accept-all --run-id a3f2b1c0 --execute

예상 출력:

Accepted 5 tool calls for run: a3f2b1c0
Executing approved tool calls...

  web.search "LangChain framework features 2024"          OK (12 results)
  web.search "CrewAI multi-agent framework overview"       OK (8 results)
  web.search "AutoGen Microsoft agent framework comparison" OK (11 results)
  web.search "AI agent framework benchmark 2024"           OK (9 results)
  web.search "LangChain vs CrewAI vs AutoGen comparison"   OK (15 results)

All tool calls executed. Resuming pattern run...

단계 5: 패턴 재개

euleragent pattern resume a3f2b1c0 --execute

예상 출력:

[run:a3f2b1c0] Resuming from: gather → draft

  ✓ gather       Completed — 5 web searches executed
  ✓ draft        Completed — 2,847 words draft generated
  ✓ evaluate     Completed — score: 0.78 → route: revise
  ✓ revise       Completed — draft improved, added citations
  ✓ evaluate     Completed — score: 0.91 → route: finalize
  ✓ finalize     Completed — report.md saved

Run a3f2b1c0 completed successfully.
Artifact: .euleragent/runs/a3f2b1c0/artifacts/report.md

단계 6: 결과물 확인

# 아티팩트 경로
cat .euleragent/runs/a3f2b1c0/artifacts/report.md

# 실행 로그 확인
euleragent logs --run-id a3f2b1c0

# 이벤트 스트림 확인
cat .euleragent/runs/a3f2b1c0/pattern_events.jsonl | head -20

아티팩트 디렉토리 구조:

.euleragent/runs/a3f2b1c0/
├── input.json              # 실행 입력 (task, agent, pattern)
├── messages.jsonl          # 전체 LLM 메시지 이력
├── tool_calls.jsonl        # 모든 도구 호출 기록
├── approvals.jsonl         # HITL 승인 기록
├── pattern_events.jsonl    # 패턴 상태 전환 이벤트
└── artifacts/
    └── report.md           # 최종 결과물

패턴 2: code.tdd — 테스트 주도 개발

패턴 설명

설계 → 테스트 작성(HITL) → 구현 → 테스트 실행(HITL) → 평가 → 수정/완료 흐름으로 TDD를 구현합니다. 파일 쓰기와 쉘 실행에 HITL이 발생합니다.

노드 흐름도

┌─────────────────────────────────────────────────────────────────┐
│ code.tdd 패턴 흐름                                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [design]                                                       │
│     │ API 설계 및 테스트 케이스 계획 (llm/execute)                  │
│     │ when: true                                                │
│     ▼                                                           │
│  [write_tests]  ◄── HITL PAUSE (file.write 승인 필요)           │
│     │ 테스트 파일 작성 제안 (llm/plan, force_tool=file.write)      │
│     │ when: approvals_resolved                                  │
│     ▼                                                           │
│  [implement]                                                    │
│     │ 구현 코드 작성 (llm/execute)                                │
│     │ when: true                                                │
│     ▼                                                           │
│  [run_tests]  ◄── HITL PAUSE (shell.exec 승인 필요)             │
│     │ 테스트 실행 제안 (llm/plan, force_tool=shell.exec)          │
│     │ when: approvals_resolved                                  │
│     ▼                                                           │
│  [evaluate] ─────────────── when: judge.route == finalize ──────┐
│     │ 코드 품질 평가 (judge/evaluator_v1)                         │
│     │ when: judge.route == fix                                  │
│     ▼                                                           │
│  [fix]                                                          │
│     │ 버그 수정 (llm/execute)                                    │
│     └────────────────────────► [run_tests] (루프, max: 3회)      │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ [FINALIZE]  implementation.py + tests.py 저장            │◄──┘
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

단계 1: 검증 및 실행

euleragent pattern validate code.tdd

euleragent pattern run code.tdd my-agent \
  --task "Python으로 add(a, b) 함수 TDD로 구현. 엣지 케이스(None, 문자열, 오버플로우) 포함." \
  --project default

예상 출력 (write_tests에서 첫 번째 pause):

[run:b7e4d2f1] Starting pattern: code.tdd

  ✓ design        Completed — API spec and 8 test cases planned
  ⏸ write_tests   PAUSED — Waiting for HITL approval (file.write)

Approval required:
  euleragent approve list --run-id b7e4d2f1

단계 2: 테스트 파일 작성 승인

euleragent approve list --run-id b7e4d2f1

예상 출력:

Pending Approvals for run: b7e4d2f1
─────────────────────────────────────────────────
Node: write_tests

  #1  file.write  path=tests/test_calculator.py
      Content preview:
      import pytest
      from calculator import add

      def test_add_integers():
          assert add(1, 2) == 3

      def test_add_with_none():
          with pytest.raises(TypeError):
              add(None, 1)
      [... 47 more lines]

1 file write pending approval.
euleragent approve accept-all --run-id b7e4d2f1 --execute
euleragent pattern resume b7e4d2f1 --execute

두 번째 pause (run_tests에서):

[run:b7e4d2f1] Resuming from: write_tests → implement

  ✓ write_tests   Completed — tests/test_calculator.py written
  ✓ implement     Completed — calculator.py implemented
  ⏸ run_tests     PAUSED — Waiting for HITL approval (shell.exec)

단계 3: 테스트 실행 승인

euleragent approve list --run-id b7e4d2f1
  #1  shell.exec  cmd="python -m pytest tests/test_calculator.py -v"
                  cwd="./"

1 shell command pending approval.
euleragent approve accept-all --run-id b7e4d2f1 --execute
euleragent pattern resume b7e4d2f1 --execute

예상 최종 출력:

  ✓ run_tests     Completed — pytest: 8 passed, 0 failed
  ✓ evaluate      Completed — score: 0.92 → route: finalize
  ✓ finalize      Completed

Artifacts:
  .euleragent/runs/b7e4d2f1/artifacts/implementation.py
  .euleragent/runs/b7e4d2f1/artifacts/tests.py

패턴 3: ops.triage — 운영 티켓 분류

패턴 설명

운영 티켓을 분류하고, 해결책 초안을 작성하고(HITL), 품질을 평가하는 짧고 빠른 패턴입니다. 웹 검색 없이 LLM 지식만으로 동작합니다.

노드 흐름도

┌─────────────────────────────────────────────────────────────────┐
│ ops.triage 패턴 흐름                                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [classify]                                                     │
│     │ 티켓 분류 및 우선순위 결정 (llm/execute)                     │
│     │ when: true                                                │
│     ▼                                                           │
│  [draft]  ◄── HITL PAUSE (file.write 승인 필요)                 │
│     │ 해결책 초안 작성 (llm/plan, force_tool=file.write)          │
│     │ when: approvals_resolved                                  │
│     ▼                                                           │
│  [evaluate] ──────────── when: judge.route == finalize ─────────┐
│     │ 해결책 품질 평가 (judge/evaluator_v1)                       │
│     │ when: judge.route == revise                               │
│     ▼                                                           │
│  [revise]                                                       │
│     │ 해결책 개선 (llm/execute)                                  │
│     └────────────────────────► [evaluate] (루프, max: 2회)       │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ [FINALIZE]  triage_report.md 저장                        │◄──┘
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

단계 1: 검증 및 실행

euleragent pattern validate ops.triage

euleragent pattern run ops.triage my-agent \
  --task "고객 지원 티켓: 로그인 타임아웃 오류 발생. 사용자 보고: '30분마다 자동 로그아웃됨, 업무 중단'. 시스템: Django + Redis 세션." \
  --project default

예상 출력 (draft에서 pause):

[run:c1a8e3b5] Starting pattern: ops.triage

  ✓ classify      Completed
                  Priority: HIGH | Category: Authentication/Session
                  Impact: Medium (multiple users affected)
  ⏸ draft         PAUSED — Waiting for HITL approval (file.write)

단계 2: 초안 파일 승인

euleragent approve list --run-id c1a8e3b5
  #1  file.write  path=triage/login_timeout_resolution.md
      Content preview:
      # 티켓 해결책: 로그인 타임아웃 오류

      ## 원인 분석
      Django 세션 타임아웃 설정이 기본값(30분)으로 설정되어 있음
      Redis 세션 백엔드 연결 불안정 가능성

      ## 즉시 조치
      1. settings.py SESSION_COOKIE_AGE 값 확인
      [... 32 more lines]
euleragent approve accept-all --run-id c1a8e3b5 --execute
euleragent pattern resume c1a8e3b5 --execute

예상 최종 출력:

  ✓ draft         Completed — triage/login_timeout_resolution.md written
  ✓ evaluate      Completed — score: 0.89 → route: finalize
  ✓ finalize      Completed

Artifact: .euleragent/runs/c1a8e3b5/artifacts/triage_report.md
Run time: 47 seconds

패턴 4: research.broad_to_narrow — 광범위→심층 연구

패턴 설명

먼저 넓게 조사하고(web.search), 주제를 클러스터링하고, 갭을 찾아 심층 조사하고, 종합하는 연구 패턴입니다. Judge가 더 좁은 조사가 필요하면 narrow_search로 다시 보냅니다.

노드 흐름도

┌─────────────────────────────────────────────────────────────────┐
│ research.broad_to_narrow 패턴 흐름                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [broad_search]  ◄── HITL PAUSE (web.search, 5개 이상)          │
│     │ 광범위 웹 검색 (llm/plan, force_tool=web.search)            │
│     │ when: approvals_resolved                                  │
│     ▼                                                           │
│  [cluster_gaps]                                                 │
│     │ 주제 클러스터링, 갭 식별 (llm/execute)                       │
│     │ when: true                                                │
│     ▼                                                           │
│  [narrow_search]  ◄── HITL PAUSE (web.search, 갭 집중)    ◄──────┐
│     │ 갭 대상 심층 검색 (llm/plan, force_tool=web.search)          │
│     │ when: approvals_resolved                                  │
│     ▼                                                           │
│  [synthesize]                                                   │
│     │ 연구 결과 종합 (llm/execute)                                │
│     │ when: true                                                │
│     ▼                                                           │
│  [evaluate] ───── when: judge.route == finalize ────────────────┐
│     │ 연구 완결성 평가 (judge/evaluator_v1)                       │
│     ├── when: judge.route == narrow_search ────────────────────►┘
│     │ (더 좁은 조사 필요)                                         │
│     │ when: judge.route == refine                               │
│     ▼                                                           │
│  [refine]                                                       │
│     │ 종합문 개선 (llm/execute)                                  │
│     └────────────────────────► [evaluate] (루프, max: 3회)       │
│                                                                 │
│  ┌──────────────────────────────────────────────────────────┐   │
│  │ [FINALIZE]  research_report.md 저장                      │◄──┘
│  └──────────────────────────────────────────────────────────┘   │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

단계 1: 검증 및 실행

euleragent pattern validate research.broad_to_narrow

euleragent pattern run research.broad_to_narrow my-agent \
  --task "AI 에이전트의 장기기억 메커니즘 연구. RAG, 벡터 DB, 메모리 압축, 에피소딕 메모리를 포함할 것." \
  --project default

예상 출력 (broad_search에서 첫 pause):

[run:d4f9c2a7] Starting pattern: research.broad_to_narrow

  ⏸ broad_search  PAUSED — Waiting for HITL approval (web.search × 7)

단계 2: 넓은 검색 승인

euleragent approve list --run-id d4f9c2a7
  #1  web.search  "AI agent long-term memory mechanisms 2024"
  #2  web.search  "RAG retrieval augmented generation agent memory"
  #3  web.search  "vector database agent memory LlamaIndex LangChain"
  #4  web.search  "episodic memory artificial intelligence agents"
  #5  web.search  "memory compression summarization LLM agents"
  #6  web.search  "agent memory benchmark evaluation"
  #7  web.search  "cognitive architecture memory AI 2024"

7 tool calls pending approval.
euleragent approve accept-all --run-id d4f9c2a7 --execute
euleragent pattern resume d4f9c2a7 --execute

narrow_search에서 두 번째 pause:

  ✓ broad_search  Completed — 7 searches, 73 results collected
  ✓ cluster_gaps  Completed — 4 clusters, 3 gaps identified
                  Gaps: [메모리 압축 알고리즘 구체적 비교, 실시간 메모리 업데이트, 멀티에이전트 메모리 공유]
  ⏸ narrow_search PAUSED — Waiting for HITL approval (web.search × 5)
euleragent approve accept-all --run-id d4f9c2a7 --execute
euleragent pattern resume d4f9c2a7 --execute

예상 최종 출력:

  ✓ narrow_search Completed — 5 targeted searches
  ✓ synthesize    Completed — 4,312 words synthesis generated
  ✓ evaluate      Completed — score: 0.88 → route: finalize
  ✓ finalize      Completed

Artifact: .euleragent/runs/d4f9c2a7/artifacts/research_report.md

스트리밍 모드 실행

--stream 플래그를 사용하면 각 노드의 진행 상황을 실시간으로 확인할 수 있습니다.

euleragent pattern run research.broad_to_narrow my-agent \
  --task "AI 에이전트의 장기기억 메커니즘 연구" \
  --project default \
  --stream

스트리밍 출력 예시:

[event] pattern.start  {pattern: research.broad_to_narrow, run_id: e5a1d3c9}
[event] node.start     {node: broad_search, kind: llm}
[event] node.hitl      {node: broad_search, pending: 7}
[event] node.pause     {node: broad_search, reason: hitl_pending}
...
[event] hitl.resolved  {node: broad_search, accepted: 7, rejected: 0}
[event] node.resume    {node: broad_search}
[event] tool.call      {tool: web.search, query: "AI agent long-term memory..."}
[event] tool.result    {tool: web.search, results: 12}
...
[event] node.complete  {node: broad_search}
[event] edge.traverse  {from: broad_search, to: cluster_gaps, when: approvals_resolved}
[event] node.start     {node: cluster_gaps, kind: llm}

공통 운영 명령

run-id 확인

# 최근 실행 목록
euleragent runs list

# 특정 run 상태 확인
euleragent runs status <run-id>

# pause된 run 목록만
euleragent runs list --status paused

개별 승인/거절

전체 일괄 승인 대신 개별 처리:

# 특정 항목 수락
euleragent approve accept --run-id <id> --item 1 --item 3

# 특정 항목 거절 (사유 포함)
euleragent approve reject --run-id <id> --item 2 --reason "관련성 낮은 쿼리"

# 수락 후 즉시 실행
euleragent approve accept --run-id <id> --item 1 --execute

실행 취소

euleragent runs cancel <run-id>

흔한 오류와 해결법

오류 1: Agent not found

Error: Agent 'my-agent' not found in workspace

해결: euleragent agent new my-agent로 에이전트를 먼저 생성합니다.

오류 2: run-id expired

Error: Run 'a3f2b1c0' not found or expired

해결: euleragent runs list로 활성 run 목록을 확인합니다. 실행이 너무 오래 pause 상태면 만료될 수 있습니다.

오류 3: resume에 --execute 없이 실행

euleragent pattern resume a3f2b1c0
Run a3f2b1c0 is ready to resume. Add --execute to actually run.
(Dry-run mode: showing what would happen next)

Next step: draft → evaluate (when: true)

--execute 없이 실행하면 dry-run 모드로 동작합니다. 실제 실행하려면 --execute를 추가하세요.

오류 4: 이미 완료된 run을 resume

Error: Run 'a3f2b1c0' is already in 'completed' state. Cannot resume.

해결: 새 실행을 시작하거나 euleragent runs list로 상태를 확인합니다.


다음 단계

4가지 내장 패턴을 모두 실행해봤습니다. 이제 직접 패턴을 만들어볼 차례입니다.

← 이전 목록으로 다음 →