<div align="center">

<img alt="simplemem 로고" src="https://github.com/user-attachments/assets/6ea54ad1-e007-442c-99d7-1174b10d1fec" width="450">

<div align="center">

## LLM 에이전트를 위한 효율적인 평생 기억 — 텍스트 및 멀티모달

<small>의미론적 무손실 압축으로 장기 기억을 저장, 압축, 검색합니다. 이제 텍스트, 이미지, 오디오 및 비디오에 대한 멀티모달 지원이 추가되었습니다.</small>

</div>

<p><b>MCP(텍스트 기억)를 지원하는 모든 AI 플랫폼 또는 Python 통합(전체 멀티모달)과 함께 작동합니다</b></p>

<table>
<tr>

<td align="center" width="100">
  <a href="https://www.anthropic.com/claude">
    <img src="https://cdn.simpleicons.org/claude/D97757" width="48" height="48" alt="Claude Desktop" />
  </a><br/>
  <sub>
    <a href="https://www.anthropic.com/claude"><b>Claude Desktop</b></a>
  </sub>
</td>

<td align="center" width="100">
  <a href="https://cursor.com">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://cdn.simpleicons.org/cursor/FFFFFF">
      <img src="https://cdn.simpleicons.org/cursor/000000" width="48" height="48" alt="Cursor" />
    </picture>
  </a><br/>
  <sub>
    <a href="https://cursor.com"><b>Cursor</b></a>
  </sub>
</td>

<td align="center" width="100">
  <a href="https://lmstudio.ai">
    <img src="https://github.com/lmstudio-ai.png?size=200" width="48" height="48" alt="LM Studio" />
  </a><br/>
  <sub>
    <a href="https://lmstudio.ai"><b>LM Studio</b></a>
  </sub>
</td>

<td align="center" width="100">
  <a href="https://cherry-ai.com">
    <img src="https://github.com/CherryHQ.png?size=200" width="48" height="48" alt="Cherry Studio" />
  </a><br/>
  <sub>
    <a href="https://cherry-ai.com"><b>Cherry Studio</b></a>
  </sub>
</td>

<td align="center" width="100">
  <a href="https://pypi.org/project/simplemem/">
    <img src="https://cdn.simpleicons.org/pypi/3775A9" width="48" height="48" alt="PyPI" />
  </a><br/>
  <sub>
    <a href="https://pypi.org/project/simplemem/"><b>PyPI 패키지</b></a>
  </sub>
</td>

<td align="center" width="100">
  <sub><b>+ 모든 MCP<br/>클라이언트</b></sub>
</td>

</tr>
</table>

<div align="center">

<br/>

[🇺🇸 English](../../README.md) •
[🇨🇳 中文](./README.zh-CN.md) •
[🇯🇵 日本語](./README.ja.md) •
**🇰🇷 한국어** •
[🇪🇸 Español](./README.es.md) •
[🇫🇷 Français](./README.fr.md) •
[🇩🇪 Deutsch](./README.de.md) •
[🇧🇷 Português](./README.pt-br.md)<br/>
[🇷🇺 Русский](./README.ru.md) •
[🇸🇦 العربية](./README.ar.md) •
[🇮🇹 Italiano](./README.it.md) •
[🇻🇳 Tiếng Việt](./README.vi.md) •
[🇹🇷 Türkçe](./README.tr.md)

<br/>

