paint-brush
Neo4j Grafikleri ve Milvus Vektör Araması ile Hibrit Bir RAG Aracısı Oluşturmaile@neo4j
507 okumalar
507 okumalar

Neo4j Grafikleri ve Milvus Vektör Araması ile Hibrit Bir RAG Aracısı Oluşturma

ile Neo4j8m2024/11/05
Read on Terminal Reader

Çok uzun; Okumak

Bu kılavuz, hem grafik hem de vektör veri tabanlarından yararlanmak, birleştirilmiş arama yöntemleri ve kendi kendini düzeltme mekanizmaları aracılığıyla yanıt doğruluğunu ve alaka düzeyini artırmak için Neo4j ve Milvus kullanarak hibrit bir RAG aracısı oluşturmayı araştırmaktadır.
featured image - Neo4j Grafikleri ve Milvus Vektör Araması ile Hibrit Bir RAG Aracısı Oluşturma
Neo4j HackerNoon profile picture
0-item
1-item


Bu blog yazısı, Neo4j grafik veritabanı ve Milvus vektör veritabanı kullanılarak bir GraphRAG aracısının nasıl oluşturulacağını ayrıntılı olarak açıklamaktadır. Bu aracı, kullanıcı sorgularına doğru ve alakalı yanıtlar sağlamak için grafik veritabanlarının ve vektör aramasının gücünü birleştirir. Bu örnekte, LangGraph, Llama 3.1 8B with Ollama ve GPT-4o kullanacağız.


Geleneksel Geri Alma Artırılmış Üretim ( RAG ) sistemleri yalnızca vektör veritabanları İlgili belgeleri almak için. Yaklaşımımız, varlıklar ve kavramlar arasındaki ilişkileri yakalamak için Neo4j'i dahil ederek daha da ileri giderek, bilginin daha ayrıntılı bir şekilde anlaşılmasını sağlar. Bu iki tekniği birleştirerek daha sağlam ve bilgilendirici bir RAG sistemi oluşturmak istiyoruz.

RAG Agent'ı Oluşturma

Ajanımız üç temel kavramı takip eder: yönlendirme, geri dönüş mekanizmaları ve kendi kendini düzeltme. Bu ilkeler bir dizi LangGraph bileşeni aracılığıyla uygulanır:


  • Yönlendirme – Özel bir yönlendirme mekanizması, sorguya bağlı olarak vektör veritabanının, bilgi grafiğinin veya her ikisinin bir kombinasyonunun kullanılıp kullanılmayacağına karar verir.
  • Geri Dönüş – İlk alımın yetersiz olduğu durumlarda, aracı Tavily kullanarak web aramasına geri döner.
  • Kendi kendini düzeltme – Ajan kendi cevaplarını değerlendirir ve halüsinasyonları veya yanlışlıkları düzeltmeye çalışır.


Daha sonra şu gibi diğer bileşenlerimiz var:


  • Alma – Kullanıcının sorgusuna anlamsal benzerliğe göre belge parçalarını depolamak ve almak için açık kaynaklı ve yüksek performanslı bir vektör veritabanı olan Milvus'u kullanıyoruz.
  • Grafik geliştirme – Neo4j, alınan belgelerden bir bilgi grafiği oluşturmak, bağlamı ilişkiler ve varlıklarla zenginleştirmek için kullanılır.
  • LLM entegrasyonu – Yerel bir LLM olan Llama 3.1 8B, cevapların üretilmesi ve alınan bilgilerin alakalılığı ve doğruluğunun değerlendirilmesi için kullanılırken, GPT-4o, Neo4j tarafından kullanılan sorgu dili olan Cypher'ın üretilmesi için kullanılır.

GraphRAG Mimarisi

GraphRAG aracımızın mimarisi, birbirine bağlı birkaç düğümden oluşan bir iş akışı olarak görselleştirilebilir:


  • Soru yönlendirme – Aracı, en iyi arama stratejisini (vektör araması, grafik araması veya her ikisi) belirlemek için öncelikle soruyu analiz eder.
  • Alma – Yönlendirme kararına bağlı olarak ilgili belgeler Milvus’tan alınır veya bilgiler Neo4j grafiğinden çıkarılır.
  • Üretim – LLM, alınan bağlamı kullanarak bir cevap üretir.
  • Değerlendirme – Ajan, üretilen cevabı alaka, doğruluk ve potansiyel halüsinasyonlar açısından değerlendirir.
  • İnce ayar (gerekirse) – Cevap tatmin edici bulunmazsa, aracı aramasını ince ayarlayabilir veya hataları düzeltmeye çalışabilir.

Temsilci Örnekleri

LLM ajanlarımızın yeteneklerini sergilemek için iki farklı bileşene bakalım: Graph Generation ve Composite Agent .

Kodun tamamı bu yazının sonunda mevcut olsa da, bu kod parçacıkları bu ajanların LangChain çerçevesi içinde nasıl çalıştığına dair daha iyi bir anlayış sağlayacaktır.

Grafik Üretimi

