Page History
...
1편의 물음표에서 시작한다 — “일반 LLM을 어떻게 일하는 에이전트로 바꿀 것인가?” ReAct 패턴과 Akka Become() 상태 머신이 만나는 자리. 작성일: 2026-04-13. 대상: 1편을 읽은 .NET / 서버 개발자.
0. 들어가며 — 1편의 물음표, 그 이후
1편에서 우리는 Akka.NET 액터 모델로 여러 AI CLI 터미널 사이의 통신 복잡성을 풀었다. 설계 → 구현 → 개선 → 테스트를 거치며 “사회자 LLM + 3개 Claude 터미널” 시나리오가 동작하는 것을 확인했다.
...
답은 ReAct 패턴 + Akka Become() 상태 머신에 있다. 이 글에서는 그 설계를 기술적으로 깊이 파고든다.
...
1. 일반 LLM은 왜 에이전트가 아닌가
1.1 동기 루프의 한계
현재 AgentWin의 RunFunctionCallLoopAsync는 다음과 같이 동작한다:
...
결론: 일반 LLM에 “기다림”과 “깨어남”을 가르치는 것이 에이전트화의 핵심이다.
...
2. ReAct — 추론과 행동의 합주
2.1 ReAct란 무엇인가
ReAct(Reasoning + Acting)는 Yao et al.(2022)이 제안한 패턴으로, LLM이 생각(Thought) → 행동(Action) → 관찰(Observation)을 반복하며 과제를 수행하는 구조다.
...
4. ReAct 액터 상태 머신 — 전체 설계
4.1 상태 전이 다이어그램
| Code Block | ||
|---|---|---|
| ||
UserInput / CompletionSignal
│
┌──────▼──────┐
┌────────│ Thinking │←────────────┐
│ │ (LLM 호출) │ │
│ └──────┬──────┘ │
│ │ │
│ ToolCalls? │ No ToolCalls? │
│ ┌───────────┼───────────┐ │
│ ▼ ▼ │
┌────┴────┐ ┌───────────┐ │
│ Acting │ │ Complete │ │
│(도구실행) │ │ (최종응답) │ │
└────┬────┘ └───────────┘ │
│ │
│ 즉시 결과? 비동기 대기? │
├─────────────┬───────────────────────┤
▼ ▼ │
Become(Thinking) ┌──────────┐ │
│ Waiting │──completion──┘
│(시그널대기)│
└────┬─────┘
│ timeout (30s)
▼
Become(Thinking)
"타임아웃됨, 현재 상태 확인" |
...
상태 | 진입 조건 | 수신 메시지 | 전이 |
|---|---|---|---|
Thinking | StartReAct / CompletionSignal / 도구결과 / timeout | — | LLM 호출 → ToolCalls 유무로 분기 |
Acting | Thinking에서 ToolCalls 있음 | — | 도구 실행 → 즉시결과면 Thinking, 비동기면 Waiting |
Waiting | Acting에서 비동기 도구 | CompletionSignal, TaskComplete, ReceiveTimeout | 시그널 → Thinking, 타임아웃 → Thinking |
Complete | Thinking에서 ToolCalls 없음 | — | 부모에게 결과 전송, 액터 대기 |
4.3 Waiting 상태가 풀어내는 것
Before (동기 루프):
| Code Block | ||
|---|---|---|
| ||
term_send("npm test") → "Sent to term-0" (즉시 반환)
→ LLM: "결과 확인해야지" → term_read × 12 (55초간 동일 데이터 반복)
→ 10라운드 소진 → 루프 종료 → 테스트 결과 누락 |
...
기술 | 역할 | 상태 |
|---|---|---|
ReAct Pattern | LLM의 추론-행동-관찰 루프 구조화 | 설계 완료, Phase 2 구현 예정 |
Akka.NET Become() | 상태 머신 런타임 전환, 스레드 안전 | Phase 2 핵심 |
Akka ReceiveTimeout | 비동기 대기 타임아웃, 교착 방지 | Phase 2 핵심 |
Akka Supervision | 자식 액터 장애 자동 복구 | 기존 적용, 확장 예정 |
세션 메모리 (Actor State) | 온디바이스 모델의 컨텍스트 보존 | 설계 완료, Phase 2와 통합 |
LM-Kit.NET | 온디바이스 추론 엔진 (gemma-4) | NuGet 설치 완료, Phase 4 |
ILlmProvider 추상화 | 원격/온디바이스 LLM 전환 투명화 | Phase 4 |
Akka.Persistence | 이벤트 소싱으로 상태 재생/복구 | 향후 검토 |
Akka Streams | LLM API 역압(backpressure) 제어 | 향후 검토 |
...
11. 마무리 — LLM에게 기다림을 가르치다
...