[![Project Page](https://img.shields.io/badge/🎬_INTERACTIVE_DEMO-Visit_Our_Website-FF6B6B?style=for-the-badge&labelColor=FF6B6B&color=4ECDC4&logoColor=white)](https://aiming-lab.github.io/SimpleMem-Page)

<p align="center">
  <a href="https://arxiv.org/abs/2601.02553"><img src="https://img.shields.io/badge/arXiv-2601.02553-b31b1b?style=flat&labelColor=555" alt="arXiv"></a>
  <a href="https://github.com/aiming-lab/SimpleMem"><img src="https://img.shields.io/badge/github-SimpleMem-181717?style=flat&labelColor=555&logo=github&logoColor=white" alt="GitHub"></a>
  <a href="../../LICENSE"><img src="https://img.shields.io/github/license/aiming-lab/SimpleMem?style=flat&label=license&labelColor=555&color=2EA44F" alt="라이선스"></a>
  <a href="https://github.com/aiming-lab/SimpleMem/pulls"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat&labelColor=555" alt="PR 환영"></a>
  <br/>
  <a href="https://pypi.org/project/simplemem/"><img src="https://img.shields.io/pypi/v/simplemem?style=flat&label=pypi&labelColor=555&color=3775A9&logo=pypi&logoColor=white" alt="PyPI"></a>
  <a href="https://pypi.org/project/simplemem/"><img src="https://img.shields.io/pypi/pyversions/simplemem?style=flat&label=python&labelColor=555&color=3775A9&logo=python&logoColor=white" alt="Python"></a>
  <a href="https://mcp.simplemem.cloud"><img src="https://img.shields.io/badge/MCP-mcp.simplemem.cloud-14B8A6?style=flat&labelColor=555" alt="MCP 서버"></a>
  <a href="https://github.com/aiming-lab/SimpleMem"><img src="https://img.shields.io/badge/Claude_Skills-supported-FFB000?style=flat&labelColor=555" alt="Claude Skills"></a>
  <br/>
  <a href="https://discord.gg/KA2zC32M"><img src="https://img.shields.io/badge/Discord-Join_Chat-5865F2?style=flat&labelColor=555&logo=discord&logoColor=white" alt="Discord"></a>
  <a href="../../fig/wechat_logo3.JPG"><img src="https://img.shields.io/badge/WeChat-Group-07C160?style=flat&labelColor=555&logo=wechat&logoColor=white" alt="WeChat"></a>
</p>

<br/>

[🚀 빠른 시작](#-빠른-시작) • [🌟 개요](#-개요) • [📦 설치](#-설치) • [🔌 MCP 서버](#-mcp-서버-텍스트-기억) • [📊 재현](#-논문-결과-재현) • [📝 인용](#-인용)

</div>

</div>

<br/>

## 🔥 뉴스

- **[05/21/2026]** 📦 **통합 `simplemem` 패키지 — 하나의 임포트, 자동 라우팅!** SimpleMem, Omni-SimpleMem, EvolveMem이 이제 단일 패키지에 통합되었습니다. `from simplemem import SimpleMem`은 처음 호출하는 메서드에 따라 텍스트 또는 멀티모달 백엔드를 자동으로 선택하며, `simplemem.optimize(...)`는 EvolveMem의 자기 진화 루프를 활용합니다. `pip install -e .` 한 번으로 설치하세요.
- **[05/14/2026]** 🧬 **EvolveMem (v3.0) — AutoResearch를 통한 자기 진화 기억!** 검색 인프라 자체가 이제 LLM 기반 폐쇄 루프 진단을 통해 자기 진화합니다. LoCoMo에서 EvolveMem은 가장 강력한 기준선 대비 **+25.7% 상대적** 성능 향상을, MemBench에서는 **+18.9% 상대적** 성능 향상을 달성합니다. 시스템은 원래 설계에 없던 완전히 새로운 검색 차원을 발견합니다. [EvolveMem 보기 →](../../EvolveMem/)
- **[04/02/2026]** 🧠 **Omni-SimpleMem (v2.0) — 멀티모달 기억이 등장!** SimpleMem은 이제 **텍스트, 이미지, 오디오 및 비디오** 기억을 지원합니다. 이전 최고 기록 대비 **LoCoMo에서 새로운 SOTA 달성 (F1=0.613, +47%)** 및 **Mem-Gallery에서 (F1=0.810, +51%)** 달성. [Omni-SimpleMem 보기 →](../../OmniSimpleMem/)
- **[02/09/2026]** 🚀 **크로스 세션 기억 — Claude-Mem 대비 64% 성능 향상!** [크로스 세션 문서 보기 →](../../cross/README.md)
- **[01/20/2026]** 📦 **SimpleMem이 이제 PyPI에서 제공됩니다!** `pip install simplemem`으로 설치하세요. [패키지 사용 가이드 보기 →](../PACKAGE_USAGE.md)
- **[01/14/2026]** 🎉 **SimpleMem MCP 서버가 출시되었습니다!** [mcp.simplemem.cloud](https://mcp.simplemem.cloud)에서 클라우드 호스팅됩니다. [MCP 문서 보기 →](../../MCP/README.md)
- **[01/05/2026]** SimpleMem 논문이 [arXiv](https://arxiv.org/abs/2601.02553)에 공개되었습니다!

---

## 📑 목차

- [🚀 빠른 시작](#-빠른-시작)
- [🌟 개요](#-개요)
- [📦 설치](#-설치)
- [🐳 Docker](#-docker로-실행)
- [🔌 MCP 서버](#-mcp-서버-텍스트-기억)
- [📊 논문 결과 재현](#-논문-결과-재현)
- [🗺️ 로드맵](#️-로드맵)
- [📝 인용](#-인용)

---

## 🚀 빠른 시작

### 🧠 기본 워크플로 이해하기

간략히 말하면, SimpleMem은 LLM 기반 에이전트를 위한 장기 기억 시스템으로 작동합니다. 워크플로는 세 가지 간단한 단계로 구성됩니다:

1. **정보 저장** – 대화 또는 사실이 처리되어 구조화된 원자적 기억으로 변환됩니다.
2. **기억 인덱싱** – 저장된 기억이 의미론적 임베딩과 구조화된 메타데이터를 사용하여 구성됩니다.
3. **관련 기억 검색** – 쿼리가 이루어지면, SimpleMem은 키워드가 아닌 의미에 기반하여 가장 관련성 높은 저장 정보를 검색합니다.

이 설계를 통해 LLM 에이전트는 맥락을 유지하고, 과거 정보를 효율적으로 회상하며, 중복 이력을 반복적으로 처리하는 것을 피할 수 있습니다.

### 🎓 기본 사용법

SimpleMem은 단일 `simplemem` 패키지로 제공됩니다. 기본 `mode="auto"`는 호출하는 내용에 따라 사용할 백엔드를 **자동으로 감지**합니다 — 수동 구성이 필요 없습니다:

```python
from simplemem import SimpleMem

mem = SimpleMem()  # mode="auto" — 첫 번째 호출에 의해 백엔드 선택
```

처음 호출하는 메서드가 백엔드를 결정합니다:

| 첫 번째 호출 | 선택된 백엔드 | 이유 |
|:--|:--|:--|
| `add_dialogue()` | **텍스트** (SimpleMem) | 대화 기반 API → 텍스트 모드 |
| `add_text()` / `add_image()` / `add_audio()` / `add_video()` | **Omni** (Omni-SimpleMem) | 멀티모달 API → omni 모드 |

<table>
<tr>
<td width="50%">

**📝 Auto → 텍스트** (순수 텍스트 입력)

```python
from simplemem import SimpleMem

mem = SimpleMem()  # auto mode

# add_dialogue() → 텍스트 백엔드 자동 선택
mem.add_dialogue(
    "Alice",
    "Bob, let's meet at Starbucks tomorrow at 2pm",
    "2025-11-15T14:30:00",
)
mem.add_dialogue(
    "Bob",
    "Sure, I'll bring the market analysis report",
    "2025-11-15T14:31:00",
)
mem.finalize()

answer = mem.ask("When and where will Alice and Bob meet?")
# → "16 November 2025 at 2:00 PM at Starbucks"
```

</td>
<td width="50%">

**🧠 Auto → Omni** (멀티모달 입력)

```python
from simplemem import SimpleMem

mem = SimpleMem()  # auto mode

# add_image() → omni 백엔드 자동 선택
mem.add_text(
    "User loves hiking in the Rocky Mountains.",
    tags=["session_id:D1"],
)
mem.add_image("photo.jpg", tags=["session_id:D1"])
mem.add_audio("voice_note.wav", tags=["session_id:D1"])

result = mem.query("What does the user enjoy?", top_k=5)
for item in result.items:
    print(item["summary"])

mem.close()
```

</td>
</tr>
</table>

> **💡 팁**: Auto 모드는 데이터에 맞는 가장 가벼운 백엔드를 선택합니다. 원하는 경우 `mode="text"` 또는 `mode="omni"`를 명시적으로 사용할 수도 있습니다.

---

### 🧬 고급: 검색 구성 최적화

자체 개발 세트에서 오프라인으로 검색 하이퍼파라미터를 조정한 다음, 추론에 결과 `Config`를 배포합니다. 이것은 EvolveMem의 자기 진화 루프를 감싸는 얇은 래퍼입니다:

```python
import simplemem
from simplemem import SimpleMem, load_config

# mem은 이미 기억이 구축된 완료된 SimpleMem 인스턴스입니다
dev_questions = [
    ("When is the meeting?", "2pm tomorrow at Starbucks"),
    ("What should Bob prepare?", "market analysis report"),
]
config = simplemem.optimize(mem, dev_questions, max_rounds=3)
config.save("my_config.json")

# 나중에 최적화된 구성으로 배포
config = load_config("my_config.json")
mem = SimpleMem(config=config)
```

> EvolveMem은 개발 질문에 대해 LLM 기반 평가 → 진단 → 제안 → 가드 사이클을 실행하여 전역 검색 플래그(top_k, fusion 모드, 답변 검증, 반영 라운드 등)를 조정합니다. 벤치마크 어댑터와 카테고리별 재정의를 포함한 전체 독립형 버전은 [`EvolveMem/`](../../EvolveMem/)을 참조하세요.

---

### 🚄 고급: 병렬 처리

대규모 대화 처리를 위해 병렬 모드를 활성화하세요:

```python
from simplemem import create

mem = create(
    mode="text",
    clear_db=True,
    enable_parallel_processing=True,  # ⚡ 병렬 기억 구축
    max_parallel_workers=8,
    enable_parallel_retrieval=True,   # 🔍 병렬 쿼리 실행
    max_retrieval_workers=4
)
```

> **💡 프로 팁**: 병렬 처리는 배치 작업의 지연 시간을 크게 줄입니다!

---

## 🌟 개요

**SimpleMem**은 LLM 에이전트를 위한 통합 기억 스택으로, 하나의 원칙을 기반으로 구축되었습니다: 높은 정보 밀도로 *의미론적 무손실* 기억을 저장함으로써, 에이전트가 훨씬 적은 토큰을 사용하면서도 더 많은 것을 기억할 수 있게 합니다. 이 패키지는 같은 원칙을 공유하지만 문제의 서로 다른 부분을 공략하는 세 가지 연구를 통합합니다.

### 📝 SimpleMem: 효율성 핵심 (텍스트)

대부분의 기억 시스템은 잘못된 절충점을 강요합니다. 원시 상호작용 이력을 수동적으로 축적(중복적이고 토큰 소모적)하거나, 노이즈를 필터링하기 위해 비용이 많이 드는 추론 루프를 실행(느리고 비용이 많이 듦)하거나 해야 합니다. SimpleMem은 대신 3단계 파이프라인을 통해 상호작용을 압축합니다:

| 단계 | 기능 |
|:--|:--|
| **1. 의미론적 구조화 압축** | 비구조화된 상호작용을 컴팩트한 기억 단위(해결된 상호 참조와 절대 타임스탬프를 갖는 자기 완결적 사실)로 증류하며, 유연한 검색을 위해 여러 보완적 뷰를 통해 인덱싱됩니다. |
| **2. 온라인 의미론적 합성** | 세션 내 관련 맥락을 통합된 추상적 표현으로 병합하여, 쿼리 시점이 아닌 기억 구축 시점에 중복을 제거합니다. |
| **3. 의도 인식 검색 계획** | 쿼리 뒤에 있는 검색 의도를 추론하여 *무엇을* 검색할지 결정하고 정확하고 컴팩트한 맥락을 조합합니다. |

LoCoMo 벤치마크에서 이는 이전 시스템 대비 평균 F1 26.4% 향상을 달성하면서 추론 시점 토큰 소비를 약 30배 줄입니다. 메커니즘 세부 사항(하이브리드 인덱스 레이어, 압축 예시, 검색 계획): [**SimpleMem 텍스트 기억 →**](../text-memory.md).

### 🧠 Omni-SimpleMem: 멀티모달 기억 (텍스트, 이미지, 오디오, 비디오)

Omni-SimpleMem은 압축 우선 철학을 네 가지 모달리티로 확장하며, 세 가지 원칙을 기반으로 구축됩니다: **선택적 수집** (모달리티별 엔트로피 기반 필터링), **점진적 검색** (피라미드 토큰 예산 확장을 갖춘 하이브리드 FAISS + BM25), **지식 그래프 증강** (멀티홉 크로스 모달 추론). 수동 설계되지 않고, 그 아키텍처는 두 벤치마크에 걸쳐 약 50회 실험을 실행한 자율 연구 파이프라인에 의해 *발견*되었으며, 실패 모드를 진단하고, 아키텍처 변경을 제안하며, 내부 루프에 인간 없이도 데이터 파이프라인 버그를 수리했습니다. 시사하는 바는, 버그 수정과 아키텍처 변경이 모든 하이퍼파라미터 튜닝을 합친 것보다 더 많이 기여하여, 시스템을 단순한 기준선에서 LoCoMo와 Mem-Gallery 모두에서 최첨단으로 끌어올렸다는 것입니다. 전체 문서: [**Omni-SimpleMem →**](../../OmniSimpleMem/).

### 🧬 EvolveMem: 자기 진화 검색

EvolveMem은 거의 모든 기억 시스템이 공유하는 맹점을 해결합니다: 저장된 내용은 진화하지만, *검색* 기계(점수 함수, 융합 전략, 답변 생성 정책)는 배포 후 고정된 상태로 남습니다. EvolveMem은 폐쇄 루프 AutoResearch 프로세스(**평가 → 진단 → 제안 → 가드 → 반복**)를 실행하며, 이 프로세스에서 LLM이 질문별 실패를 진단하고 구성 변경을 제안하며, 회귀에 대한 자동 롤백과 정체 시 탐색 인센티브로 보호됩니다. 원래 설계에 없던 새로운 검색 차원(쿼리 분해, 엔티티 교환, 답변 검증)을 발견하고, 가장 강력한 기준선 대비 LoCoMo를 25.7% 상대적으로 개선하며, 진화된 구성이 벤치마크 간에 긍정적으로 전이됩니다. 전체 문서: [**EvolveMem →**](../../EvolveMem/).

### 이들이 어떻게 함께 작동하는가

`from simplemem import SimpleMem`은 멀티모달 백엔드에 대한 자동 라우팅이 있는 텍스트 핵심을 제공하며, `simplemem.optimize(...)`는 EvolveMem을 활용하여 자체 데이터에 대한 검색을 조정합니다. 하나의 패키지, 하나의 정신적 모델: 무손실로 압축하고, 의도에 따라 검색하며, 시스템이 계속 스스로 개선되도록 합니다.

---

## 📦 설치

### 📝 처음 사용하는 분들을 위한 참고 사항

- **활성 환경에서 Python 3.10+를 사용**하고 있는지 확인하세요. 전역으로만 설치된 것으로는 충분하지 않습니다.
- OpenAI 호환 API 키는 **기억 구축 또는 검색 실행 전에** 구성되어야 합니다. 그렇지 않으면 초기화가 실패할 수 있습니다.
- 비 OpenAI 공급자(예: Qwen 또는 Azure OpenAI)를 사용하는 경우, `config.py`에서 모델 이름과 `OPENAI_BASE_URL` 모두 확인하세요.
- 대용량 대화 데이터셋의 경우, 병렬 처리를 활성화하면 기억 구축 시간을 크게 줄일 수 있습니다.

### 📋 요구 사항

- 🐍 Python 3.10+
- 🔑 OpenAI 호환 API (OpenAI, Qwen, Azure OpenAI 등)

### 🛠️ 설정

```bash
# 📥 저장소 클론
git clone https://github.com/aiming-lab/SimpleMem.git
cd SimpleMem

# 📦 의존성 설치 (고정 버전)
pip install -r requirements.txt

# — 또는 — 편집 가능한 패키지로 설치
pip install -e .                  # 기본: 텍스트 + 멀티모달 + evolver
pip install -e ".[server]"        # + MCP / HTTP 서버 (mcp, fastapi, ...)
pip install -e ".[all]"           # 개발 도구를 포함한 모든 것

# ⚙️ API 설정 구성
cp config.py.example config.py
# config.py를 편집하여 API 키와 기본 설정을 입력하세요
```

### ⚙️ 구성 예시

```python
# config.py
OPENAI_API_KEY = "your-api-key"
OPENAI_BASE_URL = None  # 또는 Qwen/Azure를 위한 사용자 지정 엔드포인트

LLM_MODEL = "gpt-4.1-mini"
EMBEDDING_MODEL = "Qwen/Qwen3-Embedding-0.6B"  # 최첨단 검색
```

---

## 🐳 Docker로 실행

**MCP 서버**는 일관되고 격리된 환경을 위해 Docker에서 실행할 수 있습니다. 데이터(LanceDB 및 사용자 DB)는 호스트 볼륨에 지속됩니다.

### 사전 요구 사항

- [Docker](https://docs.docker.com/get-docker/) 및 [Docker Compose](https://docs.docker.com/compose/install/)

### 빠른 실행

```bash
# 저장소 루트에서
docker compose up -d
```

- **Web UI:** http://localhost:8000/
- **REST API:** http://localhost:8000/api/
- **MCP (SSE):** http://localhost:8000/mcp/sse?token=&lt;TOKEN&gt;

데이터는 호스트의 `./data`에 저장됩니다(자동으로 생성됨).

### 사용자 지정 구성

1. 환경 템플릿을 복사하고 편집하세요:
   ```bash
   cp .env.example .env
   # .env 편집: JWT_SECRET_KEY, ENCRYPTION_KEY, LLM_PROVIDER, 모델 URL 등을 설정하세요
   ```
2. env 파일로 실행하세요:
   ```bash
   docker compose --env-file .env up -d
   ```

### 호스트의 Ollama 사용

`LLM_PROVIDER=ollama`이고 Ollama가 Docker가 아닌 시스템에서 실행되는 경우, `.env`에 다음을 설정하세요:

```bash
LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://host.docker.internal:11434/v1
```

Linux에서는 `host.docker.internal`이 Compose 파일을 통해 자동으로 활성화됩니다.

### 유용한 명령어

```bash
docker compose logs -f simplemem   # 로그 추적
docker compose down                 # 컨테이너 중지 및 제거
```

> 📖 MCP 서버 자체 호스팅(Docker 또는 베어 메탈)에 대해서는 [MCP 문서](../../MCP/README.md)를 참조하세요.

---

## 🔌 MCP 서버 *(텍스트 기억)*

SimpleMem은 Model Context Protocol (MCP)을 통해 **클라우드 호스팅 기억 서비스**로 제공되며, Claude Desktop, Cursor 및 기타 MCP 호환 클라이언트와 같은 AI 어시스턴트와의 원활한 통합을 가능하게 합니다.

**🌐 클라우드 서비스**: [mcp.simplemem.cloud](https://mcp.simplemem.cloud) — 또는 [Docker](#-docker로-실행)를 사용하여 MCP 서버를 로컬에서 자체 호스팅하세요.

### 주요 기능

| 기능 | 설명 |
|---------|-------------|
| **스트리밍 가능한 HTTP** | JSON-RPC 2.0을 갖춘 MCP 2025-03-26 프로토콜 |
| **멀티테넌트 격리** | 토큰 인증을 갖춘 사용자별 데이터 테이블 |
| **하이브리드 검색** | 의미 검색 + 키워드 매칭 + 메타데이터 필터링 |
| **프로덕션 최적화** | OpenRouter 통합으로 더 빠른 응답 시간 |

### 빠른 구성

```json
{
  "mcpServers": {
    "simplemem": {
      "url": "https://mcp.simplemem.cloud/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}
```

> 📖 자세한 설정 지침 및 자체 호스팅 가이드는 [MCP 문서](../../MCP/README.md)를 참조하세요

---

## 📊 논문 결과 재현

논문의 LoCoMo / MemBench / Mem-Gallery 수치를 재현합니다. 각 기둥은 자체 디렉토리에 자체 벤치마크 실행기를 가지고 있습니다. 먼저 벤치마크 추가 기능을 설치하세요: `pip install -e ".[benchmark]"`.

### 📝 SimpleMem (텍스트) — LoCoMo

저장소 루트에서 실행:

```bash
python test_locomo10.py                       # 전체 LoCoMo 벤치마크
python test_locomo10.py --num-samples 5       # 빠른 서브셋
python test_locomo10.py --result-file my_results.json
```

### 🧬 EvolveMem — 자기 진화 + LoCoMo / MemBench

`EvolveMem/` 디렉토리에서 실행하세요 ([`EvolveMem/README.md`](../../EvolveMem/README.md) 참조):

```bash
cd EvolveMem
python run_evolution.py --data data/locomo10.json --max-rounds 7
python run_benchmark.py locomo --sample 0 --initial weak --max-rounds 3
python run_benchmark.py membench --agent FirstAgent --max-rounds 3
```

### 🧠 Omni-SimpleMem — LoCoMo / Mem-Gallery

`OmniSimpleMem/` 디렉토리에서 실행하세요 ([`OmniSimpleMem/README.md`](../../OmniSimpleMem/README.md) 참조):

```bash
cd OmniSimpleMem
python benchmarks/locomo/run_locomo.py --data-path /path/to/locomo10.json --model gpt-4o
```

---

## 🗺️ 로드맵

통합 채널별 현재 기능:

| 기능 | Python (`pip install`) | MCP 서버 (Claude Desktop, Cursor, ...) |
|:--|:--:|:--:|
| 텍스트 기억 | ✅ | ✅ |
| 멀티모달 (이미지 / 오디오 / 비디오) | ✅ | ⬜ 계획 중 |
| `optimize()` 자기 진화 검색 | ✅ | ⬜ 계획 중 |

격차를 해소하기 위해 계획된 작업 (MCP 서버는 독립형 멀티테넌트 텍스트 서비스이며, 이것들은 실제 기능이지 문서 수정이 아닙니다):

- [ ] **MCP를 통한 멀티모달.** `memory_add_image` / `memory_add_audio` / `memory_add_video` 도구를 추가합니다. 파일 업로드 경로(MCP가 로컬 파일 경로를 전달할 수 없으므로 base64 또는 URL), Omni-SimpleMem 스토리지 백엔드의 멀티테넌트 적응, 서버 측 비전/오디오 모델 액세스가 필요합니다.
- [ ] **MCP를 통한 EvolveMem.** `optimize()`를 MCP 도구로 노출합니다. 멀티모달보다 실행 가능성이 높지만(텍스트 입력, JSON 구성 출력, 파일 전송 없음), MCP 검색기는 현재 EvolveMem이 진화하는 약 10개 차원 중 `semantic_top_k` / `keyword_top_k`만 지원합니다. 나머지 조절 장치(구조화된 top_k, fusion 모드/가중치, 엔티티 교환, 쿼리 분해, 답변 검증) 지원을 위해 MCP 검색기 확장, 테넌트의 저장된 기억에 대해 진화 루프를 실행하는 어댑터, 테넌트별 구성 지속성, 비동기 실행(루프는 LLM 집약적이며 동기 요청 시간 초과가 발생함)이 필요합니다.
- [ ] **Docker**는 MCP 서버가 지원하면 두 가지 모두 자동으로 상속합니다(이미지에 멀티모달 의존성 추가 및 Omni 스토리지 볼륨).

오늘 전체 멀티모달 및 자기 진화 검색을 위해서는 Python API를 사용하세요 ([빠른 시작](#-빠른-시작) 참조).

---

## 📝 인용

SimpleMem을 연구에 사용하신다면, 다음을 인용해 주세요:

```bibtex
@article{simplemem2026,
  title={SimpleMem: Efficient Lifelong Memory for LLM Agents},
  author={Liu, Jiaqi and Su, Yaofeng and Xia, Peng and Zhou, Yiyang and Han, Siwei and  Zheng, Zeyu and Xie, Cihang and Ding, Mingyu and Yao, Huaxiu},
  journal={arXiv preprint arXiv:2601.02553},
  year={2026},
  url={https://arxiv.org/abs/2601.02553}
}
```

```bibtex
@article{evolvemem2026,
  title={EvolveMem: Self-Evolving Memory Architecture via AutoResearch for LLM Agents},
  author={Liu, Jiaqi and Ye, Xinyu and Xia, Peng and Zheng, Zeyu and Xie, Cihang and Ding, Mingyu and Yao, Huaxiu},
  journal={arXiv preprint arXiv:2605.13941},
  year={2026},
  url={https://arxiv.org/abs/2605.13941}
}
```

```bibtex
@article{omnisimplemem2026,
  title   = {Omni-SimpleMem: Autoresearch-Guided Discovery of Lifelong Multimodal Agent Memory},
  author  = {Liu, Jiaqi and Ling, Zipeng and Qiu, Shi and Liu, Yanqing and Han, Siwei and Xia, Peng and Tu, Haoqin and Zheng, Zeyu and Xie, Cihang and Fleming, Charles and Ding, Mingyu and Yao, Huaxiu},
  journal = {arXiv preprint arXiv:2604.01007},
  year    = {2026},
}
```

---

## 📄 라이선스

이 프로젝트는 **MIT 라이선스** 하에 라이선스가 부여됩니다 — 자세한 내용은 [LICENSE](../../LICENSE) 파일을 참조하세요.

---

## 🙏 감사의 말

다음 프로젝트와 팀에 감사드립니다:

- 🔍 **임베딩 모델**: [Qwen3-Embedding](https://github.com/QwenLM/Qwen) - 최첨단 검색 성능
- 🗄️ **벡터 데이터베이스**: [LanceDB](https://lancedb.com/) - 고성능 컬럼형 스토리지
- 📊 **벤치마크**: [LoCoMo](https://github.com/snap-research/locomo) - 장기 맥락 기억 평가 프레임워크
