RAG-Anything葡萄酒数据实测

我在65本葡萄酒书籍上测试了RAG-Anything。这是知识图谱做对的地方——以及遗漏的地方。

RAG-Anything葡萄酒数据实测
微信 ezpoda免费咨询:AI编程 | AI模型微调| AI私有化部署
AI工具导航 | Tripo 3D | Meshy AI | ElevenLabs | KlingAI | ArtSpace | Phot.AI | InVideo

我相信通过实践来评估框架。不是通过阅读基准测试。不是通过浏览README。而是通过构建真实的东西,触及边界,并测量发生了什么。

所以当RAG-Anything出现在我的雷达上——一个来自香港大学的开源框架,承诺从多模态文档自动构建知识图谱——我清楚地知道要拿什么来测试它:我的葡萄酒书籍收藏。显而易见的问题——为什么我会有这样的收藏?虽然不是专业品酒师,但我确实完成了WSET课程/考试,不知何故很享受这个过程。

葡萄酒是知识图谱RAG的完美压力测试。这个领域本质上就是关系性的。单宁影响陈年潜力。酸度与单宁相互作用。酵母驱动发酵,产生风味化合物。葡萄品种连接到地区,地区连接到气候,气候连接到葡萄酒风格。如果有什么领域应该从结构化实体-关系提取中受益,而不是扁平向量搜索,那就是这个。

我想回答的具体问题:RAG-Anything能否从真实PDF书籍中提取有用的知识图谱,并比朴素向量搜索更好地回答葡萄酒问题?

这是RAG-Anything承诺的要点。它建立在LightRAG之上(你可以在前面的文章中找到),用多模态文档解析(支持PDF、DOCX、图片)、自动实体-关系提取到知识图谱,以及五种不同的查询模式来让你权衡图谱遍历和向量检索——总的来说听起来很有前景。它支持多种解析器(MinerU、Docling、PaddleOCR)、多种LLM后端,并在摄取期间处理表格、图片和方程。该项目在GitHub上拥有超过15,000颗星——这不是我检查的第一个指标,但仍然令人印象深刻。

你从本文中获得的内容:真实实验的诚实基准、可运行的代码、以及图RAG何时有帮助何时没有的清晰画面。没有炒作,没有挑选的演示。

1、RAG-Anything如何工作(60秒版本)

架构有两个阶段:摄取和查询。

摄取将PDF通过以下管道:

PDF文档
|
v
[文档解析器] ─── MinerU(基于VLM)或Docling(更轻/更便宜)
|
v
[内容提取] ─── 文本、表格、图片、公式
|
v
[实体-关系提取] ─── LLM提取(葡萄酒、地区、化合物、年份)
|
v
[图谱构建] ─── 存储在Neo4j或NetworkX中

查询有五种模式:

  • 本地:使用向量搜索找到相关的文本块
  • 全局:遍历知识图谱,回答需要跨文档综合的问题
  • 混合:结合两者
  • 仅向量:传统的RAG
  • 仅图谱:仅使用结构化关系

关键洞察:本地模式处理"这种葡萄酒的酸度是多少?";全局模式处理"哪些地区的葡萄酒单宁和酸度平衡相似?"

2、实验设置

语料库:65本PDF葡萄酒书籍,涵盖产区、葡萄品种、酿造、品鉴。

基准问题(三类):

  1. 事实查找(局部):"Tempranillo的典型酸度范围是什么?"
  2. 关系推理(全局):"与Pauillac气候条件相似的产区有哪些?"
  3. 综合(混合):"描述Bordeaux 2010年份的品质以及它如何影响了Cabernet Sauvignon的酚类成熟度"

指标

  • 答案相关性(人工评分1-5)
  • 检索准确性(相关实体命中)
  • 延迟(端到端时间)
  • 令牌使用量

基线:朴素向量RAG(无图谱,仅嵌入+相似性搜索)

3、结果:图谱RAG何时获胜

3.1 关系问题:大幅获胜

问题:"哪些凉爽气候产区生产与Burgundy的Pinot Noir风格相似的葡萄酒?"

朴素向量RAG:检索了关于Burgundy Pinot Noir的块,但错过了提及类似风格的凉爽气候产区的关联章节。

RAG-Anything(全局模式):遍历图谱:

  • Burgundy → Pinot Noir → 凉爽气候 → [Oregon、新西兰Central Otago、德国Ahr]
  • 找到连接:土壤类型、温度范围、风格描述符

人工评分:朴素2.5/5,图谱4.5/5

原因:当答案分布在多个文档中,需要显式关系时,图谱遍历有效。

3.2 对比问题:中等获胜

问题:"Priorat和Rioja葡萄酒在单宁结构和陈年方法上有何不同?"

朴素RAG:检索了两个产区的段落,但没有直接对比。

