知識圖譜+向量數(shù)據(jù)庫:打造更智能的RAG系統(tǒng)
在當(dāng)今AI時代,檢索增強生成(RAG)已成為提升大語言模型回答質(zhì)量的關(guān)鍵技術(shù)。本文將探討如何結(jié)合知識圖譜和向量數(shù)據(jù)庫構(gòu)建更智能的圖RAG系統(tǒng),讓AI回答更準確、更可靠。
圖RAG是什么?為什么需要它?
想象一下,傳統(tǒng)RAG就像是一個勤奮但視野有限的圖書管理員,只能根據(jù)關(guān)鍵詞匹配找到相關(guān)書籍。而圖RAG則像是一位博學(xué)多才的專家,不僅知道每本書的內(nèi)容,還了解它們之間錯綜復(fù)雜的關(guān)聯(lián)。
傳統(tǒng)RAG雖然能從海量文檔中檢索相關(guān)片段,但它就像戴著眼罩看世界—看到了內(nèi)容,卻看不到內(nèi)容間的聯(lián)系。圖RAG通過引入知識圖譜這把"魔法鑰匙",打開了數(shù)據(jù)關(guān)系的大門,讓AI不僅理解"是什么",還能理解"為什么"和"怎么樣",從而提供更全面、更深入的回答。
目前主要有三種實現(xiàn)圖RAG的方式:
一是基于向量的檢索,將知識圖譜向量化存儲在向量數(shù)據(jù)庫中,通過相似度匹配檢索。二是相關(guān)實體提示查詢檢索使用LLM將自然語言轉(zhuǎn)換為SPARQL或Cypher查詢語句,直接查詢知識圖譜。最后就是二者結(jié)合的混合方法,結(jié)合兩者優(yōu)勢,先用向量搜索初步檢索,再用知識圖譜進行篩選優(yōu)化。
實驗比較:三種方法的優(yōu)劣
我們以電子商務(wù)產(chǎn)品推薦系統(tǒng)為例,對比三種方法在語義搜索、相似度計算和RAG方面的表現(xiàn)。
方法一:向量數(shù)據(jù)庫檢索
首先,我們將產(chǎn)品描述和用戶評論向量化存入Milvus向量數(shù)據(jù)庫:
# 定義數(shù)據(jù)模式
collection_name = "products"
dim = 1536
# OpenAI embedding維度
# 創(chuàng)建集合
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))
# 寫入數(shù)據(jù)
with collection:
for index, row in df.iterrows():
embedding = get_embedding(row.title + " " + row.description) collection.insert([ [index], [row.title], [row.description], [embedding] ])
語義搜索測試:搜索"輕便防水運動鞋"時,返回相關(guān)產(chǎn)品:
《超輕透氣跑步鞋》
《防水戶外徒步鞋》
《多功能運動訓(xùn)練鞋》
這里向量數(shù)據(jù)庫展現(xiàn)了良好的語義理解能力,能找到功能相關(guān)的產(chǎn)品,即
使它們的描述用詞不完全一致。
當(dāng)用戶詢問"推薦適合雨天跑步的鞋子"時,系統(tǒng)檢索出相關(guān)產(chǎn)品并生成建議:
以下是幾款適合雨天跑步的鞋子推薦:
- 防水透氣跑步鞋XYZ采用特殊橡膠外底,提供優(yōu)異抓地力
- 全天候運動鞋ABC配備防潑水面料,輕量設(shè)計適合長跑
- 專業(yè)越野跑鞋DEF具有排水設(shè)計,即使踩水也能快速干燥
然而,我們發(fā)現(xiàn)一個問題:向量數(shù)據(jù)庫可能會返回視覺上相似但功能不匹配的產(chǎn)品(如時尚休閑鞋),這會導(dǎo)致"上下文污染",使LLM生成的推薦不夠精準。
方法二:知識圖譜檢索
接下來,我們將同樣的數(shù)據(jù)構(gòu)建成知識圖譜:
# 創(chuàng)建實體和關(guān)系
g.add((product_uri, RDF.type, Product))
g.add((product_uri, name, Literal(row['title'])))
g.add((product_uri, description, Literal(row['description'])))
# 添加產(chǎn)品屬性和分類關(guān)系
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))
語義搜索測試:我們不僅搜索"防水"標簽,還利用產(chǎn)品本體的層級關(guān)系,同時搜索相關(guān)概念如"防潑水"和"快干":
# 獲取防水的相關(guān)概念
related_concepts = get_all_related_concepts("WaterProof", depth=2)
# 將所有概念轉(zhuǎn)為URI進行查詢
feature_terms = [convert_to_feature_uri(term) for term in flat_list]
結(jié)果返回:
《全天候防水徒步鞋》(標簽:防水、耐磨、戶外)
《速干涉水溯溪鞋》(標簽:快干、防滑、水上運動)
《Gore-Tex專業(yè)跑鞋》(標簽:防潑水、透氣、專業(yè)跑步)
知識圖譜的優(yōu)勢在于結(jié)果可解釋性強,我們知道每個產(chǎn)品為什么被選中。
方法三:混合方法
最后,我們結(jié)合兩種方法的優(yōu)勢:
將產(chǎn)品描述、評論和特性標簽一起向量化:
# 創(chuàng)建包含產(chǎn)品特性的向量表示
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))
先用向量搜索獲取初步結(jié)果:
# 搜索適合雨天跑步的鞋子
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"] )
再用知識圖譜篩選和排序:
# 篩選出真正具備防水和跑步功能的產(chǎn)品
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)) } """
這種混合方法解決了上下文污染問題,最終返回的都是真正適合雨天跑步的專業(yè)鞋款:
《GTX防水專業(yè)馬拉松跑鞋》
《全天候防潑水競速跑鞋》
《防滑防水越野跑步鞋》
結(jié)論與實踐建議
從上面的對比,我們可以看到,向量數(shù)據(jù)庫優(yōu)勢是部署簡單快速,Milvus提供高性能向量檢索,特別適合大規(guī)模產(chǎn)品庫。缺點是結(jié)果不可解釋,且存在上下文污染風(fēng)險。知識圖譜優(yōu)勢,是結(jié)果高度可控和可解釋,可以精確過濾無關(guān)內(nèi)容。缺點是需要構(gòu)建和維護知識圖譜,查詢編寫復(fù)雜。而對于混合方法,則利用Milvus的高效檢索和知識圖譜的精確性,既保證了檢索速度,又提高了推薦質(zhì)量。
在實際應(yīng)用推薦上,比如做內(nèi)容推薦,同時考慮主題相似性和內(nèi)容關(guān)聯(lián)性,避免推薦表面相似但實質(zhì)不相關(guān)的內(nèi)容,又或者對于客戶服務(wù),確保回答不僅相關(guān),還能考慮到產(chǎn)品間的兼容性和搭配關(guān)系。
圖RAG不僅是技術(shù)的組合,更是提升AI系統(tǒng)智能程度的飛躍。通過Milvus的高效向量檢索和知識圖譜的關(guān)系理解,我們的AI不再是簡單的"關(guān)鍵詞匹配機器",而是真正理解用戶需求的"智能顧問"。