OpenClaw 파헤치기

서론
OpenClaw가 어떻게 작동하는지 작성하기 전에 잡답을 먼저 작성해보려고한다.
AI 비서는 예전부터 많이 생각하던 주제였다.
나는 평소 귀찮음이 많고, 관심 없는 것에는 신경을 잘 쓰지 않는다. 그래서 통학길이나 출퇴근길에 AI가 내 일정을 알고, 집을 나서기 전에 "오늘 비 오니까 우산 챙기세요" 정도만 알려줘도 충분히 편리할 거라고 생각했다.
그래서 윈도우 10에 코타나가 탑제 된다고 할때도 상당히 기대를 했었고 한국어를 지원하지 않아서 실망했었다.
그런 나에게 OpenClaw로 부터 시작한 Claw 열풍은 흥미로웠고 육아에 여유가 생겨서 OpenClaw에 대해서 알아보았다. 그러나 권한문제나 복잡한 설정등 불만족하는 사용자들도 많아 보였다
찾아보니 많은 사람들이 개인비서를 만들고 있었고 나도 대AI시대에 AI를 이용해서 나에게 맞는 Claw, 개인비서를 만들기위해 OpenClaw의 구현을 살펴보았고 언제 작업을 진행할지 몰라서 정리해두려고 한다.
설계 구조
extensions
외부(discord, whatsapp, gmail등)에 있는 현실과 연결하는 역할
외부로부터 메시지를 받아서 정규화 후 Gateway로 전달
Gateway로 부터 메시지를 받아서 외부로 전달
scheduler
일정시간마다 작동하여서 사용자에게 진짜 비서처럼 보이게 한다(gateway 호출)
cron: 예약된 시각에 실행되며 정해진 일정 수행
heartbeat: 일정주기마다 실행되며 사람처럼 리얼타임으로 생각하는것처럼 느껴지게함
task
작업관리 실제 작업은 agent를 호출한다
task가 있기때문에 단순히 A(여행 계획), B(숙소예약), C(교통편예약)가 실행되는게 아닌 A를 위해 B, C가 실행된다.
단순히 LLM에 컨텍스트 전체를 넣어서 작동하지 않는 이유는 비용(토큰)이나 context window제한 때문으로 추측된다
gateway
가장 많은 기능을 담당한다(다른 기능 오케스트레이션 및 메모리 관리)
extenstions, cron 로부터 특정 포멧의 메시지를 받으면 agent나 task로 전달
agent로부터 응답을 받으면 대상 extension으로 전달
메시지를 받을때마다 사용자와 맵핑해서 히스토리로 저장
저장된 히스토리를 압축(compaction), 삭제(pruning), 메모리(memory)로 이동 이 행위들은 규칙기반 혹은 LLM호출해서 판단
agent
사용 가능한 LLM을 확인한 후, 해당 LLM의 API 포맷에 맞게 요청을 구성해서 호출한다.
역할은 프롬프트(.md)를 통해 결정된다.
- LLM 호출과 tool 실행을 반복하면서 최종 응답을 만들고, 특정 포맷으로 gateway에 전달한다.
메모리 구조
일일 노트(memory/YYYY-MM-DD.md)
오늘과 어제는 자동 로드
그날 있었던 일에 대한 로그꿈일기(DREAMS.md)
중간계층, 파일자체는 사람검토용으로 존재장기기억(MEMORY.md)
중요한 내용이 저장되는 장기기억
마무리
OpenClaw를 봤을때 뭔가 작동을 사람에게 설명하고 공유하려는 느낌을 받았다. (많은 md 파일 노)
그리고 오픈소스 프로젝트여서 그런지 다양한 플랫폼과 연결할 수 있고 기능도 많았다.
직접 만든다면 나에게 필요한 기능만 구현하고, 채널이나 플러그인을 좀 더 명확하게 분리해서 코드베이스와 구조를 가독성 있게 만들고 싶다
마지막으로 가장중요한건 Docs에 잘 정리 되어있었다...
문서의 초반부, 일부만 봤을때는 시작가이드, 혹은 사용자를 위한가이드(단순 .md 작성)에 대해서만 있는줄알았는데 철학이나 아키텍쳐에 대한 부분도 있었다.
미리 알았다면 이 글을 안 썼을지도 모르겠다...
![[잡담] vive coding](/_next/image?url=https%3A%2F%2Fcdn.hashnode.com%2Fuploads%2Fcovers%2F68c02f05dc3a532e679042a4%2F97d8d740-9e88-49d0-9c60-548f7795bacf.jpg&w=3840&q=75)
