在当今AI时代,检索增强生成(RAG)已成为提升大语言模型回答质量的关键技术。本文将探讨如何结合知识图谱和向量数据库构建更智能的图RAG系统,让AI回答更准确、更可靠。
图RAG是什么?为什么需要它?
想象一下,传统RAG就像是一个勤奋但视野有限的图书管理员,只能根据关键词匹配找到相关书籍。而图RAG则像是一位博学多才的专家,不仅知道每本书的内容,还了解它们之间错综复杂的关联。
传统RAG虽然能从海量文档中检索相关片段,但它就像戴着眼罩看世界—看到了内容,却看不到内容间的联系。图RAG通过引入知识图谱这把"魔法钥匙",打开了数据关系的大门,让AI不仅理解"是什么",还能理解"为什么"和"怎么样",从而提供更全面、更深入的回答。
目前主要有三种实现图RAG的方式:
一是基于向量的检索,将知识图谱向量化存储在向量数据库中,通过相似度匹配检索。
二是相关实体提示查询检索使用LLM将自然语言转换为SPARQL或Cypher查询语句,直接查询知识图谱。
最后就是二者结合的混合方法,结合两者优势,先用向量搜索初步检索,再用知识图谱进行筛选优化。
实验比较:三种方法的优劣
我们以电子商务产品推荐系统为例,对比三种方法在语义搜索、相似度计算和RAG方面的表现。
方法一:向量数据库检索
首先,我们将产品描述和用户评论向量化存入Milvus向量数据库:
# 定义数据模式 collection_name = "products" dim = 1536 # OpenAI embedding维度 # 创建集合 collection = Collection(name=collection_name) collection.create_field(FieldSchema("id", DataType.INT64, is_primary=True)) collection.create_field(FieldSchema("title", DataType.VARCHAR, max_length=200)) collection.create_field(FieldSchema("description", DataType.VARCHAR, max_length=2000)) collection.create_field(FieldSchema("embedding", DataType.FLOAT_VECTOR, dim=dim)) # 写入数据 with collection: for index, row in df.iterrows(): embedding = get_embedding(row.title + " " + row.description) collection.insert([ [index], [row.title], [row.description], [embedding] ])
语义搜索测试:搜索"轻便防水运动鞋"时,返回相关产品:
《超轻透气跑步鞋》
《防水户外徒步鞋》
《多功能运动训练鞋》
这里向量数据库展现了良好的语义理解能力,能找到功能相关的产品,即
使它们的描述用词不完全一致。
当用户询问"推荐适合雨天跑步的鞋子"时,系统检索出相关产品并生成建议:
以下是几款适合雨天跑步的鞋子推荐: - 防水透气跑步鞋XYZ采用特殊橡胶外底,提供优异抓地力 - 全天候运动鞋ABC配备防泼水面料,轻量设计适合长跑 - 专业越野跑鞋DEF具有排水设计,即使踩水也能快速干燥
然而,我们发现一个问题:向量数据库可能会返回视觉上相似但功能不匹配的产品(如时尚休闲鞋),这会导致"上下文污染",使LLM生成的推荐不够精准。
方法二:知识图谱检索
接下来,我们将同样的数据构建成知识图谱:
# 创建实体和关系 g.add((product_uri, RDF.type, Product)) g.add((product_uri, name, Literal(row['title']))) g.add((product_uri, description, Literal(row['description']))) # 添加产品属性和分类关系 for feature in features: feature_uri = create_valid_uri("http://example.org/feature", feature) g.add((feature_uri, RDF.type, Feature)) g.add((product_uri, hasFeature, feature_uri))
语义搜索测试:我们不仅搜索"防水"标签,还利用产品本体的层级关系,同时搜索相关概念如"防泼水"和"快干":
# 获取防水的相关概念 related_concepts = get_all_related_concepts("WaterProof", depth=2) # 将所有概念转为URI进行查询 feature_terms = [convert_to_feature_uri(term) for term in flat_list]
结果返回:
《全天候防水徒步鞋》(标签:防水、耐磨、户外)
《速干涉水溯溪鞋》(标签:快干、防滑、水上运动)
《Gore-Tex专业跑鞋》(标签:防泼水、透气、专业跑步)
知识图谱的优势在于结果可解释性强,我们知道每个产品为什么被选中。
方法三:混合方法
最后,我们结合两种方法的优势:
将产品描述、评论和特性标签一起向量化:# 创建包含产品特性的向量表示 collection = Collection(name="products_with_features") collection.create_field(FieldSchema("id", DataType.INT64, is_primary=True)) collection.create_field(FieldSchema("title", DataType.VARCHAR, max_length=200)) collection.create_field(FieldSchema("description", DataType.VARCHAR, max_length=2000)) collection.create_field(FieldSchema("features", DataType.VARCHAR, max_length=500)) collection.create_field(FieldSchema("product_uri", DataType.VARCHAR, max_length=200)) collection.create_field(FieldSchema("embedding", DataType.FLOAT_VECTOR, dim=dim))先用向量搜索获取初步结果:# 搜索适合雨天跑步的鞋子 search_params = { "metric_type": "COSINE", "params": {"nprobe": 10} } results = collection.search( [get_embedding("适合雨天跑步的鞋子")], "embedding", search_params, limit=20, output_fields=["title", "description", "features", "product_uri"] )再用知识图谱筛选和排序:# 筛选出真正具备防水和跑步功能的产品 query = """ SELECT ?product ?title ?description WHERE { ?product hasFeature ?feature1. ?product hasFeature ?feature2. ?product name ?title. ?product description ?description. FILTER (?product IN (%s) && ?feature1 IN (%s) && ?feature2 IN (%s)) } """
这种混合方法解决了上下文污染问题,最终返回的都是真正适合雨天跑步的专业鞋款:
《GTX防水专业马拉松跑鞋》
《全天候防泼水竞速跑鞋》
《防滑防水越野跑步鞋》
结论与实践建议
从上面的对比,我们可以看到,向量数据库优势是部署简单快速,Milvus提供高性能向量检索,特别适合大规模产品库。缺点是结果不可解释,且存在上下文污染风险。
知识图谱优势,是结果高度可控和可解释,可以精确过滤无关内容。缺点是需要构建和维护知识图谱,查询编写复杂。
而对于混合方法,则利用Milvus的高效检索和知识图谱的精确性,既保证了检索速度,又提高了推荐质量。
在实际应用推荐上,比如做内容推荐,同时考虑主题相似性和内容关联性,避免推荐表面相似但实质不相关的内容,又或者对于客户服务,确保回答不仅相关,还能考虑到产品间的兼容性和搭配关系。
图RAG不仅是技术的组合,更是提升AI系统智能程度的飞跃。通过Milvus的高效向量检索和知识图谱的关系理解,我们的AI不再是简单的"关键词匹配机器",而是真正理解用户需求的"智能顾问"。
写在最后
2025年的今天,AI创新已经喷井,几乎每天都有新的技术出现。作为亲历三次AI浪潮的技术人,我坚信AI不是替代人类,而是让我们从重复工作中解放出来,专注于更有创造性的事情!
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。