图谱RAG:找到"Priorat → 高单宁 → 需要陈年 → 瓶中发展"和"Rioja → 中等单宁 → 可选陈年 → 橡木影响",然后综合。

人工评分:朴素3.0/5,图谱4.0/5

3.3 简单事实查找:平局(图谱稍慢)

问题:"Merlot的平均酒精度范围是什么?"

两者都正确回答(13-14.5% ABV)。图谱RAG额外工作遍历实体节点。

延迟:朴素0.8秒,图谱2.3秒

令牌使用:朴素1200,图谱3400

结论:对于可以直接从文本中回答的简单事实,额外的图谱开销并不值得。

4、陷阱:知识图谱遗漏的地方

4.1 实体提取失败

问题:"Cardan是什么,它与Bordeaux葡萄酒有什么关系?"

RAG-Anything的提取器错过"Cardan",因为它出现在脚注讨论旋转混合(pumpover)技术中,不是主要实体。图谱没有节点。

修复:摄入前的自定义实体提示(如果你有领域术语表)。

4.2 关系粒度

问题:"酵母菌株如何影响Malbec的风味?"

图谱有"酵母 → 发酵 → 风味"但没有具体的菌株-化合物映射。过于泛化。

根本原因:LLM提取倾向于高阶关系("影响")而不是详细机制。

4.3 多跳推理限制

问题:"哪些葡萄园的收购导致了2010年代Bordeaux价格膨胀,这对出口到亚洲有何影响?"

需要4+跳:收购 → 价格变化 → 出口市场 → 地区影响。

RAG-Anything在3跳后停止(默认设置)。图谱遍历深度是可配置的,但每次额外跳都增加延迟。

5、代码示例:运行你自己的评估

以下是你可以适应自己领域的内容:

from rag_anything import RAGAnything, QueryMode
import pandas as pd

# 初始化
rag = RAGAnything(
    llm_model="gpt-4",
    embedding_model="text-embedding-3-large",
    graph_storage="networkx",  # 或 "neo4j"
    document_parser="docling"  # 或 "mineru"
)

# 摄取语料库
rag.ingest_documents("./wine-books/*.pdf")

# 查询不同模式
modes = [QueryMode.LOCAL, QueryMode.GLOBAL, QueryMode.HYBRID]
results = {}

for mode in modes:
    response = rag.query(
        "哪些凉爽气候产区生产Pinot Noir?",
        mode=mode
    )
    results[mode] = {
        "answer": response.text,
        "sources": response.sources,
        "latency": response.latency_ms,
        "tokens": response.token_usage
    }

# 与朴素RAG比较(无图谱)
baseline = rag.query(
    "哪些凉爽气候产区生产Pinot Noir?",
    mode=QueryMode.VECTOR_ONLY
)

6、成本与实际考虑

摄取成本(65本PDF,平均150页):

  • MinerU解析:$12(VLM-based,更慢但更准确)
  • Docling解析:$3(更快,表格准确度较低)
  • 实体提取:$8(gpt-4,每文档约1,200令牌)
  • 图谱存储:免费(NetworkX)或$5/月(Neo4j Aura免费层)

总摄取:约$23一次

查询成本(平均每查询):

  • 本地模式:$0.04
  • 全局模式:$0.18(更多令牌用于图谱遍历)
  • 朴素RAG:$0.02

结论:如果你主要处理关系查询,额外成本值得。如果主要是事实查找,坚持朴素RAG。

7、什么时候使用RAG-Anything

使用它,当:

  • 你的领域有显式关系(葡萄酒、医学、法律、供应链)
  • 用户提出需要跨文档综合的问题
  • 你有足够文档使摄取成本值得(>20个复杂文档)
  • 你需要可解释性("为什么这个答案?」展示图谱路径)

跳过它,当:

  • 文档大多是独立的(API文档、独立文章)
  • 查询是简单的事实查找
  • 延迟至关重要(图谱遍历增加1-3秒)
  • 你的领域是扁平的,没有丰富关系

我的实际建议:

  • 从混合模式开始。它结合了局部和全局的最佳,自动路由。
  • 投资实体提取。最便宜的查询改进是更好的实体识别。自定义你的提示。
  • 监控图谱密度。稀疏图谱(少关系)表现像昂贵向量RAG。检查提取指标。
  • 使用正确的存储。NetworkX用于原型(<10k节点)。当规模扩大时转向Neo4j。

8、结束语

RAG-Anything交付了它所承诺的:一种结合向量检索和知识图谱遍历的实用方法,用于多模态文档。

它并不在所有地方都更好。对于简单的事实查找,它是开销。但对于关系推理——"这个如何影响那个"的问题——它比朴素RAG有显著改进。

关键是你领域的结构。葡萄酒非常关系化。你的领域可能不是。

我仍在使用它处理我的葡萄酒收藏。65本书,现在可查询的关联。不是炒作。只是有效。


原文链接: I Tested RAG-Anything on 65 Wine Books.

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