langchain-graphrag-baml
FareedKhan-dev/langchain-graphrag-baml加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在 AI 应用开发中,知识图谱检索增强生成(Graph RAG) 已成为构建高质量问答系统的核心技术。然而,当开发者试图用量化小模型(如 4-bit Llama 3)替代 GPT-4 时,一个令人头疼的问题随之而来:知识抽取失败率极高——LangChain 自带的 LLMGraphTransformer 在小模型上成功率往往只有 20% 左右。
GitHub 用户 Fareed Khan 开源了一个名为 langchain-graphrag-baml 的项目,给出了解决方案:借助 BoundaryML BAML 的模糊解析能力,将小模型的知识图谱抽取成功率从约 25% 提升至 99%+。
在 LangChain 的标准方案中,LLMGraphTransformer 依赖 LLM 输出严格的 JSON 格式,然后使用 json.loads() 解析。一旦 LLM 输出格式有任何偏差——多了一个换行、少了一个引号——整个解析就失败了。
这对 GPT-4 等大模型来说问题不大,但量化小模型(如 4-bit Llama 3、Mistral)的输出格式稳定性远不如大模型,往往会在 JSON 结构中混入自然语言解释、Markdown 格式,甚至部分解析结果。
BAML(Boundary AI Markup Language) 的核心创新在于模糊解析(Fuzzy Parsing)。它不要求 LLM 输出完美的 JSON,而是通过 BAML 编译器在运行时智能地从 LLM 输出中提取符合 schema 的字段,即使输出不完全符合 JSON 格式也能正确提取。这种设计对小模型的"不完美输出"有极强的容错能力。
该项目采用了清晰的三层架构:
第一层:Prompt 定义层(prompts/graphragprompts.py)
包含 LangChain 使用的标准知识图谱提取系统 prompt,定义了节点/关系的标签规范和共指消解策略。
第二层:BAML 模糊解析层(baml_src/graph.baml)
定义了 ExtractGraph 函数,将 LLM 输出映射为结构化的 DynamicGraph(节点+关系)。通过 BAML 的类型系统而非 JSON Schema 来约束输出,配合 Ollama 客户端实现本地模型推理。
第三层:Python 客户端层(baml_client/)
自动生成的同步/异步客户端代码,封装了 BAML 运行时调用逻辑,提供 ExtractDeDupe() 等方法供 notebook 调用。
| 组件 | 作用 | 关键性 |
|---|---|---|
| LangChain | LLM 调用框架,集成 Ollama/OpenAI | 核心框架 |
| baml-py | BAML 运行时,提供模糊解析能力 | 核心创新 |
| Neo4j | 图数据库,存储知识图谱 | 存储层 |
| Ollama | 本地 LLM 推理(Llama 3、Mistral 等) | 可选推理引擎 |
| graphdatascience | Neo4j 图数据科学库 | 分析层 |
项目支持 Ollama 和 OpenAI 两种 LLM 后端,既可以在没有 GPU 的环境下用 Ollama 跑本地模型,也可以接入 OpenAI 云端 API,灵活度很高。
在 README 提供的基准测试中(使用 News 评测数据集),作者对比了两种方案:
这一结果说明:模糊解析不仅提升了鲁棒性,还降低了对模型规模的需求——可以用更小的模型达到更好的效果。
项目以 Jupyter Notebook 形式交付(code.ipynb),分为两个部分:
Part 1:LangChain 标准方案演示(展示局限性)——运行 LLMGraphTransformer 对比不同模型的提取效果。
Part 2:BAML 增强方案(核心解决方案)——使用 BAML 的 ExtractDeDupe 函数,结合 Ollama 驱动的 Llama 3,将结果写入 Neo4j 图数据库,并进行社区检测分析。
安装依赖后(pip install -r requirements.txt),需确保 Neo4j 服务已启动。对于有 LangChain 和 Neo4j 使用经验的开发者来说,上手门槛不高,但完全没有图数据库经验的用户可能需要额外学习曲线。
尽管效果显著,该项目也有一些局限需要注意:
Graph RAG 是当前 RAG 演进的重要方向之一。该项目展示了一条在小模型上可靠运行知识图谱抽取的路径,对于边缘 AI、隐私计算等场景有较高参考价值。
BAML 作为一个新兴的 AI 编程语言,其模糊解析能力在实际生产中往往比严格 JSON Schema 更实用。随着 Ollama 等本地推理工具的成熟,这类"小模型+结构化输出"的组合可能成为越来越多本地 AI 应用的标配。
总结:langchain-graphrag-baml 是一个针对 Graph RAG 小模型痛点的精准实验,通过引入 BAML 模糊解析,显著提升了知识图谱抽取的可靠性。项目代码量不大,但思路清晰,对研究本地 AI 和知识图谱技术的开发者有较高参考价值。