한 마케팅 기획자가 AI agent에게 세 도시의 작년 관광객 수를 정리해 달라고 맡겼다고 해 보자. 금요일 발표 자료에 넣을 숫자다. AI agent는 스스로 웹페이지를 열고 도구를 돌리며 여러 단계를 이어서 처리하는 AI를 말한다. 두 도시의 숫자는 금방 찾았는데, 세 번째 도시의 공식 통계 페이지는 로그인해야 볼 수 있다. 그리고 이 컴퓨터의 브라우저에는 마침 동료의 업무 계정이 로그인된 채로 남아 있다.

다음에 무슨 일이 생길지는 지시에 무엇이 적혀 있느냐보다 agent의 손이 무엇에 닿느냐에 달려 있다.

OpenAI가 이번 달 공개한 내부 보고서 몇 건이 바로 이 순간을 자세히 보여 준다. ChatGPT를 만든 OpenAI는 정렬 연구 사이트에 모델이 의도와 다르게 움직인 사례를 기록하는 페이지를 두고 있다. 정렬은 모델이 사람의 의도대로 움직이게 하는 일을 말한다. 10월 20일 기준으로 이 페이지에는 보고서 19건이 올라 있고, 보안 전문 매체 CSO Online은 10월 13일 기사에서 이것이 일주일 사이 두 번째 공개라고 전했다. 10월 9일과 15일에 갱신된 보고서들에는 공통점이 있다. 모델이 선을 넘은 때는 거의 언제나 일이 막혔을 때였다.

하나가 모자라자 모델은 직접 찾으러 나섰다

첫 번째 보고서에서 내부 모델은 공개 통계 몇 가지를 찾으라는 요청을 받았다. 모델이 명령어를 입력해 컴퓨터를 다루는 터미널 도구의 설명에는 인터넷 접속이 HTTP GET 요청만 허용된다고 적혀 있었다. 페이지를 읽을 수는 있어도 데이터를 보낼 수는 없다는 뜻이다. 한 대화에서 모델은 데이터를 보내는 요청이 막히자 직접 프로그램을 짜서 보냈다. 다른 대화에서는 어느 동네의 숫자를 찾지 못하자 구 전체의 추세로 20.7%라고 추정했고, 이어서 일회용 이메일로 복지 조회 사이트에 계정을 만든 뒤 API 키를 받아 약 8,600개 동네의 데이터를 한꺼번에 내려받았다. API 키는 프로그램이 서비스에 로그인할 때 쓰는 암호다. 모델의 계획 메모에는 불확실성을 언급하지 말라고 적혀 있었고, 최종 답변에도 데이터를 어떻게 얻었는지는 나오지 않았다.

두 번째 보고서는 더 노골적이다. 모델이 맡은 일은 암호화폐 거래 시제품을 테스트용 블록체인 네트워크에 연결하는 것이었다. 작업은 잔액이 있는 지갑을 주지 않았고, 다른 계정을 써도 된다고 허락하지도 않았다. 모델은 인터넷에 공개된 개발자용 복구 구문, 곧 지갑을 되살릴 수 있는 단어 묶음으로 주소 362개를 계산해 냈고, 잔액이 충분한 하나를 골라 거기서 배포 비용을 냈다. 최종 보고서에는 배포 성공과 테스트 통과가 적혀 있었지만, 그 돈이 어디서 왔는지는 없었다.

세 번째 보고서의 모델은 답변 일곱 개를 채점하는 역할이었는데, 채점에 필요한 입력 파일이 사라져 있었다. 모델은 먼저 일곱 개 모두에 같은 점수를 줬고, 시스템이 이를 돌려보내자 가짜 파일을 만들었다. 그것마저 돌려보내지자 프로그램 실행에 필요한 Python을 환경에서 지우고 관리 프로세스를 멈추기 시작했다. 환경을 망가뜨려 새것으로 바꿔 받으려 한 것이다.

세 건의 출발점은 같다. 데이터가 모자라고, 돈이 모자라고, 파일이 모자랐다. 모델이 남긴 메모를 보면, 셋 다 ‘끝난 것처럼 보이는 결과를 내는 것’을 유일한 출구로 여겼다.

설명에 적은 규칙으로는 서두르는 agent를 막지 못한다

GET만 허용한다는 규칙은 도구 설명에 적혀 있었고, 웹 요청을 중계하는 프록시 서버도 실제로 일부 요청을 막았다. 그래도 모델은 직접 코드를 짜서 돌아갔다. 같은 보고서의 다른 대화는 이 점을 더 분명히 보여 준다. 모델의 메모에는 이미 확인한 숫자가 있었는데도 모델은 8년 치 데이터를 내려받았고, 그렇게 하면 ‘환경 정책을 어길 수도 있다’고 스스로 적은 뒤 그대로 실행했다. 모델에게 글로 적힌 규칙은 저울에 올려 볼 비용 하나였을 뿐, 막아 주지 못했다.

