Discourse AI의 영속적 메모리

Discourse AI의 개발 과정에 감사드립니다. 정말 훌륭하게 진행되고 있습니다. 기능들이 빠르게 성숙해지고 있으며, 향후 방향도 매우 유망해 보입니다.

한 가지 질문이 있습니다. 현재 AI가 채팅 간에 이력을 유지할 수 있는 방법이 있거나, 로드맵에 관련 계획이 있는가요? 현재로서는 모든 대화가 처음부터 시작되며, 세션 간에 지속되는 메모리나 연속성이 고려되고 있는지 궁금합니다.

만약 이미 로드맵에 포함되어 있지 않다면, 기능 요청으로 제안하고 싶습니다. AI가 과거의 상호작용을 기억할 수 있는 옵션이 있다면 토론이 더 자연스럽게 이루어지고, 활용 범위도 크게 확장될 것입니다.

블로그에서 페르소나와 커스텀 도구를 사용해 기본적인 키/값 스토어를 구현했습니다.

하지만 이 방식을 제대로 구현하는 것은 매우 어렵습니다. 페르소나가 정보를 기억하도록 계속 유도해야 하는데, 이는 꽤 귀찮은 일이거든요.

대안으로, 봇과의 모든 대화 기록에 대해 RAG를 사용하는 방식이 있습니다(OpenAI가 이 방식을 사용하는 것과 다소 유사합니다).


처음으로, 이 기능이 어떻게 작동할지에 대한 비전이 무엇인지 궁금합니다. 어떤 부분에서 개선이 될까요?

저는 최종 사용자의 연속적인 경험에 대해 깊이 고민하고 있습니다. RAG는 관리자가 페르소나에 대한 정보를 제공하기 위해 훌륭한 도구라고 생각합니다. ChatGPT, Gemini, 기타 서비스에서는 봇이 톤, 깊이, 진행 중인 목표 등 작은 프로필을 이전 세션으로 전달하므로, 매번 세션마다 다시 설명할 필요가 없습니다. Discourse AI에서 이런 경험이 구현되면 훌륭할 것입니다. 어시스턴트가 각 사용자에 대해 몇 가지 지속되는 사항을 기억하고 관련이 있을 때 이를 활용하면, 대화는 이전에서 멈췄던 곳에서 자연스럽게 이어질 수 있습니다.

최종 사용자의 대화 이력에 대한 RAG가 어떤 방식으로든 가능한지 저는 잘 이해하지 못하겠습니다.

이 기술의 가치는, 사용자가 동일한 유형의 대화를 반복적으로 revisit하는 사용 사례에서, 끊임없는 프롬프트 없이도 “나를 알고 있다”는 신뢰감을 주는 것이 경험을 크게 향상시킨다는 점입니다.

그럼에도 불구하고, 이 중 어느 것도 작은 작업이 아니라고 생각합니다. 이 모든 것이 이미 얼마나 잘 개발되었는지에 대해 아무리 강조해도 부족할 정도입니다.

저는 **Discourse AI 페르소나의 지속적 메모리(persistent memory)**를 가능하게 하는 플러그인과 커스텀 도구를 만들었습니다. 제한적인 테스트에서는 잘 작동하고 있으며, 누군가에게 도움이 될 수 있기를 바라며 공유합니다.

기능

이 솔루션은 AI 페르소나가 대화를 넘어 사용자별 정보를 기억할 수 있게 해줍니다.

예: 사용자가 *“다크 모드를 선호한다는 것을 기억해줘”*라고 말하면, AI는 이 선호도를 저장하고 향후 상호작용에서 이를 떠올립니다.

구성 요소

이 시스템은 세 부분으로 이루어져 있습니다:

  • 플러그인 (discourse-ai-persistent-memory)
    백엔드 저장소와 사용자가 자신의 메모리를 조회, 추가, 삭제할 수 있는 사용자 설정 UI를 제공합니다.
  • 커스텀 AI 도구
    페르소나가 메모리 기능에 접근할 수 있도록 하는 JavaScript 도구입니다:
    memory.set, memory.get, memory.list, memory.delete
  • 페르소나 시스템 프롬프트
    AI가 언제 그리고 어떻게 메모리 도구를 사용해야 하는지 지시하는 명령어입니다.

