에이전트의 행동은 남고, 판단 근거는 사라진다
에이전트 감사증적은 도구 호출만 기록하고, 그 판단이 무엇을 읽고 내려졌는지는 버린다. 근거는 아무도 보관하지 않은 컨텍스트 윈도우 안에 있었다.
요즘 에이전트 프레임워크는 대부분 감사증적을 함께 내놓는다. 어떤 함수를, 어떤 인자로, 몇 시에, 어떤 실행 id 로 호출했는지가 남는다. 쓸모 있는 기록이다. 그리고 나중에 사람들이 실제로 묻게 될 단 하나가 빠져 있다.
사람이 잘못된 결정을 내렸을 때 그 근거는 되찾을 수 있다. 물어보면 된다. 티켓을 기억하고, 대화 스레드를 기억하고, 괜찮다고 말해준 사람을 기억한다. 근거가 행위 이후에도 존속하는 사람 안에 남아 있기 때문이다.
에이전트가 같은 결정을 내렸을 때, 그 근거는 요청 시점에 조립됐다가 응답과 함께 버려진 컨텍스트 윈도우 안에 있었다. 행위는 데이터베이스에 남는다. 그 행위가 딛고 선 것들은 남지 않는다.
컨텍스트 윈도우가 곧 판단이다
에이전트에게는 입력과 출력 사이에 아무것도 없다. 검색해 온 문서, 도구 실행 결과, 그날 아침 시점의 시스템 프롬프트, 앞선 대화 — 그 조립물 자체가 추론이다. 그것을 버리는 것은 부연 설명을 잃는 게 아니다. 판단을 잃고 결과만 갖는 것이다.
여섯 주 뒤, 실행 로그에는 상담 에이전트가 주문 41-8827 에 전액 환불을 처리했다고 적혀 있다. 적혀 있지 않은 것은 검색 단계가 비슷한 이름의 다른 고객의 옛 주문을 함께 물어 왔다는 사실과, 에이전트가 읽은 정책 문서가 누군가 이틀째 위키에 올려둔 초안이었다는 사실이다.
그 시점에 드는 생각은 실행을 다시 돌려보자는 것이다. 대개 아무것도 증명하지 못한다. 검색 색인은 다시 만들어졌고, 위키 문서는 고쳐졌고, 모델은 마이너 버전이 올라갔고, 애초에 샘플링은 결정적이지 않았다. 재실행은 하나의 답을 준다. 그때 그 답을 주지 않으며, 지금 보고 있는 게 둘 중 무엇인지도 알려주지 않는다.
모델 버전은 행위자의 일부다
invoice-agent 는 이름이지 행위자가 아니다. 같은 이름이 모델 업그레이드를, 프롬프트 수정을, 새로 붙인 도구를, 검색기가 볼 수 있는 문서 범위의 변경을 전부 가로질러 유지된다. 그때마다 행동은 달라진다. 적지 않게 달라진다.
그래서 “사고가 그 변경 전이냐 후냐”는 질문에 이름은 답하지 못한다. 행위 기록에 남는 행위자는 모델 식별자, 프롬프트 리비전의 해시, 그 실행에서 제시된 도구 스키마의 버전까지 함께 들고 있어야 한다. 대부분의 배포는 별칭 하나와 실행 id 를 남긴다. 사람의 모든 행위를 직원 이라고 기록하는 것과 비슷하다.
가장 쓸모 있는 증거는 보관할 수 없는 데이터다
여기서 아무도 피해 갈 수 없는 긴장이 하나 있다. 컨텍스트가 곧 민감정보다. 고객 기록이고 인사 파일이고, 검색기가 가리키도록 허락받은 그 무엇이다. 모든 실행의 컨텍스트를 통째로 저장한다는 것은, 가장 민감한 데이터의 사본을 로그용으로 만들어진 시스템 안에 한 벌 더 두는 것이다. 접근 통제는 더 느슨하고 보존 기간은 더 길다. 개인정보 검토자가 이를 반대하는 것은 정당하고, 삭제 요구가 오면 그 사본까지 닿아야 한다.
빠져나가는 길은 보관하지 않고 확약하는 것이다. 요청 시점에 컨텍스트로 들어간 항목 각각과 조립된 전체의 정규형을 해시하고, 그 다이제스트를 행위 기록과 함께 봉인한다. 남는 것은 크기가 고정돼 있고 그 자체로는 아무것도 드러내지 않는다.
이것이 사 오는 것은 두 가지다. 원본 문서가 아직 있다면, 에이전트가 실제로 본 판본이 무엇이었는지 — 지금 남아 있는 판본이 아니라 — 증명할 수 있다. 보존 정책에 따라 지워졌다면, 적어도 그 집합이 판단 시점에 고정된 것이지 나중에 이야기에 맞춰 짜맞춘 것이 아님을 증명할 수 있다. 분쟁에서 값이 나가는 쪽은 두 번째이고, 그 값은 해시 하나다.
자기 시스템에 던질 다섯 개
지난주 에이전트가 한 행위 중 하나를 고른다. 돈이나 권한이 걸린 것이면 더 좋다. 그리고 답해 본다.
- 그때 읽은 문서와 도구 결과의 집합을, 지금 판본이 아니라 그때 판본으로 재현할 수 있는가?
- 그 기록의 행위자에 모델 식별자와 프롬프트 리비전이 들어 있는가, 아니면 누군가 정한 이름뿐인가?
- 고객이 결과에 이의를 제기하면, 그 판단이 무엇에 근거했는지 보여줄 수 있는가? 아니면 그 일이 일어났다는 것만 보여줄 수 있는가?
- 에이전트의 로그를 쓰는 서비스가 그 로그를 고칠 수도 있는가? 그렇다면 그 로그는 일어난 과거가 아니라 살아남은 과거를 서술한다.
- 보존 기간이 지나 원본 데이터가 사라진 뒤에, 그 행위와 그것이 읽은 것을 잇는 무언가가 남는가?
불편하게 말하면 이렇다. 환불과 프로비저닝과 접근 결정이 에이전트에게 넘어가고 있고, 그 전제는 에이전트의 행위를 나중에 검토할 수 있다는 것이다. 그런데 그 검토의 실체는 행위가 있었다고 적힌 한 줄이다. 지금 고치면 싸고, 그 전제를 두고 처음 다투는 날에 고치면 비싸다.
Axowl 은 사람과 에이전트의 행위를 기록되는 그 순간에 봉인한다. 행위자와 입력을 나중에 재구성하는 대신 판단 시점에 확약한다. 작동 방식.