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