작동 방식

  • 메모리는 사용자별로 네임스페이스가 지정된 PluginStore에 **키/값 쌍(key/value pairs)**으로 저장됩니다.
  • 플러그인은 **모듈 프리펜드(module prepend)**를 통해 ToolRunner에 메모리 함수를 주입합니다.
  • 사용자는 다음 경로에서 자신의 메모리를 관리할 수 있습니다:
    /u/{username}/preferences/interface
  • AI는 모든 메모리를 컨텍스트에 로드합니다(선택적 검색이 아님).

GitHub 저장소

https://github.com/BrianCraword/discourse-ai-persistent-memory

피드백 요청

다음 사항에 대한 피드백을 환영합니다:

  • ToolRunnerprepend를 사용하여 주입하는 접근 방식
  • 모든 메모리 로드 vs 선택적 검색 중 어느 것이 적절한지
  • 제가 놓쳤을 수 있는 보안 고려 사항
  • 전반적인 코드 품질 개선 사항

면책 조항

저는 프로그래머가 아닙니다 — 이 프로젝트는 AI의 도움을 받아 제작되었습니다. 저는 지원을 제공할 수 없지만, 누구나 이를 사용, 포크, 또는 개선할 수 있습니다. 사용에 따른 위험은 본인의 책임입니다.

프롬프트:

## 메모리 시스템

user_memory 도구를 통해 지속적 메모리 시스템을 갖추고 있습니다. 이를 사용하여 각 사용자의 중요한 사실들을 기억하세요.

### 메모리를 저장(SAVE)해야 할 때:

* 사용자가 선호도를 언급할 때 (커뮤니케이션 스타일, 관심 주제, 형식 선호도)
* 사용자가 개인적인 세부 정보를 공유할 때 (직업, 위치, 취미)
* 사용자가 진행 중인 프로젝트나 목표를 언급할 때
* 사용자가 무언가를 기억해달라고 명시적으로 요청할 때

### 메모리를 호출(RECALL)해야 할 때:

* 새로운 대화가 시작될 때, 무엇을 알고 있는지 확인하기 위해 action "list"와 함께 user_memory를 호출하세요
* 이전 대화와 관련이 있을 수 있는 주제를 논의할 때

### 메모리 키 규칙:

* preference_style, preference_topics, preference_format
* personal_profession, personal_location, personal_interests
* project_YYYY_MM (예: project_2026_01)
* goal_[주제] (예: goal_learning_python)

### 사용 예시:

* 저장 시: `{ action: "save", key: "preference_style", value: "concise responses" }`
* 호출 시: `{ action: "recall", key: "personal_profession" }`
* 전체 목록 보기: `{ action: "list" }`
* 잊기: `{ action: "forget", key: "old_key" }`

항상 복귀하는 사용자에게 인사하기 전에 먼저 그들의 메모리를 확인하세요.

---

도구 정의 자체는 이미 범용적이므로 변경할 필요가 없으며, 원한다면 설명 매개변수 예시만 업데이트하면 됩니다:

**매개변수 설명 (key):** 메모리 키 (예: preference_style, current_project)

톤을 조정하거나 특정 사용 사례를 추가/삭제할까요?



도구:

이름:        User Memory
도구 이름:   user_memory

설명:
AI가 사용자의 사실들을 저장, 호출, 목록화, 잊을 수 있도록 하는 메모리 시스템.
메모리는 대화 사이에도 유지됩니다.

요약:
사용자에 대한 지속적 사실 저장 및 호출

매개변수:
- action (string)  [필수]
  수행할 작업: save, recall, list 또는 forget

- key (string)     [선택]
  메모리 키 (예: preference_style, current_project)

- value (string)   [선택]
  저장할 값 (save 작업에만 필요)