Ин мақолаи блог тафсилоти чӣ гуна сохтани агенти GraphRAG бо истифода аз пойгоҳи додаҳои графикии Neo4j ва базаи вектории Milvus . Ин агент қудрати пойгоҳи додаҳои графикӣ ва ҷустуҷӯи векториро барои пешниҳоди ҷавобҳои дақиқ ва мувофиқ ба дархостҳои корбар муттаҳид мекунад. Дар ин мисол, мо LangGraph, Llama 3.1 8B-ро бо Ollama ва GPT-4o истифода мебарем.
Системаҳои анъанавии Ҷустуҷӯи Augmented Generation ( RAG ) танҳо ба он такя мекунанд
Агенти мо се консепсияи калидиро пайгирӣ мекунад: масир, механизмҳои бозгашт ва ислоҳи худ. Ин принсипҳо тавассути як қатор ҷузъҳои LangGraph амалӣ карда мешаванд:
Пас мо ҷузъҳои дигар дорем, ба монанди:
Меъмории агенти GraphRAG-и моро метавон ҳамчун ҷараёни корӣ бо якчанд гиреҳҳои ба ҳам алоқаманд тасаввур кард:
Барои нишон додани имкониятҳои агентҳои LLM-и мо, биёед ду ҷузъи гуногунро дида бароем: Graph Generation
ва Composite Agent
.
Дар ҳоле ки рамзи пурра дар поёни ин паём мавҷуд аст, ин порчаҳо фаҳмиши беҳтареро дар бораи он ки ин агентҳо дар чаҳорчӯбаи LangChain кор мекунанд, таъмин хоҳанд кард.
Ин ҷузъ барои беҳтар кардани раванди ҷавоб ба саволҳо бо истифода аз имкониятҳои Neo4j тарҳрезӣ шудааст. Он ба саволҳо тавассути истифодаи донише, ки дар пойгоҳи додаҳои графикии Neo4j ҷойгир шудааст, ҷавоб медиҳад. Ин аст, ки чӣ тавр кор мекунад:
GraphCypherQAChain
- Ба LLM имкон медиҳад, ки бо пойгоҳи додаҳои графикии Neo4j ҳамкорӣ кунад. Он LLM-ро бо ду роҳ истифода мебарад:
cypher_llm
- Ин мисоли LLM барои тавлиди дархостҳои Cypher барои истихроҷи иттилооти мувофиқ аз график дар асоси саволи корбар масъул аст.
Тасдиқ - Боварӣ ҳосил кунед, ки дархостҳои Cypher тасдиқ карда шудаанд, то боварӣ ҳосил кунанд, ки онҳо аз ҷиҳати синтаксисӣ дурустанд.
Ҷустуҷӯи контекст - Дархостҳои тасдиқшуда дар графи Neo4j барои дарёфти контексти зарурӣ иҷро карда мешаванд.
Насли ҷавоб – Модели забон контексти дарёфтшударо барои тавлиди ҷавоб ба саволи корбар истифода мебарад.
### 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-ро муттаҳид созад, ки барои фаҳмиши беҳтари маълумот ва ба ҷавобҳои дақиқтар ва нозукиҳо оварда расонад. Ин аст, ки чӣ тавр кор мекунад:
### 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.
Бо ҳамгироии ҷустуҷӯҳои графикӣ ва векторӣ, мо ҷонибҳои тавонои ҳарду равишро истифода мебарем. Ҷустуҷӯи графикӣ дақиқиро таъмин мекунад ва муносибатҳои сохториро паймоиш мекунад, дар ҳоле ки ҷустуҷӯи векторӣ тавассути фаҳмиши семантикӣ амиқро илова мекунад.
Ин усули омехта як қатор бартариҳоро пешниҳод мекунад:
Дар ин паёми блог, мо нишон додем, ки чӣ гуна агенти GraphRAG-ро бо истифода аз Neo4j ва Milvus сохтан мумкин аст. Бо муттаҳид кардани ҷиҳатҳои қавӣ дар пойгоҳи додаҳои графикӣ ва ҷустуҷӯи вектор , ин агент ба дархостҳои корбар ҷавобҳои дақиқ ва мувофиқ медиҳад.
Меъмории агенти RAG-и мо бо масири бахшидашуда, механизмҳои бозгашт ва қобилиятҳои худидоракунии худ онро мустаҳкам ва боэътимод мегардонад. Намунаҳои ҷузъҳои тавлиди График ва Агенти Композитӣ нишон медиҳанд, ки чӣ гуна ин агент метавонад ба пойгоҳи додаҳои векторӣ ва графикӣ ворид шавад, то ҷавобҳои ҳамаҷониба ва нозукиро пешниҳод кунад.
Мо умедворем, ки ин дастур муфид буд ва ба шумо илҳом мебахшад, ки имкониятҳои омезиши пойгоҳи додаҳои графикӣ ва ҷустуҷӯи векторҳоро дар лоиҳаҳои шахсии худ санҷед.
Рамзи ҷорӣ дар GitHub дастрас аст.
Барои гирифтани маълумоти бештар дар бораи ин мавзӯъ, дар NODES 2024 7 ноябр ба мо ҳамроҳ шавед, конфронси ройгони виртуалии таҳиягарони мо оид ба барномаҳои интеллектуалӣ, графикҳои дониш ва AI. Ҳоло сабти ном шавед!