ውጽኢት ናይ ሪትሪቫል-ኣግመንትድ ጀነሬሽን (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 ዝጥቀም ኣካል ማእከል ዝገበረ ኣገባብ፡ GraphDocuments ንምውጻእ 405.93s፡ ናብ Neo4j ንምጽሓፍ ድማ 10.99s ክወስድ እንከሎ፡ እቲ ትሕዝቶ ማእከል ዝገበረ ኣገባብ ድማ 1.43s ወሲዱ። ንደገ እንተርኢናዮ፡ ንኹሎም 5,989,847 ገጻት ብኣካል ማእከል ዝገበረ ኣገባብ ንምጽዓን 41 ሰሙናት፡ ትሕዝቶ ማእከል ዝገበረ ኣገባብ ድማ ኣስታት 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 ንምምላእ በቲ ዝጸንሐ ኮድካ ክትጅምርን ኣብ መንጎ chunks መላግቦታት (ወሰናት) ክትውስኽን ትኽእል ኢኻ ንመስርሕ ምውሳድ ንምምሕያሽ።
ግራፍ ራግ ንጀነሬቲቭ ኤኣይ ራግ ኣፕሊኬሽናት ዝያዳ ብዕምቆት ዝምልከቱ ዓውድታት ንምርካብ ዘኽእል ጠቓሚ መሳርሒ እዩ። ረቂቕ እኽሊ ዘለዎ፡ ኣካል ማእከል ዝገበረ ኣገባብ ምጥቃም ግን ምስ ድሌታት ምፍራይ ኣይመጣጠንን እዩ። ኣብ ናይ RAG መተግበሪኻ ናይ ፍልጠት ግራፍ ዓቕሚ ክትውስኽ ትደሊ እንተኾንካ፡ ፈትን።
ብቤን ቻምበርስ ፣ ዳታስታክስ