Skip to main content

智能记忆代理 —— 工作记忆管理、情节记忆总结与语义记忆提取

Project description

Memory Agent

智能记忆代理 —— 为 AI Agent 提供可插拔的记忆管理系统。

Memory Agent 模拟人类记忆的多层次结构,提供三种记忆类型:

  • 工作记忆(Working Memory):基于关键词匹配的会话内临时记忆,支持 TTL 自动过期。
  • 情节记忆(Episodic Memory):基于向量语义检索的对话/事件记忆,支持自动摘要生成。
  • 语义记忆(Semantic Memory):从情节记忆中通过 LLM 提取的持久化知识图谱实体,支持关系管理。

Memory Agent 设计为可被外部 Agent 项目通过 pip install 直接集成的独立 Python 包。

安装

从 PyPI 安装(推荐)

pip install ai-memory-hub

从源码安装(开发模式)

git clone <your-repo-url>
cd ai-memory-hub
pip install -e .

安装开发依赖

pip install -e ".[dev]"

快速开始

import asyncio
from memory_agent import MemoryManager, MemoryConfig

async def main():
    # 1. 加载配置(自动从环境变量和 .env 文件加载)
    config = MemoryConfig()

    # 2. 初始化管理器(自动装配所有内部组件)
    manager = MemoryManager(config)

    # 3. 写入三种类型的记忆
    session = "demo-session"

    # 工作记忆 —— 会话内临时上下文
    await manager.remember(
        "用户正在学习 Python 异步编程",
        memory_type="working",
        session_id=session,
    )

    # 情节记忆 —— 对话/事件记录
    await manager.remember(
        "今天用户问了关于 asyncio 的问题,表现出对 Python 并发编程的浓厚兴趣",
        memory_type="episodic",
        session_id=session,
    )

    # 语义记忆 —— LLM 自动提取实体并持久化
    await manager.remember(
        "用户偏好:Python 编程语言,日常使用 VSCode 编辑器",
        memory_type="semantic",
    )

    # 4. 跨类型检索(自动聚合并排序)
    results = await manager.recall(
        query="编程相关",
        memory_type=None,  # 检索所有类型
        top_k=5,
        session_id=session,
    )
    for item in results:
        print(f"[{item.memory_type.value}] {item.content}")

    # 5. 记忆整合 —— 从情节记忆中提取知识更新语义记忆
    consolidate_result = await manager.consolidate(time_window_hours=24)
    print(f"新建实体: {consolidate_result.new_entities}")

    # 6. 清理会话工作记忆
    await manager.clear_session(session)

asyncio.run(main())

完整示例见 examples/basic_usage.py

配置

环境变量

Memory Agent 通过 MemoryConfig(基于 pydantic-settings)加载配置,支持 .env 文件和环境变量。

