paint-brush
Прављење хибридног РАГ агента са Нео4ј графовима и Милвус векторском претрагомод стране@neo4j
507 читања
507 читања

Прављење хибридног РАГ агента са Нео4ј графовима и Милвус векторском претрагом

од стране Neo4j8m2024/11/05
Read on Terminal Reader

Предуго; Читати

Овај водич истражује изградњу хибридног РАГ агента користећи Нео4ј и Милвус да би се искористиле и графске и векторске базе података, повећавајући тачност и релевантност одговора кроз комбиноване методе претраживања и механизме самокорекције.
featured image - Прављење хибридног РАГ агента са Нео4ј графовима и Милвус векторском претрагом
Neo4j HackerNoon profile picture
0-item
1-item


Овај блог пост описује како да направите ГрапхРАГ агент користећи Нео4ј базу података графова и Милвус векторску базу података. Овај агент комбинује моћ база података графова и векторске претраге како би пружио тачне и релевантне одговоре на упите корисника. У овом примеру користићемо ЛангГрапх, Ллама 3.1 8Б са Оллама и ГПТ-4о.


Традиционални системи проширене генерације ( РАГ ) се ослањају искључиво на векторске базе података за преузимање релевантних докумената. Наш приступ иде даље тако што укључује Нео4ј за снимање односа између ентитета и концепата, нудећи нијансираније разумевање информација. Желимо да створимо робуснији и информативнији РАГ систем комбиновањем ове две технике.

Изградња РАГ агента

Наш агент прати три кључна концепта: рутирање, резервни механизми и самоисправљање. Ови принципи се имплементирају кроз низ ЛангГрапх компоненти:


  • Рутирање – Наменски механизам за рутирање одлучује да ли ће користити векторску базу података, граф знања или комбинацију оба на основу упита.
  • Резервни – У ситуацијама када је почетно преузимање недовољно, агент се враћа на веб претрагу користећи Тавили.
  • Самоисправљање – Агент процењује сопствене одговоре и покушава да исправи халуцинације или нетачности.


Затим имамо друге компоненте, као што су:


  • Преузимање – Користимо Милвус, векторску базу података отвореног кода и високих перформанси, за складиштење и преузимање делова докумената на основу семантичке сличности са упитом корисника.
  • Побољшање графа – Нео4ј се користи за конструисање графа знања из преузетих докумената, обогаћујући контекст везама и ентитетима.
  • Интеграција ЛЛМ-а – Ллама 3.1 8Б, локални ЛЛМ, користи се за генерисање одговора и процену релевантности и тачности преузетих информација, док се ГПТ-4о користи за генерисање Ципхер, језика упита који користи Нео4ј.

Архитектура ГрапхРАГ

Архитектура нашег ГрапхРАГ агента се може визуализовати као ток посла са неколико међусобно повезаних чворова:


  • Усмеравање питања – Агент прво анализира питање како би одредио најбољу стратегију проналажења (векторска претрага, претрага графикона или обоје).
  • Преузимање – На основу одлуке о рутирању, релевантни документи се преузимају из Милвуса, или се информације издвајају из Нео4ј графа.
  • Генерисање – ЛЛМ генерише одговор користећи преузети контекст.
  • Евалуација – Агент процењује генерисани одговор на релевантност, тачност и потенцијалне халуцинације.
  • Прецизност (ако је потребно) – Ако се сматра да је одговор незадовољавајући, агент може прецизирати своју претрагу или покушати да исправи грешке.

Примери агената

Да бисмо приказали могућности наших ЛЛМ агената, погледајмо две различите компоненте: Graph Generation и Composite Agent .

Иако је цео код доступан на дну овог поста, ови исечци ће пружити боље разумевање како ови агенти раде у оквиру ЛангЦхаин-а.

Генерисање графикона

Ова компонента је дизајнирана да побољша процес одговарања на питања коришћењем могућности Нео4ј. Он одговара на питања користећи знање уграђено у Нео4ј базу података графова. Ево како то функционише:


  1. GraphCypherQAChain – Омогућава ЛЛМ-у да комуницира са Нео4ј базом података графова. ЛЛМ користи на два начина:

    • cypher_llm – Ова инстанца ЛЛМ-а је одговорна за генерисање Ципхер упита за издвајање релевантних информација из графикона на основу питања корисника.

    • Провера ваљаности – Уверава се да су Ципхер упити валидирани како би се осигурало да су синтаксички исправни.


  2. Дохваћање контекста – Потврђени упити се извршавају на Нео4ј графу да би се дохватио потребан контекст.


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


Ова компонента омогућава РАГ систему да се укључи у Нео4ј, што може помоћи да пружи свеобухватније и тачније одговоре.

Композитни агент, графикон и вектор 🪄

Овде се дешава магија: наш агент може комбиновати резултате из Милвус-а и Нео4ј-а, омогућавајући боље разумевање информација и доводећи до прецизнијих и нијансираних одговора. Ево како то функционише:


  1. Податке – Дефинишемо промпт који упућује ЛЛМ да користи контекст из Милвуса и Нео4ј-а да одговори на питање.
  2. Преузимање – Агент преузима релевантне информације од Милвуса (користећи претрагу вектора) и Нео4ј (користећи генерисање графикона).
  3. Генерисање одговора – Ллама 3.1 8Б обрађује промпт и генерише концизан одговор, користећи комбиновано знање из векторских и графичких база података са композитним ланцем.


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


Хајде да погледамо резултате наше претраге, комбинујући предности графичких и векторских база података како бисмо побољшали откривање нашег истраживачког рада.


Почињемо са нашом претрагом графикона користећи Нео4ј:


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


Векторска претрага је заиста добра у разумевању контекста и семантичке сличности. Може да открије радове који су концептуално повезани са упитом, чак и ако не садрже експлицитно термине за претрагу.


На крају комбинујемо оба метода претраге:


Ово је кључни део нашег РАГ агента, који омогућава коришћење векторских и графичких база података.


 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. Флексибилност : Може се прилагодити различитим типовима упита, од специфичних претрага кључних речи до ширих концептуалних истраживања.

Сумминг Ит Уп

У овом посту на блогу показали смо како да направите ГрапхРАГ агент користећи Нео4ј и Милвус. Комбиновањем предности база података графова и векторске претраге , овај агент пружа тачне и релевантне одговоре на упите корисника.


Архитектура нашег РАГ агента, са наменским рутирањем, резервним механизмима и могућностима самокорекције, чини га робусним и поузданим. Примери компоненти генерисања графикона и композитног агента показују како овај агент може да користи векторске и графичке базе података да би пружио свеобухватне и нијансиране одговоре.


Надамо се да је овај водич био од помоћи и да вас инспирише да проверите могућности комбиновања база података графова и векторске претраге у сопственим пројектима.


Тренутни код је доступан на ГитХуб-у .


Да бисте сазнали више о овој теми, придружите нам се на НОДЕС 2024 7. новембра, нашој бесплатној виртуелној конференцији за програмере о интелигентним апликацијама, графиконима знања и вештачкој интелигенцији. Региструјте се сада!

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

About Author

Neo4j HackerNoon profile picture
Neo4j@neo4j
Neo4j is the world's leading graph database, with native graph storage and processing..

ХАНГ ТАГС

ОВАЈ ЧЛАНАК ЈЕ ПРЕДСТАВЉЕН У...