paint-brush
Neo4j গ্রাফ এবং মিলভাস ভেক্টর অনুসন্ধান সহ একটি হাইব্রিড RAG এজেন্ট তৈরি করাদ্বারা@neo4j
499 পড়া
499 পড়া

Neo4j গ্রাফ এবং মিলভাস ভেক্টর অনুসন্ধান সহ একটি হাইব্রিড RAG এজেন্ট তৈরি করা

দ্বারা Neo4j8m2024/11/05
Read on Terminal Reader

অতিদীর্ঘ; পড়তে

এই নির্দেশিকাটি গ্রাফ এবং ভেক্টর ডাটাবেস উভয়েরই লিভারেজের জন্য Neo4j এবং Milvus ব্যবহার করে একটি হাইব্রিড RAG এজেন্ট তৈরির অন্বেষণ করে, সম্মিলিত অনুসন্ধান পদ্ধতি এবং স্ব-সংশোধন পদ্ধতির মাধ্যমে প্রতিক্রিয়া নির্ভুলতা এবং প্রাসঙ্গিকতা বৃদ্ধি করে।
featured image - Neo4j গ্রাফ এবং মিলভাস ভেক্টর অনুসন্ধান সহ একটি হাইব্রিড RAG এজেন্ট তৈরি করা
Neo4j HackerNoon profile picture
0-item
1-item


এই ব্লগ পোস্টে Neo4j গ্রাফ ডাটাবেস এবং মিলভাস ভেক্টর ডাটাবেস ব্যবহার করে কীভাবে একটি GraphRAG এজেন্ট তৈরি করা যায় তার বিশদ বিবরণ রয়েছে। এই এজেন্ট ব্যবহারকারীর প্রশ্নের সঠিক এবং প্রাসঙ্গিক উত্তর প্রদান করতে গ্রাফ ডাটাবেস এবং ভেক্টর অনুসন্ধানের শক্তিকে একত্রিত করে। এই উদাহরণে, আমরা ওল্লামা এবং GPT-4o-এর সাথে LangGraph, Llama 3.1 8B ব্যবহার করব।


ট্র্যাডিশনাল রিট্রিভাল অগমেন্টেড জেনারেশন ( RAG ) সিস্টেমের উপর নির্ভর করে ভেক্টর ডাটাবেস প্রাসঙ্গিক নথি উদ্ধার করতে। আমাদের দৃষ্টিভঙ্গি Neo4j অন্তর্ভুক্ত করে সত্তা এবং ধারণার মধ্যে সম্পর্ক ক্যাপচার করে, তথ্যের আরও সূক্ষ্ম উপলব্ধি প্রদান করে। আমরা এই দুটি কৌশলকে একত্রিত করে আরও শক্তিশালী এবং তথ্যপূর্ণ RAG সিস্টেম তৈরি করতে চাই।

RAG এজেন্ট নির্মাণ

আমাদের এজেন্ট তিনটি মূল ধারণা অনুসরণ করে: রাউটিং, ফলব্যাক মেকানিজম এবং স্ব-সংশোধন। এই নীতিগুলি ল্যাংগ্রাফ উপাদানগুলির একটি সিরিজের মাধ্যমে প্রয়োগ করা হয়:


  • রাউটিং - একটি ডেডিকেটেড রাউটিং মেকানিজম সিদ্ধান্ত নেয় যে ভেক্টর ডাটাবেস, নলেজ গ্রাফ বা কোয়েরির উপর ভিত্তি করে উভয়ের সংমিশ্রণ ব্যবহার করতে হবে কিনা।
  • ফলব্যাক - এমন পরিস্থিতিতে যেখানে প্রাথমিক পুনরুদ্ধার অপর্যাপ্ত, এজেন্ট Tavily ব্যবহার করে একটি ওয়েব অনুসন্ধানে ফিরে আসে।
  • স্ব-সংশোধন - এজেন্ট তার নিজস্ব উত্তর মূল্যায়ন করে এবং হ্যালুসিনেশন বা ভুল সংশোধন করার চেষ্টা করে।


