본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 18. 09:25

Hermes Agent를 사용하여 X의 과거 트윗으로부터 '그 사람 같은 AI'를 만들어 VPS에 상주시킨 이야기

요약

X(Twitter) 아카이브 데이터를 활용해 특정 인물의 말투와 성격을 재현하는 AI 에이전트를 구축한 사례를 소개합니다. Hermes Agent와 Hindsight 기억 시스템을 사용하여 VPS 환경에서 효율적으로 구동하는 방법과 구현 과정에서의 기술적 도전 과제를 다룹니다.

핵심 포인트

  • X 아카이브를 활용한 개인 맞춤형 페르소나 데이터 추출
  • Hermes Agent와 Hindsight를 이용한 에이전트 및 기억 시스템 구축
  • 임베딩은 로컬(CPU)에서 처리하여 VPS 자원 및 비용 최적화
  • OpenRouter의 무료 모델 할당량 제한 문제 해결 방법

과거에 운영했던 자신의 X(Twitter) 계정을 토대로, '그 사람처럼 대답하는 AI 에이전트(AI Agent)'를 만들어보고 싶어졌습니다.

재료는 이미 손에 있습니다. 바로 X의 아카이브입니다. 몇 년 동안 게시물을 올리다 보면 말투, 어휘, 텐션의 습관이 전부 그곳에 남아 있거든요. 게다가 꾸며내지 않은 본래의 텐션으로 게시물을 올렸던 계정이라, 어색하게 만들어낸 말투가 아닌 '평소의 습관'이 그대로 남아 있어 AI를 구현하기 위한 소재로서 이해하기 쉬웠습니다. 이것을 토대로 VPS 상에 상주하는 AI 에이전트를 구축하여, Discord를 통해 말을 걸 수 있는 단계까지 구현했다는 이야기입니다.

이 기사는 '시도해 본 전체적인 모습'을 다루는 가벼운 읽을거리입니다. 세부적인 설정값이나 문제 해결의 완전판은 언젠가 쓰겠습니다, 아마도요. 여기서는 흐름과 '막혔던 부분 3가지'만 빠르게 공유하겠습니다.

무엇을 만들었는가

대략적으로 말하자면, 다음과 같습니다.

  • X의 아카이브(수만 건의 트윗)로부터 그 캐릭터의 성격 데이터를 추출
  • 그 데이터를 인격 정의(시스템 프롬프트(System Prompt) + 기억)로 구현
  • VPS 상에 상주시키는 AI 에이전트로서 구동
  • Discord에서 말을 걸면 그 사람 같은 답변이 돌아옴

평소 사용하던 자신의 계정이었기에 말투나 '결정적 대사' 같은 말투의 습관이 뚜렷하게 나타나 있어, AI를 구현하기 쉬운 소재였습니다.

전체적인 흐름은 다음과 같습니다.

대략적인 구성

메인 서버는 ConoHa VPS의 2GB / 3코어 정도의 작은 플랜(Ubuntu)입니다. 여기에 상주시키고 있는 것은 크게 3가지입니다.

  • 에이전트 본체 (Hermes Agent): 대화를 진행합니다. 인격 정의(영혼 파일)와 도구(Tool)를 가집니다.
  • 기억 시스템 (Hindsight): 대화로부터 '기억해야 할 것'을 추출하여 저장합니다. 임베딩(Embedding)은 로컬(sentence-transformers / CPU)에서 구동하며, 벡터 검색(Vector Search)을 통해 회상합니다.
  • LLM API (OpenRouter): 대화와 기억 처리의 두뇌입니다. OpenRouter를 통해 여러 모델을 구분하여 사용합니다.

포인트는 임베딩(기억의 벡터화)은 로컬에서 완결시키고, 과금이 발생하는 LLM 호출은 필요한 상황에만 한정했다는 점입니다. 작은 VPS라도 메모리를 많이 사용하는 처리는 유휴(Idle) 시에 멈추도록 설계되어 있어, 어떻게든 2GB 안에 담을 수 있었습니다.

