د لاسته راوړنې - لوړ شوي نسل (RAG) غوښتنلیکونو پایلو ته وده ورکولو لپاره د پوهې ګرافونو کارول یوه ګرمه موضوع ګرځیدلې. ډیری مثالونه ښیې چې څنګه د نسبتا لږ شمیر اسنادو په کارولو سره د پوهې ګراف رامینځته کړئ. دا کیدی شي ځکه چې عادي طریقه - د ښه دانه، د ادارې متمرکز معلوماتو استخراج - یوازې اندازه نه کوي. د هر سند چلول د موډل له لارې د ادارو (نوډونو) او اړیکو (کنارونو) استخراج لپاره خورا اوږد وخت نیسي (او ډیر لګښت لري) په لوی ډیټاسیټونو چلولو لپاره.
موږ دا استدلال کړی دی
د ادارې متمرکز ګراف پلورنځي ته د اسنادو بار کول لکه Neo4j د LangChain د LLMGraphTransformer په کارولو سره ترسره شوي. کوډ د LangChain's پر بنسټ والړ دی
from langchain_core.documents import Document from langchain_experimental.graph_transformers import LLMGraphTransformer from langchain_openai import ChatOpenAI llm = ChatOpenAI(temperature=0, model_name="gpt-4-turbo") llm_transformer = LLMGraphTransformer(llm=llm) from time import perf_counter start = perf_counter() documents_to_load = [Document(page_content=line) for line in lines_to_load] graph_documents = llm_transformer.convert_to_graph_documents(documents_to_load) end = perf_counter() print(f"Loaded (but NOT written) {NUM_LINES_TO_LOAD} in {end - start:0.2f}s")
په GraphVectorStore کې د ډیټا بارول تقریبا د ویکتور پلورنځي کې د بارولو په څیر دی. یوازینۍ اضافه دا ده چې موږ میټاډاټا محاسبه کوو چې دا په ګوته کوي چې هر پاڼه د نورو پاڼو سره څنګه اړیکه لري.
import json from langchain_core.graph_vectorstores.links import METADATA_LINKS_KEY, Link def parse_document(line: str) -> Document: para = json.loads(line) id = para["id"] links = { Link.outgoing(kind="href", tag=id) for m in para["mentions"] if m["ref_ids"] is not None for id in m["ref_ids"] } links.add(Link.incoming(kind="href", tag=id)) return Document( id = id, page_content = " ".join(para["sentences"]), metadata = { "content_id": para["id"], METADATA_LINKS_KEY: list(links) }, )
دا هم یو ښه مثال دی چې تاسو څنګه کولی شئ د نوډونو ترمنځ خپل لینکونه اضافه کړئ.
from langchain_openai import OpenAIEmbeddings from langchain_community.graph_vectorstores.cassandra import CassandraGraphVectorStore import cassio cassio.init(auto=True) TABLE_NAME = "wiki_load" store = CassandraGraphVectorStore( embedding = OpenAIEmbeddings(), node_table=TABLE_NAME, insert_timeout = 1000.0, ) from time import perf_counter start = perf_counter() from datasets.wikimultihop.load import parse_document kg_documents = [parse_document(line) for line in lines_to_load] store.add_documents(kg_documents) end = perf_counter() print(f"Loaded (and written) {NUM_LINES_TO_LOAD} in {end - start:0.2f}s")
په 100 قطارونو کې چلول، د GPT-4o په کارولو سره د ادارې متمرکز چلند 405.93s د ګراف اسنادو استخراج لپاره او 10.99s یې په Neo4j کې لیکلو لپاره اخیستي، پداسې حال کې چې د مینځپانګې متمرکز چلند 1.43s اخیستي. Extrapolating، دا به 41 اونۍ وخت ونیسي چې ټولې 5,989,847 پاڼې د ادارې متمرکز چلند په کارولو سره او شاوخوا 24 ساعته د مینځپانګې متمرکز چلند په کارولو سره. مګر د موازي کولو څخه مننه ، د مینځپانګې متمرکز چلند یوازې په 2.5 ساعتونو کې پرمخ ځي! د ورته موازي ګټو په نظر کې نیولو سره، دا به لاهم څلور اونۍ وخت ونیسي ترڅو د ادارې متمرکز چلند په کارولو سره هرڅه بار کړي. ما دا هڅه نه ده کړې ځکه چې اټکل شوی لګښت به $ 58,700 وي - داسې انګیرل چې هرڅه لومړی ځل کار کوي!
لاندینۍ کرښه: د LLM په کارولو سره د مینځپانګې څخه د پوهې ګرافونو استخراج لپاره د ادارې متمرکز چلند وخت او لګښت دواړه په پیمانه منع دي. له بلې خوا، د GraphVectorStore کارول ګړندي او ارزانه و.
پدې برخه کې، یو څو پوښتنې چې د بار شوي اسنادو له فرعي سیټ څخه راخیستل شوي، د ځوابونو کیفیت په ګوته کولو لپاره پوښتل شوي.
د وجود متمرکز 7324 پرامپټ ټوکنونه کارولي او په بنسټیز ډول بې ګټې ځوابونو تولید لپاره $0.03 لګښت لري، پداسې حال کې چې د منځپانګې مرکز 450 پرامپټ ټوکنونه کارولي او $0.002 لګښت لري ترڅو لنډ ځوابونه مستقیم ځوابونه تولید کړي.
دا ممکن د حیرانتیا خبره وي چې ښه دانه شوي Neo4j ګراف بې ګټې ځوابونه بیرته راوړي. د زنځیر څخه د ننوتلو په لټه کې، موږ یو څه ګورو چې ولې دا پیښیږي:
> Entering new GraphCypherQAChain chain... Generated Cypher: cypher MATCH (a:Album {id: 'The Circle'})-[:RELEASED_BY]->(r:Record_label) RETURN a.id, r.id Full Context: [{'a.id': 'The Circle', 'r.id': 'Restless'}] > Finished chain. {'query': "When was 'The Circle' released?", 'result': "I don't know the answer."}
نو، ښه دانه شوي سکیما یوازې د ریکارډ لیبل په اړه معلومات بیرته راستانه شوي. دا معنی لري چې LLM نشي کولی د ترلاسه شوي معلوماتو پراساس پوښتنې ته ځواب ووایی.
د ښه دانه ، د ادارې ځانګړي پوهې ګرافونو استخراج د وخت او لګښت په اندازه منع دی. کله چې د بار شوي ډیټا د فرعي سیټ په اړه پوښتنې وپوښتل شوې، اضافي ګرانولیت (او د ښه دانه شوي ګراف پورته کولو اضافي لګښت) د سمدستي شاملولو لپاره نور ټکي بیرته راستانه کړل مګر بې ګټې ځوابونه یې رامینځته کړل!
GraphVectorStore د محتوياتو متمرکز طرزالعمل غوره کوي چې د پوهې ګراف جوړول ګړندي او اسانه کوي. تاسو کولی شئ د LangChain په کارولو سره د VectorStore آبادولو لپاره د خپل موجوده کوډ سره پیل کړئ او د بیا ترلاسه کولو پروسې ښه کولو لپاره د ټوټو ترمینځ لینکونه (کنارونه) اضافه کړئ.
ګراف RAG یو ګټور وسیله ده چې د تولیدي AI RAG غوښتنلیکونو وړولو لپاره خورا ژور اړوند شرایط ترلاسه کولو لپاره. مګر د ښه دانه ، د ادارې متمرکز چلند کارول د تولید اړتیاو ته اندازه نه کوي. که تاسو په خپل RAG غوښتنلیک کې د پوهې ګراف وړتیاوې اضافه کولو په لټه کې یاست، هڅه وکړئ
د بین چیمبرز ، ډیټا سټیکس لخوا