# MemoryBear ## 项目简介 MemoryBear 是一个面向智能体的记忆系统与知识管理服务。它支持从对话与文档中萃取结构化知识、生成嵌入向量、构建图谱,提供关键词与语义的混合搜索,并内置遗忘机制与自我反思流程,以维持长期记忆的有效性与可用性。 ## 核心特性 - 知识萃取:陈述句、三元组、时间信息与摘要生成 - 图谱存储:对接 Neo4j 管理实体与关系 - 混合搜索:关键词检索 + 语义向量检索 - 遗忘机制:按记忆强度与时效做逐步衰减 - 自我反思:定期回顾并优化已有记忆 - FastAPI 服务:统一暴露管理端与服务端 API ## 架构总览 - 萃取引擎(Extraction Engine):预处理、去重、结构化提取 - 遗忘引擎(Forgetting Engine):记忆强度模型与衰减策略 - 自我反思引擎(Reflection Engine):评价与重写记忆 - 检索服务:关键词、语义与混合检索 - Agent 与 MCP:提供多工具协作的智能体能力 ## 快速开始 ### 环境要求 - Python 3.12 - PostgreSQL 13+ - Neo4j 4.4+ - Redis 6.0+ ### 安装依赖 ```bash python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 方式一:基于 pyproject 安装 pip install . # 方式二:使用 requirements.txt pip install -r requirements.txt ``` ### 配置环境变量 创建 `.env` 文件(示例): ```env # Postgres DB_HOST=127.0.0.1 DB_PORT=5432 DB_USER=postgres DB_PASSWORD=your-password DB_NAME=redbear-mem DB_AUTO_UPGRADE=false # Neo4j NEO4J_URI=bolt://localhost:7687 NEO4J_USERNAME=neo4j NEO4J_PASSWORD=your-password # Redis REDIS_HOST=127.0.0.1 REDIS_PORT=6379 REDIS_DB=1 # LLM / API Keys(按需) OPENAI_API_KEY=your-openai-key DASHSCOPE_API_KEY=your-dashscope-key # 其他 WEB_URL=http://localhost:3000 LOG_LEVEL=INFO ``` ### 初始化与启动 ```bash # 如需自动迁移数据库:设置 DB_AUTO_UPGRADE=true 或手动执行 alembic upgrade head # 启动开发服务 uvicorn app.main:app --reload --port 8000 # 打开交互文档 # http://localhost:8000/docs ``` ## 项目结构 ``` app/ ├── main.py # FastAPI 入口 ├── controllers/ # 控制器与路由 ├── core/ # 核心:配置、异常、日志等 │ └── memory/ # 记忆模块 │ ├── storage_services/ # 萃取/遗忘/反思/检索 │ ├── agent/ # Agent + MCP 服务 │ ├── utils/ # 工具与提示词 │ └── models/ # 领域模型 └── rag/ # RAG 能力与文档解析 logs/ # 日志与输出 LICENSE # 许可协议(Apache-2.0) README.md # 项目说明 ``` ## API 与路由 - 管理端:`/api`(JWT 认证) - 服务端:`/v1`(API Key 认证) - 根路由健康检查:`GET /` 返回运行状态 - Swagger 文档:`/docs` ## 部署建议 - 使用 `gunicorn` + `uvicorn.workers.UvicornWorker` 作为生产入口 - 配置 `LOG_LEVEL=WARNING` 并启用文件日志 - 数据库与缓存请使用托管服务或独立实例 示例: ```bash gunicorn app.main:app -w 4 -k uvicorn.workers.UvicornWorker ``` ## 许可证 本项目采用 Apache License 2.0 开源协议,详情见 `LICENSE`。 ## 致谢与交流 - 问题反馈与讨论:请提交 Issue 到代码仓库 - 欢迎贡献:提交 PR 前请先创建功能分支并遵循常规提交信息格式