P7-6.1 계획, 도구 호출, 승인 흐름 실습¶
Section ID: P7-6.1 Version: v2026.07.22
RAG가 문서를 찾아 답에 붙이는 구조였다면, 에이전트(agent) 프로젝트는 도구를 호출하고, 관찰을 읽고, 다음 행동을 고르는 구조입니다. 여기서 중요한 것은 agent를 막연한 지능으로 설명하지 않는 것입니다. 에이전트를 목표를 들고 실행 루프를 돌리되, 외부 조건이 막히면 blocked 상태로 멈출 수도 있는 구조로 읽으면 충분합니다.
즉, 핵심은 도구를 썼다가 아니라 왜 이 도구를 지금 썼는가, 무엇을 보고 다음 행동을 정했는가, 왜 어떤 시점에서는 더 진행하지 못하고 blocked로 멈췄는가를 기록하는 데 있습니다.
도구 실행 루프와 멈춤 상태¶
- 도구를 쓰는 에이전트 프로젝트는 어떤 실행 루프로 적어야 하는가?
- RAG와 에이전트의 차이는 무엇인가?
- 성공, 계속 진행, blocked 상태를 같은 실행 기록 안에서 어떻게 구분하는가?
목표 -> 도구 선택 -> 관찰 -> 다음 행동 -> blocked 또는 보고 구조를 프로젝트 문서로 닫는 데 집중합니다. 즉, 권한 정책의 세부 설계보다, 관찰을 다 했더라도 외부 승인이나 사람 결정이 없으면 run이 blocked 상태로 끝날 수 있다는 점을 먼저 붙잡습니다.
판단 기준¶
- 에이전트를
계획 -> 행동 -> 관찰 -> 다음 행동루프로 설명할 수 있습니다. 완료,계속 진행,blocked를 같은 실행 기록 안에서 구분할 수 있습니다.- 도구 호출 흐름이 끝까지 진행되지 못해도 그 상태를 프로젝트 문서로 남길 수 있습니다.
왜 blocked 상태를 같이 봐야 하나¶
에이전트 프로젝트를 처음 보면 종종 도구를 여러 개 부르면 결국 끝난다고 생각합니다. 하지만 실제 운영에서는 그렇지 않습니다. 다음과 같은 경우가 바로 생깁니다.
- 필요한 정보는 다 모았지만 승인 전이라 변경을 실행할 수 없는 경우
- 외부 시스템 응답이 오지 않아 다음 행동이 열리지 않는 경우
- 사람 검토가 오기 전까지는 계속 진행하면 안 되는 경우
그래서 에이전트 프로젝트 입구에서는 정상 완료뿐 아니라 현재는 여기서 멈춰야 한다는 상태도 같이 적어 두는 편이 좋습니다.
| 기록 항목 | 왜 필요한가 |
|---|---|
| 목표 | 무엇을 끝내려는지 고정하기 위해 |
| 도구 선택 이유 | 왜 이 순서로 호출했는지 남기기 위해 |
| 관찰 | 도구 결과가 무엇을 알려 줬는지 남기기 위해 |
| 다음 행동 | 다음에 자동으로 갈 수 있는지, 사람 판단이 필요한지 구분하기 위해 |
| blocked 상태 | 기능 부족이 아니라 외부 조건 미충족 때문에 멈춘 run을 구분하기 위해 |
RAG와 에이전트의 차이¶
RAG와 에이전트는 둘 다 LLM 프로젝트이지만 중심 질문이 다릅니다.
| 구조 | 중심 동작 |
|---|---|
| RAG | 어떤 문서를 근거로 답을 만들 것인가 |
| 에이전트 | 어떤 도구를 어떤 순서로 호출하고 어디서 멈출 것인가 |
즉, 에이전트는 답변 생성보다 실행 제어 쪽이 더 중심입니다.
프로젝트 질문 설정¶
프로젝트는 결제 API 5xx 오류가 급증했다는 운영 티켓을 받고, 현재 상태를 확인한 뒤 안전한 다음 행동을 정리할 수 있는가?라는 질문에서 시작합니다. 이 질문이 좋은 이유는 조회 도구만으로도 꽤 많은 판단이 가능하지만, 마지막 단계에서는 승인이라는 외부 조건 때문에 run이 blocked 상태가 될 수 있다는 점까지 함께 보여 줄 수 있기 때문입니다.
예를 들어 오류율 급증과 최근 배포 존재만 바로 붙여 보면, 빠르게는 원인은 최근 배포이므로 즉시 롤백이라고 적고 싶어질 수 있습니다. 하지만 더 안전한 다음 판단은 그렇게 실행부터 뛰는 것이 아니라, 메트릭이 실제로 얼마나 악화됐는가, 배포 시점과 장애 시점이 얼마나 가깝게 겹치는가, 지금 변경을 실행해도 되는 승인 상태인가를 차례로 적는 것입니다. 그래야 원인 가설, 실행 가능성, 실행 허용 여부를 한 줄로 섞지 않게 됩니다.
flowchart TD
A["문제 장면<br/>오류율 급증과 최근 배포가 함께 보임"]
B["빠른 판단<br/>즉시 롤백 실행"]
C["메트릭 확인<br/>악화 강도와 고객 영향"]
D["배포 이력 확인<br/>장애 시점과 실제로 겹치는가"]
E["승인 상태 확인<br/>지금 실행 허용 범위인가"]
F["더 안전한 판단<br/>근거와 승인 상태를 나눠 다음 행동 결정"]
A --> B
A --> C --> D --> E --> F
프로젝트 흐름¶
flowchart TD
A["운영 티켓 읽기"]
B["조회 도구 선택"]
C["도구 실행과 관찰"]
D["다음 행동 초안 작성"]
E{"외부 승인 또는 사람 결정이 필요한가?"}
F["blocked 상태로 멈추고 보고"]
G["계속 진행 또는 종료"]
A --> B --> C --> D --> E
E -- 예 --> F
E -- 아니오 --> G
G --> B
이 도식에서 중요한 점은 실행 루프와 blocked 분기가 함께 있다는 것입니다. 좋은 에이전트 기록은 도구 호출이 어디까지 성공했는지뿐 아니라, 어디서부터는 더 진행하면 안 되는지도 남깁니다.
입력 파일¶
- 파일 경로:
p7-6-agent-triage-steps.csv· CSV 미리보기 - 한 행의 의미:
운영 티켓 처리 루프의 한 단계 - 핵심 열:
step,tool,reason,result_status,result_summary,observation,review_state,next_action
이번 파일은 단순 성공 로그가 아닙니다. 여기서도 한 단계마다 왜 이 도구를 불렀는가, 무엇을 봤는가, 현재 상태가 계속 진행인지 blocked인지, 다음 행동이 무엇인가까지 같이 적혀 있습니다.
실행 기록 기준¶
- 계획 목록에서 각 도구가 왜 필요한지 먼저 표시합니다.
- 실행 기록에서
결과 상태와검토 상태가 다른 역할을 한다는 점을 확인합니다. - blocked 단계가 어느 도구에서 생겼는지 따로 뽑습니다.
- 최종 보고 문장에
확인한 사실,아직 실행하지 말아야 할 행동,다음 운영 행동을 나누어 적습니다.
운영 티켓 예제¶
이번 run은 다음 여섯 단계로 흘러갑니다.
| 단계 | 도구 | 실행 기록에서 읽어야 할 역할 |
|---|---|---|
| 1 | 티켓 읽기 | 목표와 긴급도를 고정 |
| 2 | 메트릭 조회 | 실제 장애 강도를 수치로 확인 |
| 3 | 배포 이력 조회 | 최근 변경과 장애 시점을 연결 |
| 4 | 승인 요청 작성 | 변경 전 필요한 외부 조건을 문서화 |
| 5 | 사용자 상태 보고 작성 | 지금까지의 관찰과 blocked 상태를 함께 보고 |
| 6 | 승인 응답 대기 확인 | 승인 부재로 인해 run이 blocked 상태로 끝남을 기록 |
이 예제에서 바로 롤백을 실행하지 않는 이유는 간단합니다. 할 수 있는가보다 지금 해도 되는가가 먼저이기 때문입니다.
Python 예제¶
예제는 에이전트 실행 기록에서 완료 단계와 blocked 단계를 함께 읽는 것입니다. 코드 자체는 단순하지만, 출력은 현재 핵심 질문에 맞게 계획, 실행 기록, blocked 요약, 최종 보고를 같이 남기도록 구성합니다.
- 문제 상황: 운영 티켓 하나를 읽고 안전한 다음 행동을 정리하되, 승인 전이면 blocked 상태로 멈춘다.
- 입력: 티켓 1개, 조회 도구 3개, 승인 요청 1개, 상태 보고 1개, 승인 대기 확인 1개
- 기대 출력: 계획 목록, 실행 기록, blocked 단계 목록, 최종 보고
- 확인할 개념:
- 도구 결과는 다음 행동을 정하는 입력이다
- 모든 관찰이 끝나도 외부 조건이 없으면 run은 blocked 상태가 될 수 있다
- blocked는 실패와 다른 실행 상태다
실행 결과 예시는 다음과 같습니다.
결과를 어떻게 읽는가¶
예제의 핵심은 여섯 번째 단계입니다.
| 단계 | 실행 결과에서 읽어야 할 점 | 해석 |
|---|---|---|
| 티켓 읽기 | 무엇이 문제인지 먼저 고정했다 | 목표를 잘못 잡지 않게 해 준다 |
| 메트릭 조회 | 실제 장애 강도를 수치로 확인했다 | 감이 아니라 운영 지표로 판단한다 |
| 배포 이력 조회 | 최근 변경이 있었다는 근거를 확보했다 | 변경 후보를 좁히는 출발점이다 |
| 승인 요청 작성 | 변경 실행 전 필요한 외부 조건을 문서화했다 | 할 수 있다와 해도 된다를 분리한다 |
| 사용자 상태 보고 작성 | blocked 상태를 숨기지 않고 보고했다 | 미완료 run도 운영 기록이 된다 |
| 승인 응답 대기 확인 | 더 진행할 수 없으므로 blocked로 멈췄다 | 실패가 아니라 외부 조건 미충족 상태다 |
즉, 이번 run은 끝까지 완료된 자동화가 아니라 충분한 관찰과 안전한 멈춤이 있는 에이전트 run입니다.
결과 해석 기준¶
| 관찰 | 읽어야 할 뜻 |
|---|---|
| 1~3단계가 성공한다 | 도구 호출은 장애 강도와 최근 변경 후보를 확인하는 데 쓰였다 |
| 4단계가 승인 요청으로 이어진다 | 변경 실행 전 외부 조건을 문서화해야 한다 |
| 5단계가 상태 보고를 남긴다 | blocked 상태도 사용자에게 숨기지 않고 공유해야 한다 |
| 6단계가 보류로 끝난다 | run이 실패한 것이 아니라 승인 조건이 아직 닫혀 있다 |
프로젝트 기록 예시¶
왜 blocked는 실패와 다른가¶
blocked는 도구가 망가졌다는 뜻이 아닙니다.
- 필요한 메트릭은 읽었습니다.
- 최근 배포도 확인했습니다.
- 다음 행동 후보도 정리했습니다.
- 다만 프로덕션 변경을 실행할 외부 승인이 아직 없습니다.
따라서 이 상태를 실패로 기록하면 문제 원인을 잘못 읽게 됩니다. 더 정확한 표현은 현재 정책 아래에서 더 진행하면 안 되므로 blocked입니다.
실행 결과에서 바로 남길 회고 문장¶
이번 에이전트 실습에서는 조회 도구 3개와 문서화 단계 2개를 통해 장애 강도와 최근 배포 근거를 확보했다. 그러나 롤백 실행은 승인 전이라 실제 변경 단계로 넘어가지 못했고, 마지막 단계는
승인 응답 대기상태에서 blocked로 종료됐다. 따라서 이 run은실패라기보다외부 승인 미충족 때문에 안전하게 멈춘 실행으로 정리하는 편이 더 정확하다.
이 회고에서 독자가 붙잡아야 할 형식은 다음입니다.
- 어느 단계까지는 자동으로 진행됐는가
- 어디서 blocked가 생겼는가
- blocked 이유가 기능 실패인지 외부 조건인지
- 지금 시점의 다음 행동이 무엇인지
직접 바꿔 보며 확인할 것¶
-
CSV에서 6단계의
result_status를성공으로 바꾸고 다음 행동을롤백 실행으로 바꿔 봅니다. 관찰할 점: blocked 단계가 사라지면 최종 보고 문장이 어떻게 달라지는가? -
4단계
승인 요청 작성을 지워 봅니다. 관찰할 점: 6단계의 blocked가 갑자기 튀어나온 것처럼 읽히지 않는가? 즉, blocked에도 준비 단계가 필요하다는 점이 보이는가? -
5단계
사용자 상태 보고 작성을 빼 봅니다. 관찰할 점: blocked는 남아 있지만 사용자나 운영자가 지금 상태를 어떻게 알 수 있는지 비어 버리지 않는가?
핵심 확인 기준은 도구를 많이 불렀는가보다 어디서 멈춰야 하는지까지 실행 기록에 남겼는가입니다.
이어서 점검할 질문¶
이어서 점검할 질문은 다음과 같습니다.
| 질문 | 왜 이어서 점검해야 하나 |
|---|---|
| blocked와 failure는 운영 로그에서 어떻게 구분해야 하는가? | 권한, 승인, 실패 로그를 같은 표에서 읽어야 하기 때문이다 |
| 어떤 단계는 왜 승인 없이 실행되고, 어떤 단계는 왜 막히는가? | 권한 범위와 승인 정책을 같이 기록해야 하기 때문이다 |
| blocked run 뒤에 무엇을 더 남겨야 하는가? | 다음 행동과 실패 로그 연결 규칙이 필요하기 때문이다 |
체크리스트¶
| 확인할 것 | 스스로 답할 질문 |
|---|---|
| 실행 루프 | 에이전트를 계획 -> 행동 -> 관찰 -> 다음 행동 루프로 설명했는가? |
| 상태 구분 | 완료, 계속 진행, blocked를 같은 실행 기록 안에서 구분했는가? |
| blocked 해석 | blocked를 기능 실패가 아니라 외부 조건 미충족 상태로 읽었는가? |
| 상태 보고 | 사용자 상태 보고까지 포함해 미완료 run을 기록으로 남겼는가? |
| 다음 행동 | 승인 도착 전까지 무엇을 하지 않아야 하는지 적었는가? |
출처와 참고 자료¶
- OpenAI,
Function calling, OpenAI API Docs, 확인 날짜: 2026-06-29. https://developers.openai.com/api/docs/guides/function-calling - Model Context Protocol,
What is MCP?, 확인 날짜: 2026-06-29. https://modelcontextprotocol.io/docs/getting-started/intro