LangGraph 멀티에이전트 오케스트레이터 — supervisor가 과제를 분해하면 관점이 다른 리서처 3명이 한 superstep에서 동시에 조사하고, writer가 이어받아 초안을 쓰고, critic이 승인할 때까지 재작성 루프를 돕니다. 이 페이지는 아래 실행 한 번에서 자동 생성되었습니다.
리서처 3명은 순차 호출이 아니라 한 superstep에서 동시에 실행되고,
Annotated[list, operator.add] 리듀서가 노트를 합쳐 writer에게 넘깁니다.
critic의 조건부 엣지가 승인/재작성을 결정하며 라운드 상한으로 종료를 보장합니다.
과제: 사내 문의 응대 에이전트 도입 제안서 작성 — 포함: 도입 배경, 비용 추정, 보안 검토, 단계별 일정
1) researcher가 과제의 핵심 항목을 조사한다 2) writer가 조사 노트를 바탕으로 결과물을 작성한다 3) critic이 루브릭 충족 여부를 검수하고 미흡하면 재작성을 요청한다
- 도입 배경: 과제 요구사항 — 결과물에 반드시 다뤄야 함 - 비용 추정: 과제 요구사항 — 결과물에 반드시 다뤄야 함 - 보안 검토: 과제 요구사항 — 결과물에 반드시 다뤄야 함 - 단계별 일정: 과제 요구사항 — 결과물에 반드시 다뤄야 함
- 리스크 점검: 누락되기 쉬운 예외 상황과 실행 리스크를 결과물에 명시할 것
- 형식 점검: 섹션 헤더로 항목을 구분하고 결론 요약을 갖출 것
## 결과 보고 ### 도입 배경 도입 배경에 대한 구체적 계획과 근거를 정리했다. ### 비용 추정 비용 추정에 대한 구체적 계획과 근거를 정리했다. ### 보안 검토 보안 검토에 대한 구체적 계획과 근거를 정리했다. ### 단계별 일정 단계별 일정에 대한 구체적 계획과 근거를 정리했다. ### 리스크 점검 리스크 점검에 대한 구체적 계획과 근거를 정리했다. ### 형식 점검 형식 점검에 대한 구체적 계획과 근거를 정리했다. > 이전 실행에서 배운 것 반영: 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다.
APPROVE 루브릭 전 항목 충족. 교훈: 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다.
에이전트 간 모든 통신이 Envelope(sender, recipient, intent, content, ts) 봉투로
기록되어 전 hop을 재생할 수 있습니다. 관측·감사 레이어이며, 실제 데이터 전달은 그래프 state 채널이 담당합니다.
| 보낸 곳 | 받는 곳 | intent | 내용 |
|---|---|---|---|
| supervisor | → * | plan | 1) researcher가 과제의 핵심 항목을 조사한다 2) writer가 조사 노트를 바탕으로 결과물을 작성한다 3) critic이 루브릭 충족 여부를 검수하고 미흡하면 재작성을 요청한다 |
| researcher_requirements | → writer | notes | - 도입 배경: 과제 요구사항 — 결과물에 반드시 다뤄야 함 - 비용 추정: 과제 요구사항 — 결과물에 반드시 다뤄야 함 - 보안 검토: 과제 요구사항 — 결과물에 반드시 다뤄야 함 - 단계별 일정: 과제 요구사항 — 결과물에 반드시 다뤄야 함 |
| researcher_risks | → writer | notes | - 리스크 점검: 누락되기 쉬운 예외 상황과 실행 리스크를 결과물에 명시할 것 |
| researcher_structure | → writer | notes | - 형식 점검: 섹션 헤더로 항목을 구분하고 결론 요약을 갖출 것 |
| writer | → critic | draft | ## 결과 보고 ### 도입 배경 도입 배경에 대한 구체적 계획과 근거를 정리했다. ### 비용 추정 비용 추정에 대한 구체적 계획과 근거를 정리했다. ### 보안 검토 보안 검토에 대한 구체적 계획과 근거를 정리했다. ### 단계별 일정 단계별 일정에 대한 구체적 계… |
| critic | → writer | review | APPROVE 루브릭 전 항목 충족. 교훈: 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. |
| critic | → * | lesson | 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. |
critic이 승인하면 그때 얻은 '교훈'을 JSON으로 영속화하고, 다음 실행에서 writer 프롬프트에 자동 주입합니다. 같은 교훈이 반복되면 중복 저장 대신 강화 횟수를 올립니다.
| 교훈 | 강화 |
|---|---|
| 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. | 17회 강화 |
| 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. | 8회 강화 |
| 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. | 8회 강화 |
| 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. | 8회 강화 |
| 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. | 8회 강화 |
| 요구 항목을 섹션 헤더로 명시하면 누락이 줄어든다. | 8회 강화 |
오프라인에서 결정적으로 도는 6개 태스크 하네스입니다. 통과율은 모델 품질이 아니라 배선 회귀 신호입니다.
아래 변이 주입 표는 python -m tools.mutation_check가 실제로 측정해 커밋한
eval/mutation_results.json에서 렌더됩니다 — 구조 변이는 잡아내고, 관측 레이어 변이는 통과시키는
사각지대까지 그대로 공개합니다.
| 변이 | 통과율 | 검출 |
|---|---|---|
| baseline (no mutation) | 6/6 | BASELINE |
| drop fan-out edge (researcher_requirements removed) | 0/6 | DETECTED |
| drop note join (writer sees no notes) | 0/6 | DETECTED |
| no-op A2A envelope log | 6/6 | MISSED |
| block procedural-memory injection | 6/6 | MISSED |
| 태스크 | 결과 | 재작성 | 누락 항목 |
|---|---|---|---|
| proposal-helpdesk | PASS | 1 라운드 | — |
| release-note | PASS | 1 라운드 | — |
| incident-report | PASS | 1 라운드 | — |
| onboarding-doc | PASS | 1 라운드 | — |
| ab-test-plan | PASS | 1 라운드 | — |
| vendor-compare | PASS | 1 라운드 | — |
| 합계 | 6/6 |