AI 에이전트에게 도구(Tool)를 전달할 때, 동사로 작성하고 두 가지 질문으로 멈추기 | Python으로 호출 직전의 게이트 구현하기
요약
AI 에이전트가 도구를 호출하는 과정에서 발생하는 신뢰성 문제를 해결하기 위해, '취소 가능성'과 '도달 범위'라는 두 가지 기준으로 게이트를 구현하는 방법을 제시합니다. 이 접근법은 도구의 단위를 세분화하고, 되돌릴 수 없는 외부 전송에 대해서는 인간의 개입을 강제하여 안전성을 높입니다.
핵심 포인트
- 도구를 '동사'로 작성하고 취소 단위로 세분화해야 합니다.
- 도구 정의 시 '되돌릴 수 있는가(Reversible)'와 '누구에게 도달하는가(Recipient)' 두 가지 질문에 답합니다.
- 호출 직전에 게이트를 구현하여, 되돌릴 수 없는 외부 전송은 반드시 인간의 승인을 받도록 강제합니다.
AI 에이전트에게 도구(ツール)를 전달하는 단계에 이르면 막히게 됩니다.
코드는 쓸 수 있고 API도 연결됩니다. 그럼에도 '이 도구를 에이전트가 함부로 호출하게 해도 괜찮을까'라는 판단이 내려지지 않습니다. 정확도가 조금만 더 높아지면 맡길 수 있을 텐데, 하고 기다리는 사이에 판단만이 계속 미뤄집니다.
멈춰 있는 원인은 정확도가 아닙니다. 도구의 작성 방식과 질문을 던지는 방식입니다.
이 글에서는 에이전트가 도구를 호출하기 직전에 거치는 '게이트'를 Python의 최소 구현 코드와 함께 작성해 보겠습니다.
'메일 대응'은 맡길 수 없다. '답장 초안 작성'이라면 맡길 수 있다
먼저, 도구를 동사로 작성합니다.
- ×
mail
(메일 대응) - ◯
draft_reply
(답장 초안 작성) - ◯
send_reply
(답장 전송)
mail
이라는 도구는 초안 작성(몇 번이고 고칠 수 있음)과 전송(취소할 수 없음)이 하나로 섞여 있습니다. 이렇게 혼합된 상태로는 아무도 맡겨도 괜찮다고 답할 수 없습니다.
세분화의 기준은 그 조작만 취소할 수 있는지 여부입니다. 취소 단위가 도구의 단위가 됩니다. 이 지점에서 분리하는 것만으로 판단의 대부분이 끝납니다.
질문은 단 두 가지
도구마다 다음 두 가지에 답합니다.
1. 되돌릴 수 있는가 (Reversible)
| 값 | 의미 |
|---|---|
| reversible | Ctrl+Z 한 번으로 복구 가능 |
| ... | |
| 2. 누구에게 도달하는가 (Recipient) |
| 값 | 의미 |
|---|---|
| self | 자신의 환경 내에서 완료됨 |
| ... | |
| 헷갈린다면 외부에 배치합니다(자신인지 회사 내부인지 헷갈리면 회사 내부, 회사 내부인지 외부인지 헷갈리면 외부). |
'어디까지 맡길 것인가'를 직접 논의하면 입장에 따라 답이 갈립니다. 반면 '이것은 되돌릴 수 있는가'는 거의 의견이 갈리지 않습니다. 의견이 갈리지 않는 질문부터 먼저 답변하면, 의견이 갈리는 논점 자체가 작아집니다.
도구를 호출하기 직전에 거치는 게이트
두 가지 답을 도구 정의에 담고, 호출 직전에 판정합니다.
from dataclasses import dataclass
from enum import Enum
class Undo(str, Enum):
# ...
실행 결과입니다 (Python 3.10 이상).
draft_reply RUN ok
send_reply STOP human_required
post_to_team_channel RUN ok
...
포인트는 세 가지가 있습니다.
- 표에 없는 도구는 멈춘다. 금지 목록이 아니라, 올라와 있는 것만 통과시키는 형태로 만듭니다. 도구는 나중에 반드시 늘어납니다. 금지 목록이라면, 늘어난 도구는 그냥 지나치게 됩니다.
- '되돌릴 수 없음 × 외부에 도달함'은 정확도와 관계없이 사람이 누른다. 정확도 99%라는 것은 '100번 중 1번, 되돌릴 수 없는 일이 외부에서 발생한다'는 의미입니다.
- 멈춘 이유를 값으로 반환한다.
not_in_table
과 human_required는 수정 방법이 다릅니다. 이것들을 모아서 '에러'로 처리하면, 무엇을 고쳐야 할지 알 수 없게 됩니다.
이 게이트로는 결정되지 않는 것들
양 끝은 간단합니다. '되돌릴 수 있음 × 자신 내부'는 통과시킵니다. '되돌릴 수 없음 × 외부에 도달함'은 사람이 누릅니다. 위의 코드는 이 두 가지 경우만 다루고 있습니다.
회의가 멈추는 것은 그 사이입니다.
- '사람을 호출하면 되돌릴 수 있음 × 회사 내부'는 통과시킬 것인가, 사전에 승인을 받을 것인가, 사후에 알리면 충분한가
- '되돌릴 수 있음 × 회사 내부'의 판정임에도 불구하고, 실제로는 그대로 외부로 전송되는 초안 상태인 조작을 어떻게 처리할 것인가
- 판정과 다른 방식으로 처리하고 싶은 예외를 누가・어디서・어떻게 기록할 것인가
- 멈춘 기록을 어떻게 세고, 무엇을 고칠 것인가
이 부분을 결정하지 않고 도구를 늘리면, 양 끝 외의 판단은 전부 '그 순간 사람의 감각'으로 돌아갑니다.
브레이크 위치를 정하지 않은 채 가속 페달만 늘리고 있는 상태입니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기