Bu bileşen, Neo4j'in yeteneklerini kullanarak soru-cevaplama sürecini iyileştirmek için tasarlanmıştır. Neo4j grafik veritabanına gömülü bilgiden yararlanarak soruları yanıtlar. İşte nasıl çalıştığı:


  1. GraphCypherQAChain – LLM'nin Neo4j grafik veritabanıyla etkileşime girmesine izin verir. LLM'yi iki şekilde kullanır:

    • cypher_llm – LLM'nin bu örneği, kullanıcının sorusuna dayalı olarak grafikten ilgili bilgileri çıkarmak için Cypher sorguları oluşturmaktan sorumludur.

    • Doğrulama – Cypher sorgularının sözdizimsel olarak doğru olduğundan emin olmak için doğrulandığından emin olur.


  2. Bağlam alma – Doğrulanmış sorgular, gerekli bağlamı almak için Neo4j grafiğinde yürütülür.


  3. Cevap oluşturma – Dil modeli, alınan bağlamı kullanarak kullanıcının sorusuna bir cevap oluşturur.


 ### 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})


Bu bileşen, RAG sisteminin Neo4j'den yararlanmasını sağlayarak daha kapsamlı ve doğru yanıtlar sağlanmasına yardımcı olabilir.

Bileşik Ajan, Grafik ve Vektör 🪄

İşte sihir burada gerçekleşir: Temsilcimiz Milvus ve Neo4j'den gelen sonuçları birleştirebilir, bu da bilgilerin daha iyi anlaşılmasını ve daha doğru ve ayrıntılı yanıtların elde edilmesini sağlar. İşte nasıl çalıştığı:


  1. İstemler – LLM'ye soruyu cevaplamak için hem Milvus hem de Neo4j'den bağlamı kullanmasını talimatlandıran bir istem tanımlıyoruz.
  2. Alma – Ajan, Milvus'tan (vektör araması kullanılarak) ve Neo4j'den (Grafik Oluşturma kullanılarak) ilgili bilgileri alır.
  3. Cevap oluşturma – Llama 3.1 8B, vektör ve grafik veritabanlarındaki birleşik bilgiyi bileşik zincirle birleştirerek istemi işler ve özlü bir cevap oluşturur.


 ### 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, )


Araştırma makalemizin keşfini geliştirmek için grafik ve vektör veri tabanlarının güçlü yönlerini bir araya getirerek yaptığımız aramanın sonuçlarına bir göz atalım.


Neo4j kullanarak grafik aramamıza başlayalım:


 # 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'}]


Grafik araması, ilişkileri ve meta verileri bulmada mükemmeldir. Başlıklara, yazarlara veya önceden tanımlanmış kategorilere göre makaleleri hızla belirleyebilir ve verilerin yapılandırılmış bir görünümünü sağlayabilir.


Şimdi farklı bir bakış açısı için vektör aramamıza geçelim:


 # 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.


Vektör araması bağlamı ve anlamsal benzerliği anlamada gerçekten iyidir. Arama terimlerini açıkça içermeseler bile, sorguyla kavramsal olarak ilişkili makaleleri ortaya çıkarabilir.


Son olarak her iki arama yöntemini birleştiriyoruz:


Bu, hem vektör hem de grafik veritabanlarını kullanmayı mümkün kılan RAG aracımızın önemli bir parçasıdır.


 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.


Grafik ve vektör aramalarını entegre ederek, her iki yaklaşımın da güçlü yanlarından yararlanıyoruz. Grafik araması kesinlik sağlar ve yapılandırılmış ilişkilerde gezinirken, vektör araması anlamsal anlayış yoluyla derinlik katar.


Bu birleşik yöntem birçok avantaj sunuyor:


  1. Gelişmiş hatırlama : Tek başına her iki yöntemle gözden kaçırılabilecek ilgili makaleleri bulur.
  2. Gelişmiş bağlam : Makalelerin birbirleriyle nasıl ilişkili olduğuna dair daha ayrıntılı bir anlayış sağlar.
  3. Esneklik : Belirli anahtar kelime aramalarından daha geniş kavramsal araştırmalara kadar farklı sorgu türlerine uyum sağlayabilir.

Özetle

Bu blog yazısında, Neo4j ve Milvus kullanarak bir GraphRAG Agent'ın nasıl oluşturulacağını gösterdik. Grafik veritabanlarının ve vektör aramasının güçlü yönlerini birleştirerek, bu agent kullanıcı sorgularına doğru ve alakalı yanıtlar sağlar.


RAG aracımızın mimarisi, özel yönlendirme, geri dönüş mekanizmaları ve kendi kendini düzeltme yetenekleriyle onu sağlam ve güvenilir hale getirir. Grafik Oluşturma ve Bileşik Aracı bileşenlerinin örnekleri, bu aracının kapsamlı ve ayrıntılı yanıtlar sağlamak için hem vektör hem de grafik veritabanlarından nasıl yararlanabileceğini gösterir.


Bu rehberin faydalı olmasını ve kendi projelerinizde grafik veritabanları ile vektör aramayı birleştirme olanaklarını incelemeniz için size ilham vermesini umuyoruz.


Güncel kod GitHub'da mevcuttur.


Bu konu hakkında daha fazla bilgi edinmek için 7 Kasım'da akıllı uygulamalar, bilgi grafikleri ve yapay zeka üzerine ücretsiz sanal geliştirici konferansımız olan NODES 2024'e katılın. Hemen Kaydolun!