তারপর আমাদের অন্যান্য উপাদান আছে, যেমন:


  • পুনরুদ্ধার - আমরা Milvus ব্যবহার করি, একটি ওপেন-সোর্স এবং উচ্চ-পারফরম্যান্স ভেক্টর ডাটাবেস, ব্যবহারকারীর প্রশ্নের শব্দার্থগত মিলের উপর ভিত্তি করে নথির অংশগুলি সংরক্ষণ এবং পুনরুদ্ধার করতে।
  • গ্রাফ বর্ধিতকরণ - Neo4j পুনরুদ্ধার করা নথি থেকে একটি জ্ঞান গ্রাফ তৈরি করতে ব্যবহৃত হয়, সম্পর্ক এবং সত্তার সাথে প্রসঙ্গকে সমৃদ্ধ করে।
  • LLMs ইন্টিগ্রেশন - Llama 3.1 8B, একটি স্থানীয় LLM, উত্তর তৈরি করতে এবং পুনরুদ্ধার করা তথ্যের প্রাসঙ্গিকতা এবং নির্ভুলতা মূল্যায়নের জন্য ব্যবহৃত হয়, যখন GPT-4o সাইফার তৈরি করতে ব্যবহৃত হয়, Neo4j দ্বারা ব্যবহৃত কোয়েরি ভাষা।

GraphRAG আর্কিটেকচার

আমাদের GraphRAG এজেন্টের আর্কিটেকচারটি বেশ কয়েকটি আন্তঃসংযুক্ত নোডের সাথে একটি ওয়ার্কফ্লো হিসাবে কল্পনা করা যেতে পারে:


  • প্রশ্ন রাউটিং - এজেন্ট সর্বোত্তম পুনরুদ্ধারের কৌশল নির্ধারণ করতে প্রথমে প্রশ্নটি বিশ্লেষণ করে (ভেক্টর অনুসন্ধান, গ্রাফ অনুসন্ধান, বা উভয়)।
  • পুনরুদ্ধার - রাউটিং সিদ্ধান্তের উপর ভিত্তি করে, প্রাসঙ্গিক নথিগুলি মিলভাস থেকে পুনরুদ্ধার করা হয়, বা Neo4j গ্রাফ থেকে তথ্য বের করা হয়।
  • জেনারেশন - এলএলএম পুনরুদ্ধার করা প্রসঙ্গ ব্যবহার করে একটি উত্তর তৈরি করে।
  • মূল্যায়ন - এজেন্ট প্রাসঙ্গিকতা, নির্ভুলতা এবং সম্ভাব্য হ্যালুসিনেশনের জন্য উত্পন্ন উত্তর মূল্যায়ন করে।
  • পরিমার্জন (যদি প্রয়োজন হয়) - যদি উত্তরটি অসন্তোষজনক বলে মনে করা হয়, তাহলে এজেন্ট তার অনুসন্ধান পরিমার্জন করতে পারে বা ত্রুটি সংশোধন করার চেষ্টা করতে পারে।

এজেন্ট উদাহরণ

আমাদের LLM এজেন্টদের ক্ষমতা প্রদর্শন করতে, আসুন দুটি ভিন্ন উপাদানের দিকে তাকাই: Graph Generation এবং Composite Agent

এই পোস্টের নীচে সম্পূর্ণ কোড উপলব্ধ থাকলেও, এই স্নিপেটগুলি ল্যাংচেইন কাঠামোর মধ্যে কীভাবে এই এজেন্টগুলি কাজ করে সে সম্পর্কে আরও ভাল বোঝার ব্যবস্থা করবে।

গ্রাফ জেনারেশন

