AI 에이전트를 위한 PRG 패턴

AI 에이전트들이 25년 전의 실수를 반복하고 있습니다.

90년대 웹 폼에는 중대한 버그가 있었습니다. 사용자가 주문을 하고 새로고침을 누르면, 브라우저가 주문을 다시 전송하는 문제가 발생했습니다. 이는 이중 결제로 이어졌고, 결국 화가 난 고객을 만들었습니다.

해결책은 Post/Redirect/Get (PRG) 패턴이었습니다. 작동 방식은 다음과 같습니다:

  • 사용자가 데이터를 제출하기 위해 POST 요청을 보냅니다.
  • 서버가 데이터를 처리합니다.
  • 서버가 새로운 URL로 리다이렉트를 보냅니다.
  • 브라우저가 결과를 보여주기 위해 GET 요청을 수행합니다.

사용자가 새로고침을 눌러도 GET 요청만 다시 실행됩니다. 위험한 POST 요청은 사라집니다.

AI 에이전트가 이 버그를 다시 불러왔습니다.

에이전트가 카드를 결제하거나 기록을 생성하기 위해 도구를 호출할 때 네트워크가 끊길 수 있습니다. 에이전트는 해당 작업이 성공했는지 알 수 없습니다. 그래서 다시 시도합니다. 그러면 고객은 두 번 결제하게 됩니다.

멱등성 키(idempotency keys)를 사용하여 이 문제를 해결할 수 있습니다. 멱등성 키는 리다이렉트와 유사하게 작동합니다. "작업을 수행하는 것"과 "결과를 보여주는 것"을 분리합니다.

에이전트를 위한 패턴은 다음과 같아야 합니다:

  • 에이전트는 첫 번째 시도 전에 고유한 키를 생성합니다.
  • 사용자 ID나 장바구니 ID와 같이 변하지 않는(stable) 값을 사용합니다.
  • 모든 도구 호출 시 이 키를 함께 보냅니다.
  • 서버는 키를 확인합니다. 동일한 키가 다시 들어오면 작업을 두 번 실행하는 대신 이전 결과를 반환합니다.

긴 작업의 경우 키만으로는 부족합니다. 체크포인팅(checkpointing)이 필요합니다. 매 단계마다 상태를 저장해야 합니다. 이를 통해 재시작 시 중단된 지점부터 다시 시작할 수 있습니다.

데이터를 변경하는 모든 에이전트 도구에 대해 다음 규칙을 따르십시오:

  • 모든 상태 변경 도구(mutating tool)는 멱등성 키를 받아야 합니다.
  • 키는 타임스탬프가 아닌 사용자 의도에서 유도해야 합니다.
  • 첫 번째 시도 전에 키를 생성하십시오.
  • 모든 재시도 시 동일한 키를 재사용하십시오.
  • 긴 작업의 경우 모든 중간 단계를 체크포인트로 저장하십시오.

계층은 바뀌었지만, 로직은 동일합니다.

Source: https://dev.to/ravikiran438/the-prg-pattern-for-ai-agents-a-25-year-old-fix-coming-of-age-in-a-new-era-23fh

Optional learning community: https://t.me/GyaanSetuAi