에이전트가 제안하고 인간이 결정한다: Qwen을 활용한 식품 안전 자율 주행 시스템 구축
요약
Qwen 모델을 활용하여 식품 안전 점검 후속 작업을 자동화하는 'Inspection Autopilot' 에이전트 구축 사례를 소개합니다. 에이전트의 판단 근거를 코드로 검증하는 인용 시스템, 변조 불가능한 로그 구조, 인간의 최종 승인을 거치는 명시적 자동화 설계를 통해 신뢰할 수 있는 워크플로우를 구현했습니다.
핵심 포인트
- Qwen-plus를 활용한 실시간 점검 기록 분류 및 위험도 예측
- 환각 방지를 위해 인용구의 원본 대조 및 검증 로직 구현
- 감사 추적을 위한 삽입 전용(Append-only) 로그 스키마 설계
- 인간의 개입을 필수화하는 명시적이고 제한적인 자동화 범위 설정
"비즈니스 워크플로우를 자동화하는 에이전트"를 시연할 때, 그 시연은 보통 실제 문제가 시작되는 지점에서 끝납니다. 즉, 에이전트의 출력물이 실제 세상과 맞닿는 순간입니다. 챗봇의 잘못된 답변은 짜증을 유발할 뿐이지만, 카운티(county)의 공식 레터헤드가 찍힌 채 식당으로 발송된 잘못된 위반 통지서는 소송 대상이 됩니다.
저는 Qwen Cloud 해커톤을 위해 조지아주 클레이턴 카운티(Clayton County)의 실제 공공 데이터인 1,333건의 점검 기록과 3,579건의 위반 기록을 바탕으로, 카운티 식품 안전 사무소의 후속 서류 작업을 수행하는 에이전트인 Inspection Autopilot을 구축했습니다. 흥미로운 점은 에이전트 자체가 아니라, 에이전트를 둘러싼 거버넌스(governance)와 그것이 작동함을 증명하는 수치들입니다.
증거부터 확인하기
에이전트의 판단을 신뢰하기 전에, 현실과 대조하여 테스트해야 합니다. 저희는 카운티의 실제 이력을 재현했습니다. 350개의 실제 (점검, 다음 점검) 쌍을 준비하였고, 각 쌍은 당시 사용 가능했던 정보만을 사용하여 qwen-plus에 의해 실시간으로 분류(triage)되었습니다. 에이전트가 '긴급(URGENT)'으로 분류한 시설은 다음 실제 점검에서 67.6%의 확률로 불합격 판정을 받았습니다. 반면 '통상(ROUTINE)'으로 분류하여 통과시킨 시설의 불합격률은 48.6%의 기본율(base rate)에 비해 단 21.1%에 불과했습니다. 이 등급 분류는 단순한 느낌(vibes)이 아니라, 미래의 결과가 이를 뒷받침했습니다.
세 가지 설계 규칙
1. 인용(Citations)은 느낌이 아니라 코드로 검증된다. 분류 에이전트는 점검 기록에서 그대로 복사한 위반 항목을 인용함으로써 모든 위험 판단에 대한 근거를 제시해야 합니다. 백엔드(backend)는 모든 인용구를 원본과 대조하여 확인하며, 일치하지 않는 모든 것은 폐기되고 기록됩니다. 실제 수행된 라이브 평가(50건의 점검, 그 중 28건은 의도적으로 위험하게 설정된 사례)에서, 126개의 인용구 전체에 걸쳐 측정된 환각(hallucination) 비율은 0.0%였습니다.
그리고 한 번도 작동하지 않는 검사기는 작동하지 않는 검사기와 구별할 수 없기에, 저희는 의도적으로 방해 요소를 넣었습니다. 50개의 위조된 인용구를 주입했는데, 절반은 완전히 지어낸 것이고 나머지 절반은 다른 점검 기록에서 가져온 실제 위반 텍스트로, 게으른 검증기라면 놓칠 법한 위조였습니다. 시스템은 50개 중 50개를 모두 잡아냈으며 75개의 정당한 인용구도 모두 보존했습니다. 저희는 직접 함정을 작동시켜 봄으로써 이 트리거(tripwire)가 작동한다는 것을 확인했습니다.
2. 로그는 추가 전용(append-only)입니다. 제안(Proposals)과 결정(decisions)은 삽입 전용(insert-only) 테이블입니다. 감독관의 결정은 최종적이며, 수정 경로(update path)는 존재하지 않고, 소스 검사 데이터는 절대 변조(mutated)되지 않습니다. 카운티(county)가 신뢰할 수 있는 감사 추적(audit trail)을 원한다면, 스키마(schema)는 단순히 변조를 권장하지 않는 수준이 아니라 구조적으로 변조가 불가능하게 만들어야 합니다.
3. 자동화는 명시적이고 좁은 범위로 제한됩니다. 단 하나의 규칙만이 인간의 대기열(human queue)을 우회할 수 있습니다: 90점 이상의 점수와 우선순위 위반 사항이 0건인 깨끗한 정기 검사를 확인하는 것입니다. UI에는 해당 규칙이 나열됩니다. 그 외의 모든 것, 즉 모든 재검사(recheck)와 모든 서신(letter)은 인간의 클릭을 기다립니다. 또한 초안이 작성된 서신은 입력 과정에서 한 번 더 결정론적인(deterministic) 검사를 거칩니다. 이는 서신에 명시된 모든 위반 코드(violation code)를 공식 기록과 교차 참조하여, 불일치 사항을 '승인(Approve)' 버튼 바로 위에 표시하는 린터(linter)입니다.
Qwen 부분
Model Studio의 OpenAI 호환 엔드포인트(qwen-plus, temperature 0.2, response_format json_object, 제한된 타임아웃, 검사별 오류 격리)를 통해 검사당 두 번의 구조화된 JSON 패스(pass)를 수행합니다. 첫 번째 패스는 인용구(citations)와 함께 위험을 분류(triage)합니다. 두 번째 패스는 조치 사항을 초안합니다: 재검사 기간을 설정하거나, 특정 위반 사항을 명시한 공식 서신을 작성하는 것입니다. 형식이 잘못되었거나 근거가 없는(ungrounded) 응답은 더 작은 제안 세트로 격하될 뿐, 공식 문서에 허구의 사실을 만들어내지는 않습니다. 승인된 재검사 사항은 날짜와 위험도 순서에 따른 검사관 일정으로 통합됩니다. 자율 주행(autopilot)의 핵심은 승인 클릭이 곧 작업 지시서(work order)를 생성한다는 점이기 때문입니다.
"자율 주행(autopilot)" 에이전트를 구축하려는 모든 이들에게 해주고 싶은 말
여러분의 데모는 거절(rejection) 사례를 보여주어야 하며, 여러분의 평가(eval)는 자체 안전 계층(safety layer)에 대한 공격을 보여주어야 합니다. 인간이 "거절(reject)"을 클릭하는 순간 시스템이 이를 영구적으로 기록하는 바로 그 순간이, 실제 책임(liability)을 지는 조직이 워크플로우를 채택할 수 있게 되는 순간입니다. 무력화(override)할 수 없는 자율성은 부채(liability)이지만, 종이 기록(paper trail)과 측정된 가드레일(guardrails)을 갖춘 자율성은 제품입니다.
Repo (MIT): https://github.com/mark124/inspection-autopilot
Live demo: http://47.82.181.199:8080
Demo video:
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기