
AI 쇼핑 에이전트에게 지갑과 기억력을 부여했습니다
요약
CockroachDB를 활용하여 AI 쇼핑 에이전트에게 지속 가능한 기억력을 부여하는 프로젝트를 소개합니다. 에이전트가 과거의 구매 결정과 이유를 데이터베이스에 기록함으로써 실수를 방지하고 판단력을 개선하는 방법을 다룹니다.
핵심 포인트
- 에이전트의 결정 과정을 CockroachDB에 저장하여 '에이전트적 기억' 구현
- 데이터 일관성을 통해 중복 구매 및 재고 오류 방지
- Amazon Bedrock의 Claude를 기반으로 한 Python 에이전트 구축
- SQL 표준 지원으로 기존 개발 지식 활용 가능
AI 쇼핑 에이전트에게 지갑과 기억력을 부여했습니다
저는 한정 수량 온라인 세일을 모니터링하고, 구매 시점을 결정하며, 돈을 쓰기 전에 사람에게 물어보는 작은 AI 에이전트를 만들었습니다. 그 부분은 새로운 것이 아닙니다. 수많은 "AI 에이전트 (AI agent)" 데모들이 그렇게 작동합니다. 제가 실제로 신경 쓴 부분은 더 작고 놓치기 쉬운 부분입니다. 에이전트가 결정을 내린 "후"에 어떤 일이 일어날까요? 자신이 무엇을 샀는지, 무엇을 건너뛰었는지, 그리고 그 이유는 무엇인지 기억할까요? 대부분의 데모는 이를 신경 쓰지 않습니다. 제 프로젝트는 신경을 쓰며, 그 기억을 데이터 센터 전체가 다운되더라도 데이터를 절대 잃지 않도록 구축된 데이터베이스인 CockroachDB에 저장합니다.
이 프로젝트의 이름은 wallet-memory이며, CockroachDB × AWS 해커톤(Hackathon)을 위해 만들었습니다.
"기억 (memory)"이 생각보다 중요한 이유
실제 돈을 쓸 수 있는 에이전트를 상상해 보세요. 만약 에이전트가 자신의 과거 결정을 잊어버린다면, 나쁜 일들이 조용히 발생합니다. 같은 물건을 두 번 구매하려고 시도하거나, 지난주에 이미 배웠던 실수를 반복하거나, 혹은 왜 한때 구매를 거절했는지에 대한 기록이 전혀 없을 수도 있습니다. 잊어버리는 챗봇 (chatbot)은 짜증을 유발할 뿐이지만, 지갑을 들고 있으면서 잊어버리는 에이전트는 위험합니다.
그래서 제 에이전트가 결정을 마칠 때마다 — 구매했거나, 거절당했거나, 혹은 사람을 기다리다 시간이 다 되었거나 — 그 결정을 CockroachDB에 기록합니다. 다음 결정을 내리기 전에 에이전트는 데이터베이스에 묻습니다: "이전에도 이런 상황을 본 적이 있는가, 그리고 그때 나는 무엇을 했는가?" 이것이 바로 "에이전트적 기억 (agentic memory)"의 핵심 아이디어입니다. 에이전트의 판단력은 과거가 처음부터 다시 추측해야 하는 것이 아니라, 실제 검색 가능한 기록으로 남기 때문에 시간이 지남에 따라 개선됩니다.
왜 CockroachDB가 이 작업에 적합한가
단순히 행(row)을 저장하기 위해서라면 거의 어떤 데이터베이스를 사용해도 상관없었을 것입니다. CockroachDB가 이 자리에 선정된 데에는 몇 가지 구체적인 이유가 있습니다:
이것은 스스로 과장하지 않습니다. 여러 사람이 정확히 같은 순간에 재고의 마지막 상품을 사려고 할 때도 CockroachDB는 오직 한 명만이 실제로 구매하도록 보장합니다. 심지어 부하가 매우 높은 동시성 환경에서도 그렇습니다. 저는 재고 3개에 대해 동시에 50개의 구매 시도를 가해 테스트했고, 데이터베이스는 3개를 초과하여 성공하는 것을 결코 허용하지 않았습니다. 추가 코딩이나 제가 직접 작성해야 하는 잠금 장치도 필요 없었습니다.
이것은 일반적인 SQL을 사용합니다. Postgres와 같은 언어입니다. 만약 이미 SELECT나 UPDATE를 작성하는 방법을 알고 있다면, CockroachDB 대부분의 기능을 이미 알고 있는 것입니다. 새로 배울 쿼리 언어가 없습니다.
모든 것과 같은 장소에 AI 메모리를 저장합니다. CockroachDB는
- 에이전트는 작은 웹사이트를 통해 현재 재고를 확인합니다.
- CockroachDB에 "이전에 유사한 결정을 내린 적이 있는가?"라고 질문하고 가장 유사한 매칭 결과를 받아옵니다.
- 재고가 있다면, (때로는 기억된 내용을 참조하여) 짧은 이유를 작성하고 간단한 웹 페이지를 사용하여 사람에게 승인 또는 거절을 요청합니다.
- 승인되면 품목을 구매하며 — 그 이후에 어떤 일이 발생하든 (구매 완료, 품절, 거절 또는 시간 초과) — 해당 결과를 CockroachDB에 즉시 저장합니다.
에이전트 자체는 Amazon Bedrock 상의 Claude를 기반으로 구동되는 Python 프로그램(Strands Agents라는 프레임워크 사용)이며, 단순히 제 노트북에서 실행되는 것이 아니라 AWS의 AI 에이전트 호스팅 서비스인 Amazon Bedrock AgentCore Runtime에서 실행됩니다. "이것을 승인해 주세요" 단계는 Amazon DynamoDB를 일시적인 대기실로 사용하며, 사람이 결정을 내리면 해당 결정의 영구적인 메모리가 CockroachDB로 이동합니다.
언급할 만한 실수
초기에는 "승인 요청"과 "실제 품목 구매"가 두 개의 별개 단계였습니다. 이는 모델이 승인을 받았음에도 불구하고 두 번째 단계를 호출하는 것을 잊어버리면, 구매와 그에 대한 메모리가 모두 조용히 사라져 버린다는 것을 의미했습니다. 저는 프롬프트에서 AI에게 더 정중하게 요청함으로써 이 문제를 해결한 것이 아닙니다. 저는 그 간극을 완전히 제거함으로써 문제를 해결했습니다. 이제 승인과 구매는 하나의 단일 단계 내에서 발생하므로, 결과가 유실될 공간이 남아있지 않습니다.
직접 시도해 보세요
- 라이브 데모: wallet-memory.vercel.app
- 전체 소스 코드: github.com/yama3133/wallet-memory
단순히 더 긴 프롬프트가 아닌, 실제 메모리를 가진 AI 에이전트가 내부적으로 실제로 어떻게 작동하는지 궁금하다면 모든 코드가 그곳에 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기