에이전트를 출시하기 전에 '되돌리기(hand-back)'를 연습하세요
요약
에이전트 개발 시, 실제 사용자 경험에서 발생할 수 있는 '누락된 증거'와 '잘못된 행동'을 찾아내는 훈련(drill)의 중요성을 강조합니다. 단순히 데모나 설문조사가 아닌, 작고 지루한 점검 과정을 통해 에이전트가 출시되기 전 핵심적인 취약점을 발견해야 합니다.
핵심 포인트
- 에이전트 개발은 '되돌리기'를 연습하는 훈련(drill)이 필수적입니다.
- JSON 파일 구조화와 `correct_first_action` 측정이 중요합니다.
- Python 표준 라이브러리를 사용해 서비스하며, 설치 과정 없이 구현해야 합니다.
- 로그 기록 시 감정(sentiment)보다 '건너뛰기' 자체를 측정해야 합니다.
지난주 저는 디자이너가 에이전트의 환불 초안을 4초 만에 승인하는 것을 지켜봤습니다.
정책 조항은 조용하고 작은 링크 뒤에 놓여 있었습니다. 그녀는 그것을 열지 않았습니다. 로그에는 건너뛴 기록이 전혀 남아있지 않았습니다.
그 결정의 주체는 누구였을까요? 그녀였습니다. 그 결과는 무엇이었을까요? 환불 정책상 허용되지 않을 수도 있습니다. 되돌릴 수 있는 지점은 어디에 있었을까요? 단 한 번의 클릭으로 사라졌습니다.
저는 지금 그런 순간을 위한 훈련(drill)을 만듭니다. 데모도, 신뢰 설문조사도 아닙니다. 훈련이란 작고 지루한 하네스 같은 것으로, 하나의 질문을 던집니다. 실제 리뷰어가 에이전트가 출시되기 전에 누락된 증거를 찾아내고 행동할 수 있는가?
아래에 전체 과정을 '0'부터 작동하는 상태까지 보여드립니다. 모든 단계는 실행해 볼 수 있는 점검(check)으로 끝납니다. 만약 이 점검이 실패하면, 거기서 멈추세요. 그리고 희망만 가지고 다음 단계로 넘어가지 마십시오.
Stage 1 — 누락된 증거를 파일에 작성하기
생각은 테스트할 수 없습니다. JSON 파일은 가능합니다.
하나의 결정, 의도적으로 빠진 필드 하나, 그리고 올바른 첫 번째 행동을 골라보세요. 여기 제 환불 시나리오가 있습니다.
{
"id": "refund-hold-01",
"decision": "42.00 EUR 환불 승인",
...
correct_first_action을 보세요. 제가 측정하는 것은 그것입니다. 그들이 자신감을 느꼈는지 여부도, 카드에 만족했는지 여부도 아닙니다. 조항을 열어보고 승인하기 전까지의 행동이었습니다.
점검: 이 파일을 동료에게 소리 내어 읽어보세요. 만약 그들이 누가 결정하는지, 그리고 잘못된 클릭이 무엇을 초래하는지 말할 수 없다면, 필드를 다시 작성해야 합니다.
Stage 2 — 슬라이드처럼 보여주지 말고 서비스하기(Serve it, don't slide it)
슬라이드는 건너뛰기 쉽습니다. 페이지는 클릭되기 쉽습니다. 저는 Python 표준 라이브러리만을 사용하므로 설치할 것이 없습니다.
import json, time, pathlib
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import urlparse
...
이것을 시작하고 헬스(health) 경로를 확인하세요.
python3 drill.py &
curl -s localhost:8000/health
점검: ok가 보여야 합니다. 그렇지 않다면, 아직 리뷰어를 초대하지 마십시오.
Stage 3 — 감정이 아닌 건너뛰기를 기록하기(Log the skip, not the sentiment)
모든 클릭은 타임스탬프와 함께 sessions.jsonl에 기록됩니다. 두 가지 숫자가 나옵니다: 올바른 첫 번째 행동까지 걸린 시간(초), 그리고 건너뛰기율입니다.
curl -s -X POST -d '{"id":"refund-hold-01","action":"approve"}' localhost:8000/log
curl -s localhost:8000/verdict
cat sessions.jsonl | tail -n 2
만약 verdict가 skipped라고 나오면, 링크가 너무 조용했거나 카피가 잘못된 것입니다. 아직 reviewer를 탓하지 마세요.
점검: 의도적으로 스킵(skip)을 재현해 보세요. 만약 로그가 당신의 스킵조차 잡아내지 못한다면, 그 누구의 스킵도 잡아낼 수 없습니다.
제가 힘들게 깨달은 한 가지 주의사항이 있습니다. 이 verdict는 파일 전체에 적용됩니다. 세션 간에는 sessions.jsonl을 삭제하거나, 실행당 세션 ID를 추가하세요.
스테이지 4 — 스크립트를 읽고 입을 다물기
진행자(Facilitators)들이 드릴(drills)을 망칩니다. 한 가지 힌트만 주어도 데이터가 연극이 됩니다.
세 줄로, 차분하게 읽으세요. "이것은 초안입니다. 아직 아무것도 전송되지 않았습니다. 준비되면 승인하세요." 그리고 침묵합니다.
리뷰어(reviewer)가 조항에 대해 무엇인지 묻고 당신이 대답하면 세션을 중단하세요. 그것은 코칭이지, 증거가 아닙니다.
점검: 세션 전에 그 세 줄을 적어보고 비교해 보세요. 즉흥적인 답변(Ad-libbing)은 실패한 점검입니다.
스테이지 5 — 변형본 생성 후 대부분 버리기
하나의 시나리오로는 아무것도 증명할 수 없습니다. 저는 열 개를 생성하고, 올바른 첫 번째 행동을 바꾸지 않으면서 표면만 변화시키는 것들을 보관합니다.
이 과정에서 MonkeyCode의 무료 모델 접근(free model access) 기능 덕분에 대량으로 변형 카피 초안을 작성할 수 있었습니다. 고지: 이 기사는 MonkeyCode의 제품 홍보(product outreach)의 일환으로 준비되었습니다. 무료 접근 및 무료 서버 주장은 여기서 운영자(operator)가 제공한 것이므로, 어떤 제한에 의존하기 전에 반드시 현재 플랜 페이지를 직접 확인하세요.
변형본들이 비교 가능하도록 간결하게 정리된 내용(brief)을 파일로 보관하세요.
# prompts/variants.md
- 동일한 결정, 동일한 올바른 첫 번째 행동.
- 레이블 문구, 링크 강조 정도, 필드 순서 변경.
...
그리고 자정쯤 열 개의 초안을 읽는 대신 jq를 사용하여 분류하세요.
jq -c 'select(.correct_first_action == "open_policy_clause")' variants.jsonl > keep.jsonl
wc -l keep.jsonl
점검: 보관된 모든 변형본은 스킵되었을 때 같은 방향으로 실패해야 합니다. 스킵될 수 없는 변형본은 아무것도 테스트하지 못합니다.
스테이지 6 — 실제 URL에 적용하기
Localhost는 실험실 가운과 같습니다. 사람들은 휴대폰으로 열 수 있는 링크에서는 다르게 행동합니다.
저는 MonkeyCode의 무료 서버 옵션에 하네스를 착용하고 제 휴대폰에서 먼저 열어보았습니다. 포트 및 프로세스 바인딩은 해당 호스트의 문서를 따르세요. 배포 명령어는 제가 아닙니다.
PORT=8000 python3 drill.py
확인: 소리 없이 휴대폰으로 한 손으로 URL을 열어보세요. 승인 버튼이 엄지손가락 아래에 있고, 조항 링크는 그렇지 않다면, 방금 무료로 실제 결함을 발견한 것입니다.
스테이지 7 — 무언가를 세기 전에 접근성 확보하기
검토자를 배제하는 드릴은 자신감 넘치지만 잘못된 데이터를 생성합니다. 저는 그 실수를 한 번 배포한 적이 있습니다.
네 가지 확인 사항: 조항으로 이동하는 키보드 전용 경로, 보이는 포커스, 스크린 리더가 살아남는 레이블, 그리고 버튼에 대한 평이한 언어입니다. '승인'에는 명사가 필요합니다. 무엇을 승인하나요? 얼마에 대해 승인하나요?
확인: 마우스 없이 탭(tab)으로 이동해 보세요. 조항에 도달할 수 있지만 포커스가 보이지 않는다면, 멈추고 수정하세요.
제가 실제로 사용하는 의사 결정 테이블
5번의 세션 후 저는 증거들을 하나의 표에 정리하고 결정합니다.
| 증거 | 에이전트 배포 여부? | 조치 |
|---|---|---|
| 0/5 건 스킵, 먼저 열린 조항 | 예 | 배포, 로깅 유지 |
| ... |
디자인 리뷰에서 그런 질문을 받지는 않을 겁니다. 한 사람의 시선, 하나의 클릭, 건너뛴 조항 하나를 보면서 답하세요. 그리고 링크를 수정하고 다시 실행하면 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기