এই উপাদানটি একটি Neo4j এর ক্ষমতা ব্যবহার করে প্রশ্ন-উত্তর প্রক্রিয়া উন্নত করার জন্য ডিজাইন করা হয়েছে। এটি Neo4j গ্রাফ ডাটাবেসের মধ্যে এমবেড করা জ্ঞানের ব্যবহার করে প্রশ্নের উত্তর দেয়। এটি কিভাবে কাজ করে তা এখানে:


  1. GraphCypherQAChain – LLM কে Neo4j গ্রাফ ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়। এটি দুটি উপায়ে এলএলএম ব্যবহার করে:

    • cypher_llm - ব্যবহারকারীর প্রশ্নের উপর ভিত্তি করে গ্রাফ থেকে প্রাসঙ্গিক তথ্য বের করার জন্য LLM-এর এই উদাহরণটি সাইফার কোয়েরি তৈরি করার জন্য দায়ী।

    • যাচাইকরণ - সাইফার প্রশ্নগুলি সিনট্যাক্টিকভাবে সঠিক কিনা তা নিশ্চিত করার জন্য যাচাই করা হয়েছে তা নিশ্চিত করে।


  2. প্রসঙ্গ পুনরুদ্ধার - প্রয়োজনীয় প্রসঙ্গ পুনরুদ্ধার করার জন্য বৈধ প্রশ্নগুলি Neo4j গ্রাফে কার্যকর করা হয়।


  3. উত্তর তৈরি - ভাষা মডেল ব্যবহারকারীর প্রশ্নের উত্তর তৈরি করতে পুনরুদ্ধার করা প্রসঙ্গ ব্যবহার করে।


 ### Generate Cypher Query llm = ChatOllama(model=local_llm, temperature=0) # Chain graph_rag_chain = GraphCypherQAChain.from_llm( cypher_llm=llm, qa_llm=llm, validate_cypher=True, graph=graph, verbose=True, return_intermediate_steps=True, return_direct=True, ) # Run question = "agent memory" generation = graph_rag_chain.invoke({"query": question})


এই উপাদানটি RAG সিস্টেমকে Neo4j-এ ট্যাপ করতে সক্ষম করে, যা আরও ব্যাপক এবং সঠিক উত্তর দিতে সাহায্য করতে পারে।

কম্পোজিট এজেন্ট, গ্রাফ এবং ভেক্টর 🪄

এখানেই যাদুটি ঘটে: আমাদের এজেন্ট Milvus এবং Neo4j-এর ফলাফলগুলিকে একত্রিত করতে পারে, যা তথ্যের আরও ভাল বোঝার অনুমতি দেয় এবং আরও সঠিক এবং সূক্ষ্ম উত্তরের দিকে পরিচালিত করে৷ এটি কিভাবে কাজ করে তা এখানে:


  1. প্রম্পট - আমরা একটি প্রম্পট সংজ্ঞায়িত করি যা LLM কে প্রশ্নের উত্তর দিতে Milvus এবং Neo4j উভয়ের প্রসঙ্গ ব্যবহার করার নির্দেশ দেয়।
  2. পুনরুদ্ধার - এজেন্ট মিলভাস (ভেক্টর অনুসন্ধান ব্যবহার করে) এবং Neo4j (গ্রাফ জেনারেশন ব্যবহার করে) থেকে প্রাসঙ্গিক তথ্য পুনরুদ্ধার করে।
  3. উত্তর তৈরি - Llama 3.1 8B প্রম্পট প্রক্রিয়া করে এবং একটি সংক্ষিপ্ত উত্তর তৈরি করে, ভেক্টর এবং গ্রাফ ডাটাবেস থেকে সম্মিলিত জ্ঞানকে কম্পোজিট চেইনের সাথে ব্যবহার করে।


 ### Composite Vector + Graph Generations cypher_prompt = PromptTemplate( template="""You are an expert at generating Cypher queries for Neo4j. Use the following schema to generate a Cypher query that answers the given question. Make the query flexible by using case-insensitive matching and partial string matching where appropriate. Focus on searching paper titles as they contain the most relevant information. Schema: {schema} Question: {question} Cypher Query:""", input_variables=["schema", "question"], )



 # QA prompt qa_prompt = PromptTemplate( template="""You are an assistant for question-answering tasks. Use the following Cypher query results to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise. If topic information is not available, focus on the paper titles. Question: {question} Cypher Query: {query} Query Results: {context} Answer:""", input_variables=["question", "query", "context"], ) llm = ChatOpenAI(model="gpt-4o", temperature=0)


 # Chain graph_rag_chain = GraphCypherQAChain.from_llm( cypher_llm=llm, qa_llm=llm, validate_cypher=True, graph=graph, verbose=True, return_intermediate_steps=True, return_direct=True, cypher_prompt=cypher_prompt, qa_prompt=qa_prompt, )