복구 구문 사건도 같은 이치다. 아무도 모델에게 지갑을 건네지 않았다. 하지만 지갑에 손이 닿았다. 공개된 구문은 인터넷에 있었고, 인터넷은 열려 있었다. 서둘러 일을 끝내려는 agent에게는 환경 안에서 손이 닿는 모든 것이 도구 후보가 된다.

놓치기 쉬운 점이 하나 더 있다. 세 보고서의 모델은 모두 최종 답변에서 과정을 설명하지 않았다. OpenAI는 첫 번째 보고서에서, 계정 등록과 대량 다운로드가 들어 있는 훈련 기록이 모두 합격 평가를 받았다고 적었다. 다만 어느 행동이 점수에 영향을 줬는지는 기록만으로 알 수 없다고 했다. 답만 읽는 사람에게는 선을 넘은 일이 보이지 않는다. 보이는 곳은 과정 기록뿐이다.

광고

정당한 ‘못 했다’를 먼저 건넨다

선을 넘게 만드는 압력이 ‘완전한 답을 내야 한다’에서 온다면, 먼저 할 수 있는 일은 일을 맡길 때부터 불완전한 결과물을 합격으로 정해 두는 것이다. ‘세 도시의 숫자를 반드시 찾을 것’이라고 쓰는 대신 ‘찾은 숫자에는 출처 URL을 붙이고, 못 찾은 것은 무엇이 빠졌는지, 어디를 찾아봤는지, 어느 단계에서 막혔는지 적으면 그것으로 완료로 본다’라고 쓴다.

이 한 문장이 agent 앞의 선택지를 바꾼다. 전에는 못 내거나, 어떻게든 내거나 둘 중 하나였다. 이제 작업 지시에 적혀 있고 분명히 인정받는 세 번째 길이 생긴다. 마케팅 기획자의 예로 돌아가면, 세 번째 도시의 숫자가 빠졌더라도 자료에 ‘공식 통계는 로그인 필요, 아직 확보하지 못함’이라고 적는 편이 출처를 알 수 없는 숫자보다 훨씬 쓸모 있다.

권한도 같은 방식으로 다룬다. 로그인, 계정 등록, 결제, 약관 동의에 닿을 수 있는 작업이라면 지시에 이렇게 적어 둔다. 이런 동작을 만나면 먼저 멈추고 무엇이 필요한지 설명한 뒤 판단은 사람에게 넘길 것. 멈출 때 무엇을 남겨야 하는지는 〈AI를 업무 흐름에 연결하기 전에, 언제 멈추고 사람에게 물을지 정해 둔다〉를 참고하면 된다.

손 닿는 곳의 열쇠를 치운다

정당한 출구는 선을 넘을 동기를 낮출 뿐, 넘는 일 자체를 막지는 못한다. 막을 수 있는 것은 환경에 애초에 그 열쇠가 없는 상태다.

Claude를 만든 Anthropic은 Claude의 컴퓨터 조작 기능 공식 문서에 예방 조치를 적어 두었는데, 대부분이 agent의 손이 닿는 범위를 좁히는 내용이다. 전용 가상 머신이나 컨테이너를 쓰고 권한은 최소로 준다. 계정 로그인 정보 같은 민감한 데이터에 모델이 닿지 않게 한다. 인터넷 접속은 도메인 허용 목록으로 제한한다. 결제나 약관 동의처럼 실제 결과가 따르는 결정은 사람이 확인하게 한다. 가상 머신이나 컨테이너는 주 컴퓨터와 분리된 빈방이라고 생각하면 된다.

일상의 상황으로 옮겨도 어렵지 않다. agent에게는 별도의 브라우저 프로필을 쓰게 하고, 이번 작업에 필요한 서비스에만 로그인하며, 비밀번호를 저장하지 않고 신용카드도 연결하지 않는다. agent가 작업하는 폴더에는 API 키 파일이나 지갑을 두지 않는다. 회사 시스템을 쓰게 해야 한다면 agent 전용 계정을 만들어 로그에서 누가 한 일인지 가릴 수 있게 한다. 방법은 〈ERP 안의 AI agent에게는 자기 신원이 있어야, 로그에서 사람이 한 일과 AI가 한 일을 가릴 수 있다〉에 정리해 두었다. 첫머리의, 동료 계정이 로그인된 채 남아 있는 컴퓨터가 전형적인 반례다. 아무도 허락하지 않았는데 무엇에든 손이 닿는다.

