본문으로 건너뛰기

에이전트 이탈 감지기 driftguard

driftguard가 에이전트의 작업 이탈을 자체 이력으로 감지한다

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

구조화된 JSON을 생성하는 Constrained Decoding은 에이전트가 작업에서 이탈하거나 출력을 반복하는 문제까지 감지하지 못한다. driftguard는 관련성과 self-drift를 에이전트 자신의 과거 출력과 비교하고, 이탈률 상승이 25개 연속 윈도에 유지될 때 실행을 중단한다. 400단계 실험에서 200단계 이탈을 228단계에 감지했으며, 정상 에이전트의 600단계 실행 3회에서는 false alarm이 없었다. 기본 방식은 Bag-of-Words로 단계당 비용이 없고, 의미적 이탈에는 Embeddings를 연결할 수 있지만 약 28회의 감지 지연과 짧은 실행에서의 보수성이 한계로 남는다.

실용적 조언

  • 작업 루프가 길고 단발성 이상 출력이 발생할 수 있다면 drift를 한 단계가 아니라 25개 연속 윈도에서 확인하도록 설정해 오탐과 감지 지연 사이의 균형을 잡는다.
  • 에이전트가 과제와 관련된 단어를 계속 사용하면서 의미적으로 이탈한다면 기본 Bag-of-Words 대신 Embeddings를 연결한다. 후속 통계 처리 방식은 바꾸지 않아도 된다.
  • 100단계 미만의 짧은 에이전트 실행에서는 25-window hold가 지나치게 보수적일 수 있으므로 실행 길이에 맞는 hold 값을 별도로 검증한다.

섹션별 상세

01
게시자는 Constrained Decoding이 JSON의 구조를 보장해도 에이전트가 작업을 잊거나 반복하거나 엉뚱한 질문에 답하는 상황은 잡지 못한다고 봤다. driftguard는 각 출력의 관련성과 self-drift를 에이전트 자신의 과거 기록과 비교해 감시하며, 외부 정답이나 사람의 개입 없이 이탈 여부를 판정한다. 출력이 한 번 흔들린 것만으로 중단하지 않고 이탈률이 기준선보다 상승한 상태가 25개 연속 윈도에 걸쳐 유지될 때 halt를 호출한다.
02
400단계 에이전트가 200단계에서 이탈한 실험에서는 228단계에 drift가 호출되어 28회의 지연이 발생했다. 600단계 실행을 3회 반복한 정상 에이전트에서는 false alarm이 0건이었다. 게시자는 이 약 28회의 지연이 정상 에이전트를 잘못 중단하지 않기 위해 치른 비용이며, 한 번의 호출만으로 반응하는 탐지기는 정상 실행에서도 발동한다고 밝혔다.
03
기본 관련성 측정은 Bag-of-Words라서 모델과 API 호출 없이 단계당 비용이 0이며, 어휘는 과제와 비슷하지만 의미가 벗어나는 경우 Embeddings로 교체할 수 있다. 교체 뒤에도 후속 통계 처리는 동일하게 유지된다. 현재 구현은 에이전트를 고치는 기능이 아니라 중단 시점을 알려 작업을 멈추는 감시기다.
04
공개된 데모는 의존성 없는 실행을 위해 stdlib docstrings와 stdlib source를 비교하며 두 분포의 분리가 약 1.6배에 그쳐 실제 사용보다 지연이 더 커 보일 수 있다는 점을 README에 명시했다. Python 3.10 이상에서 오프라인으로 실행되고, 게시자는 25-window hold가 짧은 실행에는 지나치게 보수적일 수 있다고 밝혔다. 100단계 미만의 에이전트 루프에서 어떤 hold 설정이 적절한지는 아직 열린 문제다.

용어 해설

제약 디코딩(Constrained Decoding)
모델이 정해진 문법이나 스키마를 벗어나지 않도록 다음 토큰의 선택 범위를 제한하는 생성 방식이다. JSON 형태 보장에는 유용하지만 에이전트가 원래 작업에서 벗어났는지, 같은 말을 반복하는지는 판단하지 못한다.
관련성 신호(Relevance)
에이전트의 현재 출력이 처음 부여된 작업과 여전히 관련되어 있는지를 측정하는 신호다. 이 구현에서는 외부의 정답이나 사람의 판단 대신 에이전트가 처리 중인 과제와 출력의 단어 기반 관계를 기준으로 이탈 여부를 계산한다.
자기 드리프트(Self-drift)
현재 출력 분포가 에이전트가 정상적으로 작업하던 동안 만든 자체 출력 분포에서 얼마나 멀어졌는지를 나타내는 지표다. 외부 정답 없이도 에이전트 자신의 과거 행동을 기준선으로 삼아 변화가 지속되는지 측정한다.
표준오차(Standard Errors)
관측된 변화가 에이전트의 평소 변동 범위를 얼마나 벗어났는지 나타내는 통계적 척도다. driftguard는 이 값을 사용해 단 한 번의 이상 출력이 아니라 기준선에서 상승한 이탈률이 계속 유지되는지를 판정한다.
단어 가방(Bag-of-Words)
문장의 어순이나 깊은 의미보다 포함된 단어를 기준으로 텍스트를 비교하는 표현 방식이다. driftguard의 기본 관련성 측정은 별도 모델이나 API 호출 없이 이 방식을 사용하므로 단계당 비용이 0이지만 의미만 바뀐 이탈에는 약할 수 있다.
임베딩(Embeddings)
텍스트의 의미적 특성을 숫자 벡터로 바꾸어 서로 가까운 의미를 비교하는 방식이다. 에이전트가 어휘상으로는 과제에 맞는 말을 하면서 의미적으로 이탈하는 경우 Bag-of-Words 대신 교체할 수 있으며, 이후 통계 처리 방식은 그대로 유지된다.

코드 예제

python
from driftguard import AgentWatch
watch = AgentWatch(task="the objective you gave the agent")
for step in loop:
    out = agent.step()
    if watch.observe(out).drifting:
        halt()

AgentWatch가 각 에이전트 단계의 출력을 관찰하고 drifting 신호가 발생하면 루프를 중단하는 사용 예시다.

언급된 도구

driftguard중립링크

에이전트 출력의 관련성과 self-drift를 자체 이력과 비교해 작업 이탈 시점을 감지하고 루프 중단 신호를 보낸다.

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 21.수집 2026. 08. 21.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.