Structured Episodic & Entity Memory for multi-turn conversations.
python
from seem_skill import SEEMSkill, SEEMConfig, RecallMode
config = SEEMConfig()
skill = SEEMSkill(config)
# Store conversation
memory_id = skill.store({
"text": "Lena asked about Scottish Terriers",
"speaker": "Alice"
})
# Recall (default: LITE mode — facts + episodic memory, no raw chunks)
result = skill.recall({"text": "What did Lena ask?"}, top_k=3)
# result = {"memories": [...], "facts": [...]}
# Recall with raw chunks
result = skill.recall({"text": "What did Lena ask?"}, mode=RecallMode.PRO)
# Recall with backfill
result = skill.recall({"text": "What did Lena ask?"}, mode=RecallMode.MAX)
ModeFactsEpisodic MemoryRaw ChunksBackfillLite (default)✅✅ (summary + events)❌❌Pro✅✅✅ (top_k)❌Max✅✅✅ (top_k + backfill ≤ 2×top_k)✅
StrategyMethodBest ForDPRDense vector similaritySimple keyword-matching queriesHybrid RRFDense + BM25 sparse fusionMixed keyword + semantic queriesPPRPersonalized PageRank over knowledge graphMulti-hop, entity-rich queries
Default strategy is configured in config.py (currently ppr).
bash
export LLM_API_KEY="sk-xxx"
export LLM_BASE_URL="https://api.deepseek.com"
export LLM_MODEL="deepseek-chat"
export MM_ENCODER_API_KEY="sk-xxx"
export MM_ENCODER_BASE_URL="https://api.siliconflow.cn/v1"
export MM_ENCODER_MODEL="Qwen/Qwen3-Embedding-8B"
All default settings are centralized in seem_skill/config.py:
python
LLM_CONFIG = {
"base_url": "https://api.deepseek.com",
"model": "deepseek-chat",
}
EMBEDDING_CONFIG = {
"base_url": "https://api.siliconflow.cn/v1",
"model": "Qwen/Qwen3-Embedding-8B",
}
Override defaults programmatically:
python
config = SEEMConfig(
llm_api_key="your-key",
llm_model="custom-model",
retrieve_strategy=RetrieveStrategy.PPR,
top_k_facts=10,
ppr_damping=0.6,
)
ParameterDefaultDescriptionretrieve_strategy``hybrid_rrfDPR / Hybrid RRF / PPRtop_k_chunks3Number of chunks to retrievetop_k_facts5Number of fact triples to retrievetop_k_candidates3Integration candidate countrrf_rank_constant30RRF smoothing constantppr_damping0.5PPR teleport probabilitybackfill_chunks5Max additional chunks per backfillenable_fact_graphTrueBuild fact graph on storeentity_similarity_threshold0.9Entity linking thresholdenable_integrationTrueDynamic memory integrationintegration_window3Batch size for deferred integration
bash
python scripts/cli_memory.py store --text "Your message" --speaker user
python scripts/cli_memory.py store --dialogue-id "D1:1" --speaker "Alice" --text "Message"
bash
python scripts/cli_memory.py recall --query "Your query" --mode lite
python scripts/cli_memory.py recall --query "Your query" --mode pro --strategy ppr --top-k 5
python scripts/cli_memory.py recall --query "Your query" --mode max --top-k-facts 10
bash
python scripts/cli_memory.py facts # Show all fact triples
python scripts/cli_memory.py facts --entity 小米 # Filter by entity
bash
python scripts/cli_memory.py display
python scripts/cli_memory.py display --dialogue-id "D1:1"
bash
python scripts/cli_memory.py view
bash
python scripts/cli_memory.py stats
bash
python scripts/cli_memory.py clear --yes
Store Pipeline:
Recall Pipeline:
Graph Structure (NetworkX DiGraph):
entity, chunkentity_chunk (entity → chunk), fact (entity ↔ entity), synonymy (entity ↔ entity)text
SEEM/
├── SKILL.md # This file
├── README.md # Quick reference
├── config.py # Unified configuration (LLM + Embedding)
├── requirements.txt # Python dependencies
├── __init__.py # Package entry point
├── core/
│ ├── __init__.py
│ ├── seem_skill.py # Core implementation (SEEMSkill class)
│ ├── schema.py # Data structures (SEEMConfig, RecallMode, etc.)
│ ├── prompts.py # LLM prompts
│ └── utils.py # LLM client, embedding, BM25, cache
├── scripts/
│ └── cli_memory.py # CLI: store, recall, facts, display, view, stats, clear
├── data/ # Persistent storage (auto-created)
└── tests/
openai>=1.0.0 — LLM and embedding API clientnumpy>=1.21.0 — Vector operationsnetworkx>=3.0 — Knowledge graph, PPR, connected componentsscipy>=1.0 — Required by nx.pagerank()rank-bm25>=0.2.2 — BM25 sparse retrievalnltk>=3.8.0 — Tokenizationtext
Error: Missing API keys
Set environment variables or update config.py:
bash
export LLM_API_KEY="sk-xxx"
export MM_ENCODER_API_KEY="sk-xxx"
text
ModuleNotFoundError: No module named 'scipy'
bash
pip install scipy networkx