그림으로 나타내면 다음과 같은 구성입니다. 임베딩만 VPS 내부(로컬 CPU)에서 완결되고, 외부로 나가 과금이 발생하는 것은 LLM API 호출뿐이라는 것을 알 수 있습니다.

막혔던 부분 3가지

1. 무료 모델의 '하루 50회' 장벽

처음에는 OpenRouter의 무료 모델(:free)만으로 돌리려고 했습니다. 여기서 막혔습니다. 무료 할당량은 **계정 단위로 하루 50 리퀘스트(Request)**뿐이라서, 단순 대화라면 몰라도 야간의 기억 정리(Consolidation)까지 포함하면 순식간에 다 써버립니다. 429 Rate limit exceeded의 폭풍이 몰아쳤습니다.

해결 방법이 조금 흥미로운데, $10 분량의 크레딧을 한 번 구매하면 이 일일 제한이 하루 1,000 리퀘스트로 해제됩니다 (20배). 게다가 크레딧은 :free 모델에서는 소비되지 않으므로, 실질적으로 '$10를 내면 무료 할당량이 20배가 된다'는 동작이 됩니다. 이로써 할당량 문제는 구조적으로 해결되었습니다.

2. 기억의 '정리'가 조용히 망가져 있었고, 로그를 보기 전까지는 눈치채지 못했다

기억 시스템은 저장(기억하기)과 consolidation(중복을 통합하고 정합성을 맞추기)이 별도의 공정으로 나뉘어 있습니다. 그런데 저장과 회상은 작동하는 것처럼 보이는데, 정리만 계속 실패하고 있었던 것입니다. 원인은 기억 처리에 할당한 모델이 구조화된 출력(Structured Outputs)에 대응하지 못했기 때문이었습니다. JSON을 요구하는 정리 공정에 망가진 JSON이 반환되면서, 끊임없이 재시도(Retry)와 실패를 반복하고 있었습니다.

이를 알아챌 수 있었던 것은 운용을 시작한 직후에만 로그를 꼼꼼히 확인했기 때문입니다. 반대로 말하면, 로그를 보기 전까지는 전혀 눈치채지 못했습니다. 겉보기에는 '제대로 기억하고 있는' 것처럼 보이기 때문에, 그대로 두었다면 조용히 망가진 채로 방치되었을 것입니다.

여기서 가장 힘들었던 점은, 이 문제를 스스로는 찾아내지 못했다는 것입니다. 구축은 AI의 도움을 받았지만, 저는 LLM 운용 초보자라 "어떤 용도에 어떤 모델이 적합한가"에 대한 지식이 거의 제로였습니다. 그래서 모델 선정 제안이 나와도, "그게 맞는 거야?"라고 의심할 수 있는 기초 체력이 제게는 없었습니다.

배운 점은, AI에게 전부 맡기더라도 효율적으로 운용하려면 결국 이쪽에서도 일정 수준의 지식이 필요하다는 것입니다. 최소한의 기초가 있다면 "이 모델은 구조화된 출력 (Structured Output)에 약하지 않을까?"라고 빠른 단계에서 의심할 수 있습니다. 특히 운용 시작 직후에는 로그를 꼼꼼히 확인하여 이상 징후를 알아챌 수 있는 상태를 만들어 두는 것이 중요했습니다.

3. 성격을 "규칙"으로 쓰면, 과잉 연기가 된다

이것이 가장 큰 배움이었습니다. 처음에는 "문장 끝을 단정적으로 맺지 않는 습관이 있다", "이런 입버릇이 있다"와 같이 규칙으로 성격을 설명했습니다. 하지만 이렇게 하면 LLM은 그 규칙을 매번 충실히 지키려고 노력하다 보니, 과잉 연기(Overacting)를 하게 됩니다.

