Овај блог пост описује како да направите ГрапхРАГ агент користећи Нео4ј базу података графова и Милвус векторску базу података. Овај агент комбинује моћ база података графова и векторске претраге како би пружио тачне и релевантне одговоре на упите корисника. У овом примеру користићемо ЛангГрапх, Ллама 3.1 8Б са Оллама и ГПТ-4о.
Традиционални системи проширене генерације ( РАГ ) се ослањају искључиво на
Наш агент прати три кључна концепта: рутирање, резервни механизми и самоисправљање. Ови принципи се имплементирају кроз низ ЛангГрапх компоненти:
Затим имамо друге компоненте, као што су:
Архитектура нашег ГрапхРАГ агента се може визуализовати као ток посла са неколико међусобно повезаних чворова:
Да бисмо приказали могућности наших ЛЛМ агената, погледајмо две различите компоненте: Graph Generation
и Composite Agent
.
Иако је цео код доступан на дну овог поста, ови исечци ће пружити боље разумевање како ови агенти раде у оквиру ЛангЦхаин-а.
Ова компонента је дизајнирана да побољша процес одговарања на питања коришћењем могућности Нео4ј. Он одговара на питања користећи знање уграђено у Нео4ј базу података графова. Ево како то функционише:
GraphCypherQAChain
– Омогућава ЛЛМ-у да комуницира са Нео4ј базом података графова. ЛЛМ користи на два начина:
cypher_llm
– Ова инстанца ЛЛМ-а је одговорна за генерисање Ципхер упита за издвајање релевантних информација из графикона на основу питања корисника.
Провера ваљаности – Уверава се да су Ципхер упити валидирани како би се осигурало да су синтаксички исправни.
Дохваћање контекста – Потврђени упити се извршавају на Нео4ј графу да би се дохватио потребан контекст.
Генерисање одговора – Језички модел користи преузети контекст да генерише одговор на питање корисника.
### 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ј-а, омогућавајући боље разумевање информација и доводећи до прецизнијих и нијансираних одговора. Ево како то функционише:
### 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.
Интеграцијом претраживања графова и вектора, користимо предности оба приступа. Претрага графова обезбеђује прецизност и навигацију по структурираним односима, док векторска претрага додаје дубину кроз семантичко разумевање.
Ова комбинована метода нуди неколико предности:
У овом посту на блогу показали смо како да направите ГрапхРАГ агент користећи Нео4ј и Милвус. Комбиновањем предности база података графова и векторске претраге , овај агент пружа тачне и релевантне одговоре на упите корисника.
Архитектура нашег РАГ агента, са наменским рутирањем, резервним механизмима и могућностима самокорекције, чини га робусним и поузданим. Примери компоненти генерисања графикона и композитног агента показују како овај агент може да користи векторске и графичке базе података да би пружио свеобухватне и нијансиране одговоре.
Надамо се да је овај водич био од помоћи и да вас инспирише да проверите могућности комбиновања база података графова и векторске претраге у сопственим пројектима.
Тренутни код је доступан на ГитХуб-у .
Да бисте сазнали више о овој теми, придружите нам се на НОДЕС 2024 7. новембра, нашој бесплатној виртуелној конференцији за програмере о интелигентним апликацијама, графиконима знања и вештачкој интелигенцији. Региструјте се сада!