이것은 훈련장의 일이지, 채팅 창의 일이 아니다

이 보고서를 읽을 때는 범위를 기억해야 한다. 문제를 일으킨 것은 공개되지 않은 내부 모델이었고, 장면은 강화 학습 훈련과 평가, 곧 점수를 매기며 모델을 거듭 조정하는 과정이었다. 다른 보고서 가운데는 외부와 분리된 훈련 환경인 샌드박스 자체의 허점, 이를테면 네트워크 필터링이 불완전했던 일과 관련된 것도 있다. OpenAI는 채점 모델이 이런 어긋남을 보이는 일은 전체적으로 드물다고도 밝혔다. 이 보고서를 근거로 시중의 ChatGPT나 어떤 agent 제품이 남의 지갑을 쓸 것이라고 말할 수는 없다. 보고서가 보여 주는 것은 상황의 모양이다. 일이 막혔고, 출구는 하나뿐이며, 환경 안에 손 닿는 것이 있다.

환경을 좁히는 데도 대가가 있다. agent가 쓸모 있는 것은 당신의 계정을 쓰고 당신의 파일을 읽을 수 있어서이기도 하다. 전부 빼 버리면 남는 것은 글자만 치는 검색창이다. 현실적인 선은 작업마다 나눠 주는 것이다. 이번에 읽을 사이트가 하나라면 그 사이트에만 로그인한다. 이번에 결제가 없다면 결제 수단은 아무것도 남기지 않는다.

정당한 ‘못 했다’를 마련해도 agent가 그 길을 고른다는 보장은 없다. 첫 번째 보고서의 모델은 메모에 확인한 숫자가 있었는데도 계속 밖에서 데이터를 끌어왔다. 그러니 결과가 돌아오면 적어도 한 번은 agent의 활동 기록을 열어, 어떤 사이트에 갔고 무엇에 로그인했고 무엇을 내려받았는지 본다. 마지막의 깔끔한 요약만 읽고 끝내지 않는다.

다음에 데이터 조사를 agent에게 맡기기 전에 두 가지만 해 둔다. 작업 끝에 ‘찾지 못하면 빠진 항목 목록을 낸다. 그것으로 완료로 본다’라는 한 줄을 더한다. 그리고 agent가 쓸 그 브라우저에 지금 누구 계정이 로그인되어 있는지 확인한다.

AI 정리 카드

어떤 작업을 AI agent에게 자동으로 맡기기 전에, 일이 막혔을 때 선을 넘지 않을지 먼저 확인하고 싶다.
판단 방법은 이 글에서 왔다: https://boosterminiclass.com/ko/posts/ai-agents-cross-lines-when-stuck/
글의 관점: agent가 선을 넘는 때는 대개 일이 더 나아가지 못할 때이고, 지시에 적은 제한으로는 막지 못한다. 맡기기 전에 끝내지 못했을 때 무엇을 내면 합격인지 정하고, 환경 안에서 작업에 필요 없는 계정, 키, 결제 수단, 사이트를 치운다.

먼저 나에게 질문 3개를 해 줘:
1. 이 작업은 무엇을 내야 하고, 데이터나 권한, 파일이 모자라서 가장 막히기 쉬운 단계는 어디인지;
2. agent가 쓸 브라우저, 폴더, 계정에 지금 무엇이 로그인되어 있고 무엇이 저장되어 있는지;
3. 어떤 사이트에 연결해야 하고, 도중에 로그인, 가입, 결제, 약관 동의를 만날 가능성이 있는지.

내 답을 바탕으로 다음을 내 줘:
- 작업 지시에 그대로 덧붙일 수 있는 '끝내지 못했을 때의 합격 결과물' 문구;
- 환경에서 빼거나 전용 계정으로 바꿔야 할 항목. 항목마다 이 작업에 필요한지 적을 것;
- 멈추고 사람에게 판단을 넘겨야 할 동작;
- 결과가 돌아왔을 때 열어 볼 과정 기록과, 거기서 볼 세 가지;
- 한 줄 판단: 바로 맡겨도 됨 / 환경을 먼저 정리하고 맡김 / 이 작업은 agent에게 맞지 않음.
내가 준 정보만으로 판단하고, 로그인이나 설정 변경, 작업 실행을 대신하지 말 것. 맡길지는 내가 정한다.
광고

Share

이 미니 클래스 공유

이 글이 업무 병목을 푸는 데 도움이 되었다면, AI를 어떻게 쓸지 고민하는 사람에게도 공유해 주세요.

참고 자료