paint-brush
6 сая Wikipedia хуудсан дээр RAG-д зориулсан мэдлэгийн график бүтээхэд 70 мянган долларыг хэрхэн хэмнэх вэby@datastax
Шинэ түүх

6 сая Wikipedia хуудсан дээр RAG-д зориулсан мэдлэгийн график бүтээхэд 70 мянган долларыг хэрхэн хэмнэх вэ

by DataStax4m2024/10/15
Read on Terminal Reader

Хэтэрхий урт; Унших

Агуулга төвлөрсөн мэдлэгийн графикууд - хэсгүүдийн хоорондох холбоосыг зөвшөөрдөг вектор дэлгүүр нь RAG-ийн үр дүнг сайжруулахад ашиглахад илүү хялбар бөгөөд илүү үр дүнтэй арга юм гэж бид маргаж байсан. Энд бид үүнийг туршиж үзсэн.
featured image - 6 сая Wikipedia хуудсан дээр RAG-д зориулсан мэдлэгийн график бүтээхэд 70 мянган долларыг хэрхэн хэмнэх вэ
DataStax HackerNoon profile picture
0-item



Мэдээллийн графикийг ашиглан сэргээн босгох (RAG) програмуудын үр дүнг сайжруулах нь халуун сэдэв болсон. Ихэнх жишээнүүд нь харьцангуй цөөн тооны баримт бичгийг ашиглан мэдлэгийн графикийг хэрхэн бүтээхийг харуулдаг. Энэ нь ердийн арга буюу нарийн ширхэгтэй, аж ахуйн нэгж төвтэй мэдээллийг гаргаж авах нь зөвхөн масштабтай байдаггүйтэй холбоотой байж болох юм. Байгууллага (зангилаа) болон харилцаа холбоог (ирмэг) задлахын тулд баримт бүрийг загвараар ажиллуулах нь том өгөгдлийн багц дээр ажиллахад хэтэрхий удаан (мөн хэт их зардал) авдаг.


Бид энэ талаар маргасан агуулга төвтэй мэдлэгийн графикууд - Хэсэг хоорондын холбоосыг зөвшөөрдөг вектор дэлгүүр нь ашиглахад хялбар бөгөөд илүү үр дүнтэй арга юм. Энд бид үүнийг туршиж үзсэн. Бид Википедиагийн нийтлэлүүдийн дэд хэсгийг эндээс ачаалдаг 2wikimultihop өгөгдлийн багцыг хоёуланг нь ашиглан өгөгдлийн багцыг бүхэлд нь ачаалахад юу гэсэн үг болохыг ярилц. Бид ачаалагдсан өгөгдөл дээр зарим асуултын үр дүнг харуулж байна. Мөн бид өгөгдлийн багцыг бүхэлд нь буюу бараг 6 сая баримт бичгийг контент төвтэй болгон ачаална GraphVectorStore .

Байгууллага төвтэй: LLMGraphTransformer

Neo4j гэх мэт аж ахуйн нэгж төвтэй график дэлгүүрт бичиг баримтыг ачаалах ажлыг LangChain-ийн LLMGraphTransformer ашиглан хийсэн. Код нь LangChain дээр суурилсан "Мэдлэгийн графикийг хэрхэн бүтээх вэ."

 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

Өгөгдлийг 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.93 секунд, Neo4j-д бичихэд 10.99 секунд зарцуулсан бол контент төвтэй арга нь 1.43 секунд зарцуулсан. Аж ахуйн нэгж төвтэй хандлагыг ашиглан 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-д байршуулах одоо байгаа кодоос эхэлж, татаж авах үйл явцыг сайжруулахын тулд хэсгүүдийн хооронд холбоос (ирмэг) нэмж болно.


График RAG нь AI RAG программуудыг илүү гүнзгий хамааралтай контекстийг олж авах боломжийг олгодог ашигтай хэрэгсэл юм. Гэхдээ нарийн ширхэгтэй, аж ахуйн нэгж төвтэй хандлагыг ашиглах нь үйлдвэрлэлийн хэрэгцээнд нийцэхгүй. Хэрэв та RAG програмдаа мэдлэгийн графикийн чадавхийг нэмэхийг хүсч байвал оролдоод үзээрэй GraphVectorStore .


Бен Чамберс , DataStax


L O A D I N G
. . . comments & more!

About Author

DataStax HackerNoon profile picture
DataStax@datastax
DataStax is the real-time data company for building production GenAI applications.

TAG ҮҮ

ЭНЭ ӨГҮҮЛЛИЙГ ТОЛГОЙЛУУЛСАН...