FalkorDB:AI代理的图数据库

我们如何构建足够快速以支持实时 LLM 应用的知识图谱?

微软的内存系统、谷歌的代理框架、AWS 的向量存储——大家都在寻找同样的东西。LLM 需要结构化的上下文,而不仅仅是“相似”的文档。而当前的图数据库一旦规模足够大,就会变得非常慢。

这就是 FalkorDB 的用武之地。它是一个开源的高性能图数据库,采用了一种完全不同的图处理方式。

说实话,一旦你了解了它的原理,就会发现它出奇地简单。

1、传统图数据库的问题

大多数图数据库(例如 Neo4j、RedisGraph 等)的工作方式都相同:

  • 节点存储实体
  • 边存储关系
  • 查询一次遍历这些边

因此,当你运行如下查询时:

“显示与此实体相连且距离不超过 3 跳的所有人员”

……数据库基本上就像人看地图一样沿着图进行操作。

当你的图只有 10,000 个节点时,这没什么问题。但当你处理数百万个节点时——这正是 LLM 代理实际需要的规模——遍历就会成为瓶颈。

你的 AI 代理会等待。你的响应时间会受到影响。你的整个实时流程会崩溃。

2、FalkorDB 的奇思妙想:用数学代替遍历

FalkorDB 不逐个链接地遍历图,而是将图表示为稀疏矩阵——一种只存储已存在连接的数学结构。

这一转变带来了三大优势:

  • 查询变成线性代数运算

无需遍历,无需逐跳遍历,只需矩阵乘法和向量运算。

而且数学运算速度极快,快得惊人。

  • 存储空间大幅缩减

稀疏矩阵只存储已存在的连接,没有填充,没有空位。大型图突然间就能装进内存。

  • 非常适合 AI 智能体

LLM依赖于结构化的上下文。图提供结构,稀疏矩阵提供速度。

这正是 AI 应用梦寐以求的组合。

3、但是为什么不直接使用向量搜索呢?

问得好。

向量搜索提供语义相似性——“找到感觉相似的事物”。

但相似性 ≠ 结构。

例如:

  • 向量搜索可能会将水果“苹果”与公司“苹果”匹配。
  • 图不会犯这种错误。
  • 图存储的是关系,而不仅仅是感觉。

这就是为什么智能体记忆系统越来越多地结合以下技术:

  • 用于模糊回忆的向量搜索
  • 用于精确关系的图
  • 用于对两者进行推理的逻辑学习模型 (LLM)

FalkorDB 为图部分提供了实时性能。

4、FalkorDB 究竟能为你带来什么?

以下是简要概述:

  • 使用线性代数实现超高速图查询
  • 为大型图提供稀疏矩阵存储
  • 完全兼容的属性图模型
  • 支持 OpenCypher(与 Neo4j 相同)
  • 专为线性代数建模 (LLM) 和人工智能代理工作负载而设计
  • 多租户,运行于 Redis 内部
  • 100% 开源

而且由于它以 Redis 模块的形式运行,因此部署起来非常便捷。

5、快速入门

如果您想立即尝试:

docker run -p 6379:6379 -p 3000:3000 -it --rm \
  -v ./data:/var/lib/falkordb/data falkordb/falkordb

然后访问:

http://localhost:3000

完成!您现在就拥有一个运行速度极快的图数据库。

6、一个小例子:MotoGP 车手和车队

让我们使用 Python 客户端尝试一些简单的东西。

from falkordb import FalkorDB
# Connect to FalkorDB
db = FalkorDB(host='localhost', port=6379)
# Create or select a graph
g = db.select_graph('MotoGP')
# Add some riders and teams
g.query("""
CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'}),
       (:Rider {name:'Dani Pedrosa'})-[:rides]->(:Team {name:'Honda'}),
       (:Rider {name:'Andrea Dovizioso'})-[:rides]->(:Team {name:'Ducati'})
""")

查询:哪位车手代表雅马哈车队?

res = g.query("""
MATCH (r:Rider)-[:rides]->(t:Team)
WHERE t.name = 'Yamaha'
RETURN r.name
""")
for row in res.result_set:
    print(row[0])

输出:

Valentino Rossi

查询:有多少位车手代表杜卡迪?

res = g.query("""
MATCH (r:Rider)-[:rides]->(t:Team {name:'Ducati'})
RETURN count(r)
""")
print(res.result_set[0][0])

输出:

1

这就是 API 的自然之处。

7、自行将 FalkorDB 加载到 Redis 中

如果您更喜欢原生运行,可以构建模块并将其加载到 Redis 中:

redis-server --loadmodule /path/to/falkordb.so

请注意:

  • 需要 Redis 7.4
  • 您可能需要 libgomp(OpenMP 运行时)

加载成功后,您的 Redis 日志将显示:

Module 'graph' loaded from .../falkordb.so

8、何时应该使用 FalkorDB?

如果您正在构建:

  • AI 代理
  • 内存系统
  • RAG 管道
  • 欺诈检测
  • 云安全图
  • 知识密集型应用程序

……并且您需要实时访问结构化数据关系映射——这是一款值得探索的工具。

性能差异在你尝试的那一刻便显而易见。

9、结束语

FalkorDB 就像是那种默默解决着一个大家都在小心翼翼回避的巨大难题的项目。低层模型(LLM)的发展速度丝毫没有放缓。它们的内存、上下文窗口和世界模型只会越来越大。

而图——尤其是快速的、基于稀疏矩阵的图——正迅速成为人工智能系统思考方式的核心组成部分。

如果你正在构建任何需要以低层模型速度处理关联知识的系统,那么 FalkorDB 绝对值得安装和试用。它是开源的,易于上手,而且使用起来非常有趣。


原文链接:FalkorDB: The Open-Source Graph Database Built for Real-Time AI Agents

汇智网翻译整理,转载请标明出处