AI 에이전트, 이제 작업 기억력 문제 해결!
LLM(Large Language Model) 기반 AI 에이전트가 복잡한 작업을 수행 시, 중간 단계를 잊어버리는 문제 발생
TodoWriteTool은 Spring AI 기반으로, LLM이 작업 계획을 생성, 추적, 업데이트하도록 지원하여 작업 누락 방지(Task Omission Prevention)
TodoWriteTool은 Claude Code의 TodoWrite를 참고하여 명시적인 작업 관리(Explicit Task Management)를 구현하며, 실시간 진행 상황 확인 가능
Spring AI Agentic Patterns 시리즈의 일부로, Agent Skills, AskUserQuestionTool과 함께 신뢰할 수 있는 AI 에이전트 구축을 지원
TodoWriteTool의 작동 원리
TodoWriteTool은 LLM이 복잡한 작업을 여러 단계로 분해하고, 각 단계를 추적하도록 설계되었다. LLM은 TodoWriteTool을 호출하여 초기 작업 생성, 진행 상황 업데이트, 새로운 작업 추가 등을 수행한다.
작업 상태(Task Status): 각 작업은 ID, 내용, 상태(대기, 진행 중, 완료)를 가지며, 단일 작업 동시 실행 제한(Single Task Concurrency)을 통해 순차적 실행 보장
Chat Memory 활용: TodoWriteTool은 Chat Memory를 활용하여 작업 목록 업데이트를 유지하고 LLM에 전달
ToolCallAdvisor: ToolCallAdvisor를 활성화하여 ChatModel의 도구 호출 기록을 Chat Memory에 저장
Spring AI 생태계와의 통합
TodoWriteTool은 Spring AI 생태계 내에서 Agent Skills, AskUserQuestionTool과 함께 사용되어 AI 에이전트의 신뢰성(Reliability)을 향상시킨다.
Agent Skills: 모듈형 기능을 제공하여 에이전트의 역량 확장
AskUserQuestionTool: 대화형 워크플로우를 통해 사용자 상호 작용 개선
Dependency 추가: Spring AI Agent Utils(0.4.0)를 통해 TodoWriteTool을 쉽게 프로젝트에 통합
Agent 설정: ChatClientBuilder를 사용하여 TodoWriteTool 및 ToolCallAdvisor를 설정, 대화 기록 관리(Conversation History Management)를 통해 작업 상태 유지
실제 구현 및 사용 방법
TodoWriteTool을 사용하기 위해서는 Spring AI 프로젝트에 의존성을 추가하고, 에이전트를 설정해야 한다. ChatClientBuilder를 통해 TodoWriteTool을 등록하고, ToolCallAdvisor를 설정하여 Chat Memory를 활용한다.
Dependency 추가: Maven 또는 Gradle을 사용하여 spring-ai-agent-utils 의존성 추가
Agent 설정: ChatClientBuilder를 사용하여 TodoWriteTool을 defaultTools로 추가하고, ToolCallAdvisor를 설정
Event-Driven Progress Updates: ApplicationEventPublisher를 사용하여 작업 진행 상황을 실시간으로 UI에 표시
TodoUpdateEvent: TodoUpdateEvent를 정의하고, TodoProgressListener를 통해 이벤트 수신 및 UI 업데이트
TodoWriteTool의 장점 및 한계
TodoWriteTool은 AI 에이전트가 복잡한 작업을 수행할 때 발생하는 작업 누락(Task Omission) 문제를 해결하고, 실시간 작업 추적(Real-time Task Tracking)을 가능하게 한다.
장점: 명시적인 작업 관리, 작업 진행 상황 가시성 확보, 디버깅 용이성
한계: Chat Memory에 의존, ToolCallAdvisor 설정 필요
LLM의 역할: LLM은 작업의 복잡성에 따라 TodoWriteTool 사용 여부를 자율적으로 결정
향후 과제: Hierarchical Sub-Agents를 활용한 멀티 에이전트 아키텍처 구축