AI 에이전트가 같은 도구를 계속 호출하는 것을 어떻게 멈출까
요약
AI 에이전트가 같은 도구를 반복적으로 호출하여 비효율성을 초래하는 문제를 해결하기 위한 두 가지 메커니즘을 제시합니다. '지문화(Fingerprinting)'는 도구 이름과 인자를 해시화하여 동일한 호출인지 식별하며, '순환 감지(Cycle Detection)'는 전체 이력을 분석해 반복 패턴을 찾아냅니다.
핵심 포인트
- Tool-Call Fingerprinting으로 같은 호출을 식별할 수 있습니다.
- Repetition Cycle Detection은 작업 이력의 순환 구조를 파악합니다.
- 단순 입력뿐 아니라 결과나 작업 상태까지 확인해야 합니다.
- 반복 감지 시 경고 후, 다른 조건으로 변경 유도 및 중지가 필요합니다.
AI 에이전트는 같은 검색이나 실패한 API 호출을 반복할 수 있습니다.
여기서 사용할 수 있는 것이 **호출을 식별하는 '지문화(Fingerprinting)'와, 이력에서 반복을 찾는 '순환 감지(Cycle Detection)'**입니다.
여기서는 이 두 가지 설계를 Tool-Call Fingerprinting과 Repetition Cycle Detection이라고 부릅니다.
예를 들어, 같은 검색 도구에 같은 인자를 전달하고 있다면, 같은 호출로 취급하고 싶습니다.
그를 위해, 도구 이름과 인자를 일정한 형식으로 맞춰 해시화합니다.
import hashlib
import json
def fingerprint(tool, args):
...
이것은 JSON으로 표현할 수 있는 인자를 가정한 최소 예시입니다. 키의 순서가 달라도 같은 지문이 됩니다.
다만, 표현 방식이 다른 검색 문구가 같은 의미인지는 판단하지 않습니다.
지문화는 '같은 호출인가'를 조사하는 메커니즘입니다.
순환 감지에서는 더욱 최근의 호출 이력을 봅니다.
| 패턴 | 확인할 것 |
|---|---|
| A → A → A | 같은 호출이 연속하고 있지 않은가 |
| ... | |
| 예를 들어, 검색을 하고 페이지를 읽은 다음, 다시 같은 검색으로 돌아가는 경우입니다. |
한 번씩은 정상적일지라도, 이력 전체를 보면 순환하고 있을 수 있습니다.
같은 도구를 사용하는 것 자체가 문제는 아닙니다.
작업 완료 대기나 일시적인 오류에 대한 재시도에서도 같은 호출이 발생합니다.
따라서, 입력뿐만 아니라 결과나 작업 상태도 확인할 필요가 있습니다.
OpenClaw의 공식 자료에서도 같은 도구・입력・결과의 반복이나, 진전 없는 폴링(polling)을 감지 대상으로 하고 있습니다.
결과를 비교할 때는, 시간이나 요청 ID 등 매번 바뀌는 항목만으로 '진전 있음'이라고 판단하지 않는 설계가 중요합니다.
구현한다면, 다음과 같은 단계를 두는 것이 다루기 쉬울 것 같습니다.
- 반복을 감지하면, 이유를 덧붙여 경고한다
- 계속될 경우, 다른 검색 조건이나 수단으로 변경하도록 유도한다
- 개선되지 않으면 중지하고, 미해결된 내용을 반환한다
횟수의 임계값은 도구별로 조정합니다. 폴링에는 간격과 제한 시간도 필요합니다.
우선 호출 이력을 기록하고, 어디에서 같은 처리가 반복되고 있는지 보는 것부터 시작하는 것이 좋습니다.
거기서부터 시작하면, 멈출 조건도 정하기가 쉬워집니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기