微软提出的GraphRAG 很有效,但是官方实现和使用都很复杂,不易修改和定制。近日,网络上出现一个国人开发的更简洁、易用且高度可定制的版本实现——nano-graphrag,它保留了核心功能,同时提供了更友好的用户体验。值得一提的是之前介绍的fast-graphrag也受到了该项目的启发。
延伸阅读:Fast GraphRAG:PageRank 算法为 GraphRAG 插上翅膀,成本降6倍,准确性提升20%。
nano-graphrag 核心特点是其简洁性、易用性和可定制性。代码量仅为 1100 行(不包括测试和提示),是官方实现的紧凑高效替代品。它设计为轻量级、异步和完全类型化,是希望将 GraphRAG 集成到项目中而不增加复杂性的开发者的理想选择。
安装 nano-graphrag 非常简单,可以直接从 PyPi 安装,或从源代码安装以获取最新功能。安装后,您可以通过设置 OpenAI API 密钥并下载文本文件开始工作。
from nano_graphrag import GraphRAG, QueryParam
graph_func = GraphRAG(working_dir="./dickens")
with open("./book.txt") as f:
graph_func.insert(f.read())
# Perform global graphrag search
print(graph_func.query("What are the top themes in this story?"))
# Perform local graphrag search (I think is better and more scalable one)
print(graph_func.query("What are the top themes in this story?", param=QueryParam(mode="local")))
# Batch Insert
graph_func.insert(["TEXT1", "TEXT2",...])
# Incremental Insert
with open("./book.txt") as f:
book = f.read()
half_len = len(book) // 2
graph_func.insert(book[:half_len])
graph_func.insert(book[half_len:])
上面提供的 Python 代码片段展示了图的构建以及如何将文本插入图中并执行全局和局部 GraphRAG 搜索。nano-graphrag 的一个关键特性是支持批量插入和增量插入,这使得在知识图中进行高效更新成为可能,而无需冗余计算。它还支持简单的 RAG 操作,以应对更简单的用例。
对于高级用户,nano-graphrag 提供了一系列自定义选项。您可以替换默认组件,例如 LLM 函数、嵌入函数和存储组件。这种灵活性使您能够根据特定需求定制系统,并将其无缝集成到您的项目中。
nano-graphrag 非常适合对 GraphRAG 感兴趣的人学习和使用,它的简洁性、易用性和可定制性使其成为开发人员选择GraphRAG的平替选择。
后台回复“入群”进群讨论。