Neo4j Agent Memory
三种内存类型,一个图数据库
大多数智能体内存系统只提供扁平的上下文窗口或简单的向量存储。Neo4j 智能体内存为你的智能体提供了三个独特的内存层——它们全部连接在一个知识图谱中。
短期内存
对话与经历
包含顺序消息链、会话管理、基于元数据的搜索和对话摘要的完整对话历史。
- 语义消息搜索
- 会话范围界定与列表
- 元数据过滤
- 基于大语言模型的摘要
长期内存
事实、实体与偏好
一个由实体(人、地点、组织)、偏好、事实和关系构成的知识图谱——自动从对话中构建。
- POLE+O 实体分类
- 实体去重
- 时间事实有效期
- 地理空间查询
推理内存
工具使用与推理轨迹
记录智能体如何解决问题——每一个思考、工具调用和结果——使其能够从过去的推理模式中学习。
- 轨迹相似度搜索
- 工具调用统计
- 与消息关联的轨迹
- 流式轨迹记录
async with MemoryClient(settings) as memory:
# Short-term: store conversations
await memory.short_term.add_message(session_id, "user", "Find Italian restaurants near me")
# Long-term: build a knowledge graph
await memory.long_term.add_entity("La Trattoria", "ORGANIZATION", subtype="COMPANY")
# Reasoning: record how the agent solved problems
trace = await memory.reasoning.start_trace(session_id, task="Restaurant search")
await memory.reasoning.record_tool_call(step.id, "search_api", {"query": "Italian"}, results)
await memory.reasoning.complete_trace(trace.id, outcome="Recommended La Trattoria", success=True)
# Get unified context for LLM prompts
context = await memory.get_context("restaurant recommendation", session_id=session_id)
独特之处
图原生,而非外挂式
从零开始基于 Neo4j 构建。实体、消息、轨迹和偏好都是节点和关系——而不是表中的行或向量存储中的块。通过一次遍历即可查询所有内存类型。
矢量 + 图 + 空间合一
在同一个数据库中完成语义相似度搜索、图遍历和地理空间查询。无需单独的向量数据库、Redis 或 Postgres。按含义、关系或位置查找实体。
多阶段实体提取
在可配置的流水线中结合 spaCy、GLiNER2、GLiREL 和 LLM 提取器。支持 8 种领域模式(播客、新闻、医疗、法律……)。支持为 10 万+ token 的文档进行流式提取。
三层内存,紧密相连
短期对话为长期实体提取提供信息。推理轨迹回溯至触发消息。智能体能够理解发生了什么、它知道什么以及它是如何解决问题的。
维基百科丰富信息与地理编码
实体会自动通过维基百科描述、图像和维基数据 ID 进行增强。位置实体获取地理空间查询所需的坐标。这一切都在后台完成。
框架中立
适用于 LangChain、PydanticAI、LlamaIndex 和 CrewAI。也可以直接使用客户端。选择你喜欢的智能体框架——内存层保持不变。
演示
Lenny's 播客内存探索器
将 299 期播客转化为可搜索的知识图谱,配备全栈 AI 聊天智能体、交互式图谱可视化、地理空间地图视图和维基百科增强的实体卡片。
全栈聊天智能体
一个新闻研究助手,它使用所有三种内存类型并提供交互式内存图谱可视化。双击节点可展开邻居并探索知识图谱。
快速入门
pip install neo4j-agent-memory[openai]
import asyncio
from pydantic import SecretStr
from neo4j_agent_memory import MemoryClient, MemorySettings
async def main():
settings = MemorySettings(
neo4j={"uri": "bolt://:7687", "password": SecretStr("password")}
)
async with MemoryClient(settings) as memory:
# Store a conversation
await memory.short_term.add_message("user-123", "user", "I love Italian food!")
# Build knowledge automatically
await memory.long_term.add_preference("food", "Loves Italian cuisine", confidence=0.9)
# Get combined context for your LLM
context = await memory.get_context("restaurant recommendation", session_id="user-123")
print(context)
asyncio.run(main())
实体提取流水线
在可配置的流水线中组合提取器。支持 5 种合并策略和 8 种领域模式。支持为 10 万+ token 的文档进行流式提取。
架构
┌─────────────────────────────────────────────┐
│ MemoryClient │
├───────────────┬──────────────┬──────────────┤
│ Short-Term │ Long-Term │ Reasoning │
│ Memory │ Memory │ Memory │
├───────────────┴──────────────┴──────────────┤
│ Extraction Pipeline │
│ ┌───────┬─────────┬────────┬─────┐ │
│ │ spaCy │ GLiNER2 │ GLiREL │ LLM │ │
│ └───────┴─────────┴────────┴─────┘ │
├─────────────────────────────────────────────┤
│ Neo4j Graph Database │
│ Nodes · Relationships · Vectors · Spatial │
└─────────────────────────────────────────────┘
文档
需求
-
Python 3.10+
-
Neo4j 5.20+(建议安装 APOC 插件)
-
OpenAI API Key(用于嵌入和 LLM 提取)