来源:市场资讯
(来源:王晋东不在家)
![]()
RAG 凭借其动态知识更新、高性价比与卓越的落地性,至今仍是构建 LLM 应用的核心架构。然而,面对日益复杂的应用场景,单一的技术路线已难以满足多样化的需求。
与当前业界优秀的主流 RAG 解决方案 LightRAG、RAG-Flow 、GraphRAG 相比,我们观察到:
追求轻量高效的 LightRAG,在复杂推理上可能受限;
强调开箱即用与流程自动化的 RAG-Flow,在应对高度定制化的企业级需求时可能不够灵活;
而擅长深度推理的经典 GraphRAG,其构建与计算成本又令人望而却步。
是否存在一个框架,能让我们不必在效果、成本与灵活性之间艰难妥协?
为此,数创弧光 DataArc 正式开源新一代检索增强生成框架——RAG-ARC。同样 750k token 的文本,使用 GraphRAG 构图需要超过 20+ 小时,使用 LightRAG 缩减到105min,但使用 RAG-ARC 仅需 8min!
RAG-ARC 并非在单一维度追求极致,而是致力于为大多数场景提供功能全面、架构灵活且快速高效的工程化解决方案。此外,RAG-ARC 还具备小语种能力,如阿语、泰语等小语种检索、OCR等,以此更好地服务阿拉伯及泰国市场。
Github 地址:
https://github.com/DataArcTech/RAG-ARC
如果这个项目对您有所启发或帮助,请不要吝啬您的 Star ⭐ 与分享~
同时,我们也非常欢迎您通过 Issue 提交宝贵的反馈和建议,和我们一起改进 RAG-ARC,我们将持续迭代,您的支持是我们构建开源生态的最大动力!
1
什么是 RAG-ARC?
RAG-ARC 是一个模块化的检索增强生成(RAG)框架,旨在构建高效、可扩展的架构,支持多路径检索、图结构提取和融合排序。
RAG-ARC 解决了传统RAG系统在处理非结构化文档(PDF、PPT、Excel等)时的关键挑战,如信息丢失、检索准确率低和多模态内容识别困难等问题。
想象一下,如果你的RAG系统可以像“搭乐高”一样,根据不同的场景(例如,简单QA vs 复杂推理)自由组合最优的技术组件,那会多么高效?RAG-ARC 正是为此而生。
![]()
图1 RAG-ARC 系统架构概览
如上图所示,RAG-ARC 提供了清晰的分层设计:文档解析→多路径检索→融合排序→生成。
数据层:支持多格式文档解析(DOCX、PDF、PPT、Excel、HTML等),具备 OCR 和布局分析能力。
核心层:集成了文本分块、向量化、多路径检索、图结构提取与重排序等核心模块。
应用层:提供统一的 API 和业务逻辑,支持标准 RAG 与高级 GraphRAG 模式。
这种设计让开发者能够精准控制流程的每一个环节,实现高度的定制化。
核心优势
基于工程实践和业务价值的角度,对 RAG-ARC、GraphRAG、LightRAG 与 RAG-flow 等主流框架的对比分析如下:
![]()
图2 RAG-ARC 与主流 RAG 框架对比
由上图可见,以上框架在不同场景下各有所长:GraphRAG 精于深度推理,LightRAG 追求极致的轻量高效,RAG-flow 注重开箱即用的自动化体验。
而RAG-ARC 凭借其模块化设计、多路径检索融合与显著的 Token 成本优化,在效果、灵活性与运营成本之间取得了出色平衡,展现出均衡且强大的综合能力,是当前面向复杂企业级应用的优秀选择。
![]()
图3 RAG-ARC 展现“五边形”综合能力
RAG-ARC主要优势在于:
把 Token 成本打下来了
通过优化提示词和检索策略,我们在HippoRAG2 的基础上把平均 Token 消耗降低了 22.9%。现在,用同样的预算,你的模型可以处理更多对话或更复杂的查询。
让检索效果更稳了针对文档“找不全”的老大难问题,我们优化了检索路径和剪枝逻辑,将整体召回率提升了 5.3%。这意味着系统能更可靠地找到那些藏在角落的关键信息。
让知识更新更省心了知识图谱现在支持增量更新。当你只是新增部分文档时,不再需要耗时耗力地全量重构图谱,维护成本和等待时间都大幅减少。
让系统架构更灵活了核心组件全部模块化设计,检索器、大模型等可以像乐高一样按需替换。现在,你可以自由搭配技术栈或单独升级某个部件,而无需重构整个系统。
让小语种扩展更可行了
简单来说,就是:效果更强了,开销更小了,维护更轻了,搭建更自由了,还能支持小语种。想了解 RAG-ARC 在HotpotQA、2Wiki、Musique 三个复杂问答数据集上的表现,请滑动文章到第 3 部分-RAG-ARC实战效果。
适配场景
企业级知识库与客服系统
痛点:企业内部的产品文档、技术手册、客户案例分散在不同格式文件中,客服人员难以快速找到准确答案。RAG-ARC解决方案:
支持PDF、PPT、Excel等多格式文档统一处理
增量更新能力让新产品文档上线后无需重建整个知识库
Token成本降低22.9%使得大量客服对话场景更具经济性
多路径检索能同时支持语义检索与字面匹配,无论是理解复杂的业务描述,还是精准查找产品型号,都能准确命中。
⚖️ 法律咨询与案例检索
痛点:法律从业者需要精确查找相关法条和判例,传统关键词搜索经常遗漏语义相关的关键案例。RAG-ARC解决方案:
多路径检索同时保证法条的字面匹配和案例的语义相似度
重排序机制将最相关的判例置于结果前列
支持法律文档的版本管理和追溯,适应法律条文的更新需求
金融风控与合规审查
痛点:金融机构需要监控海量交易记录和监管文件,识别复杂的风险模式。RAG-ARC解决方案:
知识图谱识别实体间的隐藏关联(如:多个交易方背后的实际控制人)
增量更新适应频繁变化的监管政策
模块化架构允许灵活接入实时数据流,支持动态风险监测
个人知识管理
痛点:个人积累的阅读笔记、收藏文章、工作文档难以有效组织和检索。RAG-ARC解决方案:
轻量级部署适合个人使用
支持PDF、Excel、Markdown、HTML等常见个人文档格式
语义检索让用户用自然语言查找:“我记得去年读过一篇关于注意力机制优化的文章”
2
RAG-ARC 详细上手教程
安装环境
仅需几行简单代码即可创建相应模块,用户可根据已有模块、或者创建自己的模块,来定义专属工作流。
git clone https://github.com/DataArcTech/RAG-ARC.gitcd RAG-ARCuv syncsource .venv/bin/activate # 激活环境cp .env.example .env # 创建环境配置,密钥等在里面,根据说明填入key目前已有模块可以在
config
里面找到相关的配置代码,通过配置即可完成相应模块的创建。
chat模块
import jsonfrom dotenv import load_dotenvload_dotenv()from config.encapsulation.llm.chat.openai import OpenAIChatConfigJSON_CONFIG = """"type": "openai_chat","model_name": "gpt-4o-mini"# 注意,需要先在.env上填入相应的keydef main(query: str) -> None:config_data = json.loads(JSON_CONFIG)llm_config = OpenAIChatConfig.model_validate(config_data)llm = llm_config.build() # 只需要两行代码即可完成llm的创建messages = [{"role": "system", "content": "You are a helpful Chinese assistant."},{"role": "user", "content": query}response = llm.chat(messages)print("\nResponse:")print(response)if __name__ == "__main__":main("你是谁?")Extractor
extractor模块依赖chat模块,通过调用LLM去完成三元组抽取。
像这种有依赖的情况,可以通过嵌套的方式完成配置。可见下面的例子,创建一个extractor,里面嵌套了chat模块的配置。
import asyncioimport jsonfrom pprint import pprintfrom dotenv import load_dotenvload_dotenv()from config.core.file_management.extractor.hipporag2_extractor_config import(HippoRAG2ExtractorConfig,from encapsulation.data_model.schema import ChunkJSON_CONFIG = """"type": "hipporag2_extractor","llm_config": {"type": "openai_chat","model_name": "gpt-4o-mini"},"max_concurrent": 2 # 并发数量,该参数控制并发数量async def main():config_data = json.loads(JSON_CONFIG)extractor_config = HippoRAG2ExtractorConfig.model_validate(config_data)extractor = extractor_config.build()chunks = [Chunk(content=("OpenAI 是一家人工智能研究机构,成立于 2015 年。""其目标是确保通用人工智能造福全人类。"),Chunk(content=("萨姆·阿尔特曼是 OpenAI 的联合创始人兼 CEO,长期关注 AI 安全问题。"),Chunk(content=("微软于 2019 年与 OpenAI 建立战略合作关系,双方在云算力上紧密协作。"),processed_chunks = await extractor(chunks)for idx, chunk in enumerate(processed_chunks, start=1):print(f"=== Chunk #{idx} ===")pprint(chunk.graph.entities)pprint(chunk.graph.relations)print()if __name__ == "__main__":asyncio.run(main())Embedding
import jsonfrom dotenv import load_dotenvload_dotenv()from config.encapsulation.llm.embedding.qwen import QwenEmbeddingConfigJSON_CONFIG = """"type": "qwen_embedding","loading_method": "huggingface","model_name": "sentence-transformers/all-MiniLM-L6-v2", # 模型名称或者模型路径"device": "cuda:0","use_china_mirror": true # 是否使用国内镜像源def main() -> None:config_data = json.loads(JSON_CONFIG)embedding_config = QwenEmbeddingConfig.model_validate(config_data)embedding_model = embedding_config.build()texts = ["OpenAI 于 2015 年成立。","萨姆·阿尔特曼是 OpenAI 的 CEO。"embeddings = embedding_model.embed(texts)for text, vector in zip(texts, embeddings):print(f"文本: {text}")print(f"向量维度: {len(vector)}")if __name__ == "__main__":main()GraphStore
需要依赖embedding模型。
import jsonfrom pprint import pprintfrom dotenv import load_dotenvload_dotenv()from config.encapsulation.database.graph_db.pruned_hipporag_igraph_config import(PrunedHippoRAGIGraphConfig,from encapsulation.data_model.schema import Chunk, GraphDataGRAPH_CONFIG_JSON = """"type": "pruned_hipporag_igraph","storage_path": "./data/demo_graph_index","add_synonymy_edges": true, # 同义边,启动后可以提高召回率"embedding": { # 嵌入子模块"type": "qwen_embedding","loading_method": "huggingface","model_name": "sentence-transformers/all-MiniLM-L6-v2","device": "cpu","cache_folder": "./models/all-MiniLM-L6-v2","use_china_mirror": truedef build_sample_graph_data() -> Chunk:entities = [{"id": "e1", "entity_name": "OpenAI", "entity_type": "组织", "attributes": {}},{"id": "e2", "entity_name": "2015年", "entity_type": "日期", "attributes": {}},{"id": "e3", "entity_name": "萨姆·阿尔特曼", "entity_type": "人物", "attributes": {}},{"id": "e4", "entity_name": "CEO", "entity_type": "职位", "attributes": {}},relations = [["OpenAI", "成立于", "2015年"],["萨姆·阿尔特曼", "担任", "CEO"]graph_data = GraphData(entities=entities, relations=relations, metadata={"source": "demo"})chunk = Chunk(id="chunk-demo-1",content="OpenAI 于 2015 年成立,萨姆·阿尔特曼担任 CEO。",graph=graph_data,returnchunkdef main() -> None:config_data = json.loads(GRAPH_CONFIG_JSON)graph_config = PrunedHippoRAGIGraphConfig.model_validate(config_data)graph_store = graph_config.build()chunk = build_sample_graph_data()# 直接在 Chunk 上附加抽取结果,然后使用 build_index 批量入库graph_store.build_index([chunk])graph_store.save_index(config_data['storage_path']) # 保存到磁盘中info = graph_store.get_graph_db_info()print("=== 图谱存储信息 ===")pprint(info)if __name__ == "__main__":main()GraphRAG
import jsonfrom dotenv import load_dotenvload_dotenv()from config.core.retrieval.pruned_hipporag_config import PrunedHippoRAGRetrievalConfigRETRIEVAL_CONFIG_JSON = """"type": "pruned_hipporag_retrieval","graph_config": { # 引用GraphStore子模块"type": "pruned_hipporag_igraph","storage_path": "./data/demo_graph_index","add_synonymy_edges": true,"embedding": {"type": "qwen_embedding","loading_method": "huggingface","model_name": "sentence-transformers/all-MiniLM-L6-v2","device": "cpu","cache_folder": "./models/all-MiniLM-L6-v2","use_china_mirror": true},"enable_llm_reranking": true,"expansion_hops": 2,"include_chunk_neighbors": true,"enable_pruning": true,"fact_retrieval_top_k": 10,"max_facts_after_reranking": 3,"damping_factor": 0.5,"passage_node_weight": 0.05def main() -> None:retrieval_config_data = json.loads(RETRIEVAL_CONFIG_JSON)retrieval_config = PrunedHippoRAGRetrievalConfig.model_validate(retrieval_config_data)retriever = retrieval_config.build()query = "OpenAI 的创始人是谁?"results = retriever.retrieve(query, top_k=3)print(f"=== 查询: {query} ===")for idx, chunk in enumerate(results, start=1):print(f"结果 #{idx}")print(f"内容: {chunk.content}")if __name__ == "__main__":main()注意事项
共享模块: 为避免重复创建和资源浪费,共用子模块(如embedding模型)通过@shared_module注解实现共享:配置相同时,各模块复用同一实例。
单例模块:数据库(如 Redis、PostgreSQL)全局唯一,使用 @singleton 实现单例。
3
RAG-ARC 实战效果
RAG-ARC 的检索效果与效率如何?在三大公开评测集上,见证性能与成本的双重优化。
1. 答案准确率更高在 HotpotQA、2Wiki、Musique 三个复杂问答数据集上,RAG-ARC 的准确率全面超越基线方法 HippoRAG2。例如在需要多步推理的 HotpotQA 任务中,准确率从 83.2% 提升至 85.4%。
![]()
图4 RAG-ARC 在 HotpotQA 等复杂推理数据集的表现
2. 信息检索更全面在衡量检索能力的关键指标上,RAG-ARC 同样表现优异。在 2Wiki 数据集上,其 Recall@5 达到 80.43%,相比基线方法的 75.42% 有明确提升,表明系统能更全面地找到相关信息。
![]()
图5 RAG-ARC
在 2Wiki 等数据集检索表现最佳
3. 构图成本大幅降低在知识图谱构建效率上优势明显。在 Musique 数据集上,构图所需的 Token 消耗从基线方法的约 8700 万大幅降低至约 1000 万,成本降至约十分之一,为知识库的快速迭代更新提供了技术基础。
![]()
数创弧光(DataArc)由 粤港澳大湾区数字经济研究院(IDEA研究院)孵化,是一家专注于大模型数据合成领域的创新企业。公司凭借领先的技术能力与清晰的商业模式,已完成多轮数千万种子轮融资,展现出强劲的发展潜力。
期待您的关注,第一时间获取AI数据领域深度思考与行业洞见!
如对数创弧光产品感兴趣,欢迎咨询合作:
contact@dataarctech.com
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.