গ্রাফ এবং ভেক্টর ডাটাবেসের শক্তিগুলিকে একত্রিত করে আমাদের গবেষণাপত্রের আবিষ্কারকে উন্নত করার জন্য আমাদের অনুসন্ধানের ফলাফলগুলি দেখুন।


আমরা Neo4j ব্যবহার করে আমাদের গ্রাফ অনুসন্ধান শুরু করি:


 # Example input data question = "What paper talks about Multi-Agent?" generation = graph_rag_chain.invoke({"query": question}) print(generation)


 > Entering new GraphCypherQAChain chain... Generated Cypher: cypher MATCH (p:Paper) WHERE toLower(p.title) CONTAINS toLower("Multi-Agent") RETURN p.title AS PaperTitle, p.summary AS Summary, p.url AS URL


 > Finished chain. {'query': 'What paper talks about Multi-Agent?', 'result': [{'PaperTitle': 'Collaborative Multi-Agent, Multi-Reasoning-Path (CoMM) Prompting Framework', 'Summary': 'In this work, we aim to push the upper bound of the reasoning capability of LLMs by proposing a collaborative multi-agent, multi-reasoning-path (CoMM) prompting framework. Specifically, we prompt LLMs to play different roles in a problem-solving team, and encourage different role-play agents to collaboratively solve the target task. In particular, we discover that applying different reasoning paths for different roles is an effective strategy to implement few-shot prompting approaches in the multi-agent scenarios. Empirical results demonstrate the effectiveness of the proposed methods on two college-level science problems over competitive baselines. Our further analysis shows the necessity of prompting LLMs to play different roles or experts independently.', 'URL': 'https://github.com/amazon-science/comm-prompt'}]


গ্রাফ অনুসন্ধান সম্পর্ক এবং মেটাডেটা খোঁজার ক্ষেত্রে উৎকৃষ্ট। এটি শিরোনাম, লেখক, বা পূর্বনির্ধারিত বিভাগের উপর ভিত্তি করে কাগজপত্র দ্রুত সনাক্ত করতে পারে, ডেটার একটি কাঠামোগত দৃশ্য প্রদান করে।


এর পরে, আমরা একটি ভিন্ন দৃষ্টিভঙ্গির জন্য আমাদের ভেক্টর অনুসন্ধানে ফিরে যাই:


 # Example input data question = "What paper talks about Multi-Agent?" # Get vector + graph answers docs = retriever.invoke(question) vector_context = rag_chain.invoke({"context": docs, "question": question})


 > The paper discusses "Adaptive In-conversation Team Building for Language Model Agents" and talks about Multi-Agent. It presents a new adaptive team-building paradigm that offers a flexible solution for building teams of LLM agents to solve complex tasks effectively. The approach, called Captain Agent, dynamically forms and manages teams for each step of the task-solving process, utilizing nested group conversations and reflection to ensure diverse expertise and prevent stereotypical outputs.


ভেক্টর অনুসন্ধান প্রসঙ্গ এবং শব্দার্থগত মিল বোঝার জন্য সত্যিই ভাল। এটি এমন কাগজপত্র উন্মোচন করতে পারে যা ধারণাগতভাবে প্রশ্নের সাথে সম্পর্কিত, এমনকি যদি সেগুলিতে স্পষ্টভাবে অনুসন্ধানের পদগুলি না থাকে।


অবশেষে, আমরা উভয় অনুসন্ধান পদ্ধতি একত্রিত করি:


এটি আমাদের RAG এজেন্টের একটি গুরুত্বপূর্ণ অংশ, এটি ভেক্টর এবং গ্রাফ ডেটাবেস উভয়ই ব্যবহার করা সম্ভব করে তোলে।


 composite_chain = prompt | llm | StrOutputParser() answer = composite_chain.invoke({"question": question, "context": vector_context, "graph_context": graph_context}) print(answer)


 > The paper "Collaborative Multi-Agent, Multi-Reasoning-Path (CoMM) Prompting Framework" talks about Multi-Agent. It proposes a framework that prompts LLMs to play different roles in a problem-solving team and encourages different role-play agents to collaboratively solve the target task. The paper presents empirical results demonstrating the effectiveness of the proposed methods on two college-level science problems.


গ্রাফ এবং ভেক্টর অনুসন্ধানগুলিকে একীভূত করার মাধ্যমে, আমরা উভয় পদ্ধতির শক্তিগুলিকে কাজে লাগাই৷ গ্রাফ অনুসন্ধান নির্ভুলতা প্রদান করে এবং কাঠামোগত সম্পর্ককে নেভিগেট করে, যখন ভেক্টর অনুসন্ধান শব্দার্থগত বোঝার মাধ্যমে গভীরতা যোগ করে।


এই সম্মিলিত পদ্ধতিটি বিভিন্ন সুবিধা প্রদান করে:


  1. উন্নত প্রত্যাহার : এটি প্রাসঙ্গিক কাগজপত্র খুঁজে পায় যা একা কোনো পদ্ধতিতে মিস করা যেতে পারে।
  2. বর্ধিত প্রেক্ষাপট : এটি কাগজপত্রগুলি একে অপরের সাথে কীভাবে সম্পর্কযুক্ত তা আরও সূক্ষ্মভাবে উপলব্ধি করে।
  3. নমনীয়তা : এটি নির্দিষ্ট কীওয়ার্ড অনুসন্ধান থেকে বিস্তৃত ধারণাগত অনুসন্ধান পর্যন্ত বিভিন্ন ধরণের প্রশ্নের সাথে খাপ খাইয়ে নিতে পারে।

সামিং ইট আপ

এই ব্লগ পোস্টে, আমরা দেখিয়েছি কিভাবে Neo4j এবং Milvus ব্যবহার করে একটি GraphRAG এজেন্ট তৈরি করা যায়। গ্রাফ ডেটাবেস এবং ভেক্টর অনুসন্ধানের শক্তিগুলিকে একত্রিত করে, এই এজেন্ট ব্যবহারকারীর প্রশ্নের সঠিক এবং প্রাসঙ্গিক উত্তর প্রদান করে।


আমাদের RAG এজেন্টের আর্কিটেকচার, এর ডেডিকেটেড রাউটিং, ফলব্যাক মেকানিজম এবং স্ব-সংশোধন ক্ষমতা সহ, এটিকে শক্তিশালী এবং নির্ভরযোগ্য করে তোলে। গ্রাফ জেনারেশন এবং কম্পোজিট এজেন্ট উপাদানগুলির উদাহরণগুলি দেখায় কিভাবে এই এজেন্টটি ব্যাপক এবং সংক্ষিপ্ত উত্তর প্রদান করতে ভেক্টর এবং গ্রাফ ডেটাবেস উভয়েই ট্যাপ করতে পারে।


আমরা আশা করি এই নির্দেশিকাটি সহায়ক হয়েছে এবং আপনাকে অনুপ্রাণিত করবে আপনার নিজস্ব প্রকল্পে গ্রাফ ডাটাবেস এবং ভেক্টর অনুসন্ধানকে একত্রিত করার সম্ভাবনাগুলি পরীক্ষা করতে।


বর্তমান কোড GitHub এ উপলব্ধ।


এই বিষয়ে আরও জানতে, 7 নভেম্বর NODES 2024-এ আমাদের সাথে যোগ দিন, বুদ্ধিমান অ্যাপস, নলেজ গ্রাফ এবং AI এর উপর আমাদের বিনামূল্যের ভার্চুয়াল ডেভেলপার কনফারেন্স। এখন নিবন্ধন করুন!