기초적인 AI 에이전트 직접 만들기: 긴 작업 계획 (Long Task Planning)
요약
AI 에이전트가 길고 복잡한 작업을 수행할 수 있도록 '긴 작업 계획(Long Task Planning)' 능력을 부여하는 방법을 다룹니다. 스크래치패드와 할 일 목록(To-do list) 도구를 활용하여 에이전트의 사고 과정과 작업 상태를 관리하는 구현 가이드를 제공합니다.
핵심 포인트
- LLM의 대화형 특성으로 인한 장기 작업 수행의 한계 극복
- 스크래치패드를 통한 모델의 사전 계획 및 사고 과정 강제
- 할 일 목록을 활용한 작업 단계 분해 및 상태 추적
- 메모리 기반 도구 구현을 통한 효율적인 에이전트 설계
기초적인 AI 에이전트 직접 만들기 (Build A Basic AI Agent From Scratch) 시리즈의 이전 파트에서, 우리는 에이전트가 우리를 대신해 자율적으로 작동할 수 있도록 필수적인 도구(tools)들을 추가했습니다. 우리는 에이전트에게 파일을 찾고, 파일을 읽고 쓰고, bash 명령어를 실행하며, 웹에서 콘텐츠를 가져올 수 있는 능력을 부여했습니다. 이 도구들만으로도 우리는 매우 유능한 에이전트를 얻을 수 있었습니다.
에이전트가 길고 복잡한 작업을 수행할 때 어떤 일이 발생할까요?
현재의 에이전트는 매우 잘 작동하지만, 우리는 에이전트가 많은 양의 업무를 처리하기를 원하며, 이를 위해서는 긴 시간 동안 작업에 집중해야 합니다. 현재로서는 에이전트에게 길고 복잡한 작업을 주려고 하면, 에이전트가 장기적인 관점에서 생각하지 못하고 아주 작은 진전만 있어도 작동을 멈춘다는 것을 알게 될 것입니다.
이는 LLM (Large Language Model)이 대화형으로 동작하도록 훈련되었기 때문에 예상 가능한 결과입니다. LLM은 질문과 답변을 기반으로 대화를 주고받는 것을 기대합니다. 이는 단순한 챗봇(chatbot)에게는 괜찮지만, 우리의 에이전트는 요청을 받은 후 결과를 반환하기 전까지 오랫동안 그 작업에 매달릴 수 있어야 합니다.
긴 작업 계획 (Long task planning)
우리가 에이전트에게 부여할 다음 능력은 길고 복잡한 작업을 계획하는 능력입니다.
에이전트에게 필요한 능력은 다음과 같습니다:
- 작업의 목표를 이해하기
- 사전에 작업을 해결할 방법을 계획하기
- 작업을 구체적인 단계로 나누기
- 대기 중, 진행 중, 완료된 작업을 추적하기
- 현재 계획에 문제가 생기면 접근 방식을 재고하기
- 중단하기 전에 계획된 모든 것이 실제로 완료되었는지 확인하기
에이전트에게 이러한 능력을 부여하기 위해, 우리는 지난 파트에서 추가한 요소인 **도구 (tools)**에 의존할 것입니다. 또한 모델의 **시스템 프롬프트 (system prompt)**를 통해 모델에게 긴 작업 계획을 사용하는 방법을 설명할 것입니다.
새로운 도구: 스크래치패드 (Scratchpad)
이것은 매우 단순하지만 강력한 도구입니다. 우리는 모델에게 자신의 생각을 적고 나중에 다시 읽을 수 있는 공간을 제공하는 것뿐입니다.
이 도구의 주요 이점은 모델이 작업을 시작하기 전에 목표를 철저히 생각하고 전체적인 접근 방식을 계획하도록 강제한다는 점입니다.
이 도구는 스크래치패드 (scratchpad) 내용을 파일이나 데이터베이스 대신 메모리에 저장합니다. 세션 간에 스크래치패드 내용을 공유할 필요가 없으므로 이 방식은 적절합니다.
다음은 Python 구현 코드입니다:
class Scratchpad:
"""메모리 내 스크래치패드에서 읽기 및 쓰기 수행"""
...
이 코드 시리즈의 Github 리포지토리에서 코드를 찾아 클론할 수 있습니다.
새로운 도구: 할 일 목록 (To-do list)
할 일 목록 (To-do list)을 사용하면 에이전트가 작업을 태스크 (task) 단위로 분해하고, 무엇이 남았는지 (pending), 현재 무엇을 하고 있는지 (in progress), 그리고 무엇이 이미 완료되었는지 (done)를 추적할 수 있습니다.
이 도구는 또한 몇 가지 좋은 관행 (good practices)을 강제합니다. 즉, 동시에 여러 태스크가 진행 중인 상태를 허용하지 않으며, 유효하지 않은 태스크 상태를 허용하지 않고, 중복된 태스크를 허용하지 않습니다.
스크래치패드와 마찬가지로, 이 도구는 할 일 목록을 파일이나 데이터베이스 대신 메모리에 저장합니다. 에이전트 세션 간에 할 일 목록을 공유할 필요가 없으므로 이 또한 적절합니다.
RETRY_LIMIT = 3
class ToDoList:
...
새로운 시스템 프롬프트 (System prompt)
도구로 구현할 수 없는 장기 작업 계획 (long term task planning)을 위한 모든 전략은 시스템 프롬프트 (system prompt)를 통해 모델에게 설명됩니다. 여기에서는 기사 서두에서 설명한 프로세스를 사용하여 계획을 세우는 방법과, 계획 과정에서 도움을 받기 위해 새로운 도구들을 사용하는 방법을 모델에게 설명할 것입니다.
더 자세한 내용은 아래의 시스템 프롬프트를 읽어보세요.
또한 시스템 프롬프트에 별도의 언급이 없다면 모델이 작업해야 할 프로젝트가 현재 디렉토리에 있다는 것을 설명하는 짧은 주석을 추가했습니다.
{
"role": "system",
"content": (
...
테스트해 봅시다!
우리의 새롭고 강력한 에이전트를 테스트하기 위해, 정말 어려운 목표를 부여해야 합니다. 저의 경우, Eleventy를 사용하는 정적 사이트를 Hugo로 마이그레이션(migrate)하도록 요청했습니다:
$ python ../agent-harness/agent-planning/agent.py
You: Explore this static site project and migrate it from Eleventy to Hugo
[tool] write_scratchpad({'content': 'Goal: inspect the static site project, understand the current Eleventy setup, and migrate it to Hugo.\nSurvey: I have not yet inspected the repo. Nee
...```
몇 분 전에 돌아와 보니, 사이트가 Hugo로 성공적으로 마이그레이션(migrate)되어 있었습니다!
## 당신이 만든 것
이 에이전트(agent)는 이제 단순히 스스로 작동하는 수준을 넘어, 정말 어렵고 긴 작업(long tasks)을 수행할 수 있을 만큼 충분한 능력을 갖추었습니다. 이 에이전트는 계획을 세우고, 작업을 세분화하며, 무언가 잘못될 경우 복구 및 재계획(replan)을 수행할 수 있고, 작업이 완료되거나 한계에 부딪힐 때까지 계속해서 작업을 이어갈 수 있습니다.
## 다음 단계는?
작업을 완료하기 위해 오랫동안 작동할 수 있는 에이전트는 생산성 측면에서 매우 훌륭한 도구입니다. 하지만, 이 에이전트에게 일을 맡겨두고 다른 일을 하러 간 사이, 에이전트가 당신도 모르는 사이에 수정해서는 안 될 파일을 편집하거나 명령어를 실행할 수도 있습니다. 에이전트가 항상 당신의 예상대로만 행동할 것이라고 막연히 신뢰할 수는 없으므로, 잠재적으로 치명적인 작업을 수행하기 전에는 에이전트가 당신에게 알림(ping)을 보내도록 해야 합니다. 즉, 당신이 '인간 참여형(human in the loop)' 역할을 해야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기