变量名 默认值 说明
DEEPSEEK_API_KEY "" DeepSeek API 密钥(必填
DEEPSEEK_MODEL deepseek-chat 使用的 LLM 模型名称
DEEPSEEK_BASE_URL https://api.deepseek.com/v1 API 基础地址
DEEPSEEK_TIMEOUT 30.0 API 请求超时秒数
DEEPSEEK_MAX_RETRIES 3 最大重试次数
EMBEDDING_MODEL_NAME models/bge-small-zh-v1.5 嵌入模型路径
EMBEDDING_DEVICE cpu 推理设备(cpu/cuda)
CHROMA_PERSIST_DIR ./data/chroma ChromaDB 持久化目录
DEFAULT_TTL_SECONDS 3600 工作记忆默认存活时间(秒)
MAX_CONTENT_LENGTH 50000 内容最大字符数
SUMMARY_THRESHOLD 2000 触发自动摘要的字符数阈值
LOG_LEVEL INFO 日志级别

.env 文件示例

DEEPSEEK_API_KEY=sk-your-key-here
EMBEDDING_DEVICE=cpu
CHROMA_PERSIST_DIR=./data/chroma
LOG_LEVEL=INFO

模块架构

+--------------------------------------------------------------+
|                     ai-memory-hub 总体架构                      |
+--------------------------------------------------------------+
|                                                              |
|  用户代码 / 外部 Agent                                        |
|       |                                                      |
|       v                                                      |
|  +---------------------------+   memory_agent/__init__.py     |
|  |      MemoryManager        |   (公开 API 导出)              |
|  |      (总调度器)            |                                |
|  +-----+----------+----------+                               |
|        |          |          |                                |
|        v          v          v                                |
|  +----------+ +----------+ +----------+                      |
|  | Working  | | Episodic | | Semantic |   core/               |
|  | Memory   | | Memory   | | Memory   |   (核心模块)           |
|  +----+-----+ +----+-----+ +----+-----+                      |
|       |            |            |                             |
|       v            v            v                             |
|  +----------+ +----------+ +----------+                      |
|  |InMemory  | | ChromaDB | | ChromaDB |   storage/            |
|  |Store     | |(collection| |(collection|  (存储后端)           |
|  |          | | episodic) | | semantic)|                      |
|  +----------+ +----+-----+ +----+-----+                      |
|                    |            |                             |
|                    v            v                             |
|              +----------------------+                        |
|              |   LocalEmbedder      |  embedding/             |
|              | (BGE-small-zh-v1.5)  |  (嵌入模型)             |
|              +----------------------+                        |
|                                                              |
|              +----------------------+                        |
|              |   DeepSeekClient     |  llm/                  |
|              | (DeepSeek API/       |  (LLM 客户端)           |
|              |  OpenAI 兼容)        |                        |
|              +----------------------+                        |
|                                                              |
|  数据模型层 (models/):                                        |
|  MemoryItem, Episode, Entity, ConsolidateResult              |
|                                                              |
|  工具层 (utils/):                                             |
|  MemoryConfig, 异常体系, Logger                              |
+--------------------------------------------------------------+

数据流

  remember("content", type="episodic")
       |
       v
  MemoryManager.remember()
       |
       +--> type="working"  --> WorkingMemory.add()    --> InMemoryStore
       |
       +--> type="episodic" --> EpisodicMemory.add_episode()
       |                           |
       |                           +--> LocalEmbedder.embed()
       |                           +--> ChromaStore.add()
       |                           +--> [LLM 摘要] (可选)
       |
       +--> type="semantic" --> LLM Client.extract_entities()
                                    |
                                    +--> SemanticMemory.add_entity()
                                    +--> SemanticMemory.add_relation()

  recall("query", type=None)
       |
       v
  MemoryManager.recall()
       |
       +--> asyncio.gather() 并行检索
       |       |
       |       +--> WorkingMemory.search()
       |       +--> EpisodicMemory.search()
       |       +--> SemanticMemory.search_entities()
       |
       +--> 聚合排序(工作记忆优先) --> List[MemoryItem]

  consolidate(time_window_hours=24)
       |
       v
  EpisodicMemory.get_recent()
       |
       +--> LLM Client (few-shot 提示词提取)
       |
       +--> 实体合并/创建 --> SemanticMemory
       +--> 关系建立 --> SemanticMemory.add_relation()
       |
       +--> ConsolidateResult

运行测试

# 运行全部测试
pytest tests/ -v

# 仅运行集成测试
pytest tests/test_manager.py -v

# 生成覆盖率报告
pytest tests/ -v --cov=memory_agent --cov-report=term

限制与注意事项

  • ChromaDB 并发限制PersistentClient 不支持多进程并发写入同一持久化目录,请勿在多个进程中共享同一 ChromaDB 目录。
  • 嵌入模型:首次运行时会下载 BGE 嵌入模型(约 100MB),请确保网络畅通或提前将模型放置于 models/bge-small-zh-v1.5 目录。
  • LLM 依赖remember("semantic")consolidate() 依赖 DeepSeek API,请在运行前配置有效的 DEEPSEEK_API_KEY

许可证

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_memory_hub-0.1.1.tar.gz (75.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ai_memory_hub-0.1.1-py3-none-any.whl (54.8 kB view details)

Uploaded Python 3

File details

Details for the file ai_memory_hub-0.1.1.tar.gz.

File metadata

  • Download URL: ai_memory_hub-0.1.1.tar.gz
  • Upload date:
  • Size: 75.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for ai_memory_hub-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4d69fdbdeb5d5095f3c9ae45debbad7332be68b62c4531e699f7c70dd50a2a08
MD5 ddfe8ada4f0fad49c6316b58cb7452e6
BLAKE2b-256 1bdbafbedf245043819190606f5c92e234ae85d3c31057496faab6aeb557325e

See more details on using hashes here.

File details

Details for the file ai_memory_hub-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ai_memory_hub-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 54.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for ai_memory_hub-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 10ffbd77bea18a950b49f9ce63af718341f1c610504b8514d23de776e749612f
MD5 458c44721a35d486b39e59b1b2aea974
BLAKE2b-256 e9837705fdeb5e249435a9864f44ff599adb1b0251a8bad231cbc385bdcb43df

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page