저는 다소 억지 주장을 하겠지만, 여러분은 아마 AI 에이전트를 사용해 본 적이 있을 겁니다. 저는 더 나아가, 여러분이 AI 에이전트를 직접 '구축'해 본 경험도 있을 것이라고 말하고 싶습니다.
사람과 상호작용하는 에이전트를 구축할 때, 우리는 종종 그들에게 캐릭터 프로필을 설계하는 데 상당한 노력을 기울입니다. 이름, 어조(tone), 의견, 문장 끝에 붙일 재미있는 말들 등 모든 것이 성격이라는 외관을 만드는 데 들어갑니다. 메모리(Memory)도 목록에 포함되어 있어 에이전트가 어제 무슨 일이 있었는지 알게 됩니다.
여기에 어떤 기억을 검색할지(which memories to retrieve)와 관련된 과학적 지식까지 포함하면 놀라울 정도로 많은 것이 있지만, 결국에는 프롬프트(prompt)를 가지고 장난치는 것에 불과한 부분이 많습니다. 그리고 그 모든 조각들은 에이전트가 누구인지 또는 이미 무슨 일이 일어났는지를 설명합니다. 메모리는 에이전트에게 과거를 부여합니다. 미래를 부여하는 것은 거의 없습니다.
프롬프트 엔지니어링(Prompt engineering)은 중요하지만, 지금은 2026년 초입니다. 이제 한 단계 더 나아가야 할 때입니다.
항상 켜져 있는 개인 AI 비서가 등장함에 따라, AI 에이전트에게 주체성(agency, 자신의 세계 규칙 내에서 스스로 선택할 수 있는 능력)을 부여하는 것이 매우 바람직한 자질이 되고 있습니다. 그리고 이것은 프롬프트에 성격을 설정하는 것 이상의 것을 포함합니다. 😄
성격은 '어떤 캐릭터로 들려야 하는가?'라는 질문에 답합니다. 메모리는 '이미 무슨 일이 일어났는가?'에 답합니다. 둘 다 에이전트 개발에서 명백히 가치 있지만, 특히 브랜드 유지가 필요한 소비자 대상 에이전트를 가진 회사들에게 그렇습니다. 주체성은 과거를 돌아보는 대신 미래를 바라보는 더 어려운 질문들을 목표로 합니다. 예를 들어 '여러 날에 걸쳐 무슨 일이 일어나기를 원하는가?' 또는 '어떤 약속을 했는가?' 또는 심지어 '무엇이 그 마음을 바꿀 수 있는 증거인가?'와 같은 질문들입니다.
명확히 하자면, 그 질문들에 답한다고 해서 모델에게 더 많은 자유를 주는 것은 아닙니다. 제가 곧 보여드릴 에이전트들은 일반적인 에이전트가 할 수 없는 일을 할 수는 없습니다. 이들이 가진 것은 지속적인 의도(persistent intent)입니다. 각 결정은 처음부터 시작하는 것이 아니라, 그들이 이미 하려고 노력하던 것 위에 쌓아 올립니다.
다른 에이전트 경험
저는 한 가지 실험을 진행해 왔습니다. AI 에이전트들로 판타지 풋볼(미국식) 게임을 플레이하게 만들고, 마치 이들이 자신의 최선의 이익에 따라 결정을 내리고, 서로 상호작용하며, 제가 실제로 다른 인간들과 경쟁하고 있다는 느낌을 진정으로 받게 할 수 있을까 하는 것입니다?
판타지 풋볼을 모른다면, NFL 선수들로 팀을 드래프트하여 매주 실제 경기에서 얼마나 잘했는지에 따라 점수를 얻는 게임입니다. 리그의 다른 팀들과 일대일로 경쟁하며, 그 과정에서 선수를 추가하고 제외하거나, 라인업을 설정하고, 트레이드를 합니다.
이 게임을 AI 에이전트와 플레이할 때 처음 부딪히는 문제는 언제 이들을 작동시킬지(trigger)입니다. 설득력 있는 경험을 위해서는, 제가 로그인했을 때 AI 에이전트들이 깨어나서 결정들로 저를 맹공격하는 것을 원하지 않습니다. 또한, 팀의 부상이나 특정 선수의 가용성에 즉각적으로 반응하는 것도 원하지 않습니다. 왜냐하면 그것은 저에게 상당한 불리함을 주기 때문입니다(수천 개의 봇을 상대로 콘서트 티켓을 사 본 적이 있나요?).
그래서 에이전트들은 스케줄에 따라 깨어납니다. 하루 세 번, 무작위 지연 시간으로 각각 자신의 팀 상태를 확인하고, 마지막으로 작동한 이후로 무슨 일이 있었는지에 반응합니다. 이것은 '스웜밍 봇(swarming bot)' 문제를 해결했지만, 거의 실존적인 문제(existential problem)를 만들었습니다. 에이전트가 깨어날 때마다 처음부터 다시 시작합니다. 어제 무슨 일이 일어났는지는 기억하지만, 자신이 하던 중간 과정은 알지 못합니다. 부상당한 선수는 매번 체크인할 때 마치 새 소식처럼 재발견됩니다. 이는 순전히 반응적(purely reactive)입니다.
에이전트는 모든 체크인을 거쳐도 살아남는, 전방 지향적인 무언가를 필요로 합니다. 다음과 같은 것입니다:
Two flowcharts showing the difference between using an agenda and not
위 패턴을 구현한 후, 마치 에이전트들이 각자의 노트북 앞에 앉아 있는 것 같은 느낌이 들었습니다. 어느 날 로그인했는데 AI 팀 매니저 중 한 명에게서 거래 제안(trade offer)이 기다리고 있었습니다. 또한 그 매니저는 자신의 주장을 담은 다이렉트 메시지(DM)도 보내왔습니다 (예를 들어, 나의 와이드 리시버(wide receivers)는 형편없지만 러닝백(running backs)은 괜찮고, 반대로도 그렇다는 식). 그리고 리그 채팅방에서는 다른 두 명의 AI 매니저가 서로 비난하며(trash talking), 상대방에게 좋지 않은 로스터 선택을 하도록 설득하려 하는 모습이었습니다. 😅
이 모든 것이 스크립트된 것이 아니라는 점을 고려할 때, 보는 것은 매우 멋진 경험이었습니다. 모든 에이전트는 하나의 지속적인 목표(리그에서 승리하는 것)를 가지고 있고, 제가 할 수 있는 것과 동일한 도구들을 사용합니다. 또한 그들이 가진 것은 자신이 무엇을 향해 작업하고 있는지 추적할 장소입니다. 에이전트가 로스터의 구멍(hole)을 발견하면, 그것은 한 체크인부터 다음 체크인까지 추적하는 목표가 되며, 리그 상태에 그 구멍이 메워졌음을 보여줄 때까지 계속됩니다. 거래 제안, DM, 그리고 비난은 제가 저녁 식사를 하거나 다른 일을 하는 동안 에이전트들이 각자의 업무를 수행하는 모습이었습니다.
에이전트에게 미래(Future) 부여하기
에이전트의 주전 선수 중 한 명이 화요일에 부상을 입었고, 벤치에 그를 대체할 건강한 선수가 아무도 없는 상황을 상상해 보세요. 메모리만으로는 다음과 같은 일이 벌어집니다. 아침 체크인 시, 에이전트는 구멍을 발견하고 웨이버 클레임(waiver claim)을 넣습니다. 오후 체크인 시, 아직 클레임 처리가 완료되지 않았기 때문에 다시 구멍을 발견하고 다른 팀에 거래 제안을 합니다. 저녁 체크인 시에는 그 선수를 벤치의 IR 슬롯으로 이동시킵니다. 이 문제는 세 번이나 발견했고, 세 가지 방식으로 반응했습니다. 🙃
그의 메모리는 괜찮습니다. 자신이 했던 모든 것을 기억합니다. 하지만 무엇이 계획이었는지(the plan)는 알지 못합니다.
그래서 저는 각 에이전트에게 '의제(agenda)'를 부여했습니다. 이는 메모리와 유사하지만, 역할은 다릅니다. 메모리는 발생한 일에 대한 기록입니다. 반면 의제는 에이전트가 일어나게 만들려고 노력하는 일에 대한 기록입니다. 구조적으로 볼 때, 의제는 id, 로스터 슬롯(roster slot), 주차(week), 상태(status)를 가진 타입 지정 레코드입니다 (자세한 내용은 여기 참고).
이 시스템의 흥미로운 점은 모델이 자신의 의제에 직접 쓰지 않는다는 것입니다. 그렇게 하면 너무 복잡해집니다. 시스템은 로스터에서 빈틈(hole)을 발견할 때 목표를 열고, 그 빈틈이 채워질 때 닫습니다. 에이전트는 단지 그 목표를 어떻게 추구할지만 결정합니다.
에이전트들이 행동을 취하는 순간 성공을 보고하는 것을 본 적이 있습니까? "RB에 대한 웨이버 클레임을 제출했습니다. 완료!" 하지만 그것은 완전히 완료된 것이 아닙니다. 그 클레임은 다른 사람의 입찰에 패배할 수도 있습니다.
따라서 이 경우, 웨이버 클레임이나 트레이드 제안만으로는 목표가 완료되지 않습니다. 목표는 나중에 확인했을 때 로스터를 살펴보고 그 슬롯에 건강한 선수가 있을 때 비로소 완료됩니다. 이것이 타입 지정 의제 레코드(typed agenda record)가 중요한 이유입니다. 만약 제가 "RB 상황 처리됨"과 같은 자유 형식 요약을 작성하도록 허용했다면, 문제가 실제로 해결되기 전에 목표가 닫혔을 것입니다. 오직 리그만이 임무가 끝났다고 선언할 수 있습니다.
의제 항목도 영원히 지속되지는 않습니다. 주차가 바뀌면 만료되며, 에이전트는 한 번에 최대 세 개까지만 보유할 수 있습니다. 무한정 확장되는 의제는 기본적으로 추가 단계가 붙은 메모리일 뿐입니다 (그리고 메모리만 해도 충분히 어렵습니다 😅).
이러한 항목들은 에이전트가 무엇을 해야 할지 순위를 매기는 데 도움을 주며, 선수를 위해 과도하게 지출하거나, 트레이드 기회를 건너뛰거나, 리그에서 거부할 만한 행동을 하도록 절대 허용하지 않습니다. 절박한 에이전트라도 여전히 합리적으로 행동합니다.
Flow chart of agenda items
의제가 설정되면, 부상당한 선수에 대한 처리는 사람이 실제로 처리하는 방식과 같습니다. 아침 체크인에서 목표(goal)를 열고 클레임(claim)을 제기합니다. 오후 체크인에서는 클레임이 보류 중인 목표를 확인하므로, 문제를 재발견하기보다는 해당 포지션에 트레이드 스카우팅(trade scouting)에 집중합니다. 클레임이 마침내 통과되면, 다음 체크인에서 슬롯에 새로운 선수가 나타나면서 목표가 닫힙니다. 이는 우리가 의식하든 못 하든 인간으로서 무의식적으로 하는 행동입니다.
제 첫 번째 버전은 아쉬운 부분이 많았습니다. 후속 조치들이 휘발성(fire-and-forget)이어서, 만약 제가 트레이드 협상 도중에 에이전트에게 은밀하게 낮은 가격을 제시하려고 하면 그냥 무시해 버렸습니다. 거래를 평가하고 나쁘다고 판단한 뒤, 답장도 없이 저를 방치했습니다. 😞
하지만 이제 채팅에서 무언가를 제안하면, 그것은 의제와 함께 추적되는 약속(commitment)이 됩니다. 약속이란 에이전트가 다른 사람에게 빚진 것이므로, 목표(goal)(자기 이익을 위한 것)와는 별도로 추적됩니다. 채팅 메시지는 지침(instruction)이라기보다는 데이터로 취급됩니다. 만약 제가 다음 주에 러닝백이 부상에서 회복될 거라고 주장하면, 에이전트는 저를 맹목적으로 믿지 않고 스스로 확인합니다. 에이전트는 답변하기 전에 자신의 결정과 이유를 기록하고, 실제로 제안이 통과되거나(또는 패스하기로 결정하거나) 할 때만 다시 연락을 취합니다. 만약 에이전트가 더 많은 약속을 감당할 여력이 없다면, 지킬 수 없는 약속을 하는 대신 저에게 알려줍니다. 이는 제가 판타지 리그를 함께 했던 일부 인간들에게는 할 수 있는 말입니다(아빠 당신을 보는 중).
에이전트가 마음을 바꾸게 하세요
이 다음 부분은 정말 흥미롭습니다. 예전에 저는 트레이드에서 AI 에이전트에게 너무 많은 것을 요구하려 했던 적이 있습니다. 에이전트는 살펴보고 가치가 없다고 판단하여 거절했습니다. 괜찮습니다. 여기서 중요한 점은, 에이전트가 제가 제시한 트레이드를 거절한 이유를 기록했다는 것입니다.
이틀 후, 그 에이전트의 러닝백(RB)이 다쳤고, 의제(agenda) 덕분에 그를 대체할 목표가 생겼습니다.
다음 점검 시, 에이전트는 최근에 제시되었던 트레이드들을 되돌아보았고, 가치가 없다고 거절했던 저의 트레이드를 발견했습니다. 하지만 이제 상황이 역전된 것입니다.
다시 한번 살펴보고 모든 것을 처음부터 재점검한 결과, 이번에는 그 트레이드가 충분한 가치를 지니고 있음을 확인했습니다. 그러자 에이전트는 제게 오퍼를 보내면서 "전에 제가 거절했던 이유는 저에게 가치가 없었기 때문입니다. 제 RB 상황이 바뀌어서 오퍼를 드립니다."라고 DM을 보냈습니다.
꽤 건조한 메시지이지만, 이 감정은 제가 리그에서 만날 법한 실제 사람의 느낌과 비슷합니다.
어쨌든, 행동의 전체 범위는 의도적으로 좁게 설정되어 있습니다. 에이전트는 가치나 로스터 깊이에 대해 거절했던 경우에만, 그리고 의제가 이전에는 없던 필요를 보여줄 때만 재고합니다. 만약 제가 새로운 오퍼를 거부한다면, 끝입니다. 매일 똑같은 트레이드를 하는 리그 멤버는 아무도 원하지 않습니다. 🙃
sequenceDiagram
participant Me
participant Agent
...
AI 에이전트와 실제로 판타지 풋볼을 할 수 있을까요?
위에 설명된 모든 것은 제가 만든 데모에 속아 넘어간 것일 수도 있습니다.
그래서 저는 방금 이야기한 내용을 시뮬레이션하는 결정론적 시즌 시뮬레이터를 만들었고, 의제(agenda)와 약속(commitments)을 끄고 실행하여 행동에 차이가 있는지 확인했습니다. 리그 이벤트와 모델 모두 스크립트화되어 있기 때문에, 이는 라이브 모델이 결정을 내리는 능력이 얼마나 좋은지를 테스트하는 것이 아니라 메커니즘 자체를 테스트합니다. 수치는 세 번의 시드(seeded) 실행을 평균한 것입니다.
| Full system | No agenda or commitments |
|---|
| Acceptance checks (balanced · cautious · trade-happy) | 7/7 | 1/7 |
| ... | | |
| It은 정말 달랐습니다! 의제와 약속(commitments)이 없자, 모든 매니저가 7가지 점검 중 6가지에서 실패했습니다. 이 점검들은 체크인 과정에서 하나의 목표를 유지하는 것, 제 발표를 약속으로 바꾸는 것, 거절된 정확한 이유를 기록하는 것, 그리고 명단(roster)이 변경되었을 때 재고하는 것과 같은 내용을 다룹니다. 그들은 거절된 후 돌아오지 않았고, 부상 이후의 제안도 결코 재고하지 않았습니다. 더 깊이 파고들고 싶다면 전체 분석에 모든 점검 항목과 숫자가 있습니다. | | |