에이전트를 위한 안전한 전달 파이프라인 구축하기
대부분의 에이전트 데모는 중요한 질문을 간과합니다. 자율 시스템이 중복 전송을 하거나 승인되지 않은 작업을 처리하지 않고, 당신을 대신해 무언가를 보내도록 하려면 어떻게 해야 할까요?
중복 전송은 드문 오류가 아닙니다. 작업자가 작업 도중 중단될 때 발생하는 단순 큐(queue)의 기본 동작입니다. 작업자가 메시지를 보낸 후 성공 기록을 남기기 전에 충돌(crash)이 발생합니다. 시스템은 작업이 실패했다고 판단하고 새로운 작업자에게 다시 시도하라고 지시합니다. 고객은 이메일을 두 번 받게 되고, 당신은 고객 지원 티켓을 받게 됩니다.
모든 충돌을 방지할 수는 없습니다. 작업(action)과 기록(record) 사이의 간극에서 발생하는 충돌에 대비하여 설계해야 합니다.
실질적인 결과가 따르는 모든 에이전트 출력에는 다음의 6단계 파이프라인을 사용하십시오:
• 생성(Produce): 에이전트가 전체 결과물(artifact)을 생성합니다. 아직 아무것도 보내지 않습니다. • 영속화(Persist): 의도(intent)와 결과물을 먼저 내구성이 있는 저장소(durable storage)에 기록합니다. • 점수 산정(Score): 출력물에 신뢰도 점수를 부여합니다. • 검토(Review): 신뢰도가 낮은 항목은 사람에게 전달합니다. • 승인(Approve): fail-closed 게이트를 사용합니다. 사람이 명시적으로 권한을 부여하지 않는 한 시스템은 모든 전송을 차단합니다. • 전송 및 증명(Send and Attest): 리스(lease) 조건 하에 항목을 전송한 다음, 증거 영수증을 기록합니다.
각 단계는 별도의 내구성이 있는 전이(durable transition)여야 합니다. 상태는 작업자의 메모리가 아닌 데이터베이스에 저장되어야 합니다.
중복을 방지하려면 행 단위 리스(row-level leasing)를 사용하십시오. Postgres에서는 SELECT ... FOR UPDATE SKIP LOCKED를 사용합니다. 이를 통해 한 번에 하나의 작업자만 작업을 점유하도록 보장할 수 있습니다.
가장 중요한 규칙은 만료된 리스를 처리하는 방식입니다. 외부 메시지를 보내는 동안 작업자가 중단되면 자동으로 재시도하지 마십시오. 대신, 해당 작업을 사람의 검토를 위해 격리(strand)하십시오. 보이지 않는 중복 전송보다는 눈에 보이는 멈춘 작업이 훨씬 낫습니다.
또한 다음과 같은 fail-closed 원칙을 따라야 합니다:
- 전송은 기본적으로 꺼져 있습니다. 단 하나의 플래그를 통해서만 모든 외부 트래픽을 활성화할 수 있어야 합니다.
- 신원 확인: 시스템은 전송하는 시점에 발신자 주소와 전송 보안을 확인해야 합니다.
- 모든 작업은 영수증을 남깁니다. 기록되지 않은 전송은 실패입니다.
내부 로그와 같이 위험 부담이 적은 작업에는 이 방식을 구축하지 마십시오. 실수가 비용을 발생시키거나, 법적 문제를 일으키거나, 고객 지원 티켓을 유발하는 경우에 사용하십시오.
Optional learning community: https://t.me/GyaanSetuAi