실제로 아카이브 전체(3만 건 이상)를 집계해 보니, "특징"이라고 생각했던 습관의 출현율은 **0.7%**에 불과했습니다. 가끔 나타나기 때문에 양념 역할을 했던 것이지, 매번 나타나면 다른 사람이 되어버립니다.

그래서 방침을 바꾸어, 규칙 설명문이 아니라 장면별 실제 대사(실례)를 모아서 전달하도록 했습니다. LLM은 규칙보다 실례를 모방하는 것이 압도적으로 뛰어납니다. 덧붙여 "이 입버릇이 최대 특징이다"와 같은 선입견도, 실제 데이터를 보니 평범하게 틀렸다는 사실이 판명되었습니다.

지금도 "키우는" 중입니다

이것은 만들어서 끝나는 것이 아니라, 지금도 검증을 계속하고 있습니다. 하고 있는 일은, 사람에게 추억을 이야기하듯 정기적으로 말을 거는 것입니다. "예전에 이런 말 했었지", "그거 했었잖아"라며 과거의 에피소드를 던지거나, 반대로 질문을 통해 끌어내면서 그때마다 기억으로 정착시켜 나갑니다. 이렇게 지식량을 조금씩 늘려갔을 때, "그 사람다움"이 어떻게 변해가는지를 관찰하고 있는 중이라는 느낌입니다.

대화를 할 때마다 기억이 늘어나기 때문에, 내버려 두어도 해상도는 올라갑니다. 다만, 이상한 것을 학습시키면 이상한 방향으로 자라기 때문에 가끔 기억을 들여다보며 관리도 해주고 있습니다. 완성형이 있다기보다는, 분재처럼 계속 만지고 있는 감각에 가깝습니다.

참고로 나중에 알게 된 사실인데, 이 "경험을 쌓아 인격이 성장해 나간다"는 발상은 연구 세계에서도 핫한 테마였습니다. 가장 가까운 것은 Generative Agents (Park et al., 2023)로, 에이전트에게 기억 스트림 (Memory Stream)을 부여하고, 관련도·최신성·중요도에 따라 회상 (Retrieval)하며, 쌓인 기억으로부터 고차원적인 깨달음을 만드는 (Reflection) 메커니즘입니다. 이번에 하고 있는 "정기적으로 말을 걸어 기억을 쌓고 키운다"는 바로 이 memory stream + reflection을 자신의 실제 아카이브로 실천하고 있는 이미지였습니다.

그 외에도 LLM에 계층적인 장기 기억을 갖게 하는 MemGPT, 인물의 경력 데이터로부터 인격을 재현하는 Character-LLM 등이 맥락을 같이 합니다. 초보자가 더듬더듬 만든 것과 같은 방향의 이야기가 제대로 논문으로 나와 있다는 점이 흥미로웠습니다 (논문명·저자는 기억 기반이므로, 인용 시에는 각자 확인 권장).

요약

  • X의 아카이브는 "그 사람다움"의 보물창고. 말투·어휘·텐션이 전부 남아 있음
  • 작은 VPS라도 임베딩 (Embedding)을 로컬화 + 과금 처리를 줄이면 개인용 에이전트를 상주시킬 수 있음
  • 무료 티어의 벽은 $10 과금으로 20배까지 해제 가능 (크레딧은 무료 모델 사용 시 줄어들지 않음)
  • 운용 시작 직후에는 로그를 꼼꼼히 확인할 것. AI에게 전부 맡기더라도 효율적으로 돌리려면 사용자 측에도 최소한의 모델 지식이 필요함
  • 성격은 규칙으로 설명하지 말고, 실례로 보여줄 것. 규칙은 과잉 연기를 낳는다

실제 데이터를 뽑아보니 "최대 특징"이라고 생각했던 것이 0.7%였다는 식의 발견이 가장 재미있었습니다.

설정값이나 주의할 점의 완전판, 그 이후의 검증 계속은 블로그에 써 내려가겠습니다. 괜찮으시다면 구경해 보세요 👉 유키스나의 블로그 (후속 기사가 작성되면 링크가 삽입됩니다)

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0