将Neo4j封装进Agent / ai #55

Neo4j的各项功能跑通了,应该将其封装进Agent做为应用。LangGraph中有专门的ReAct Agent,可将其Neo4j做为一个工具导入,就是一个好用的Agent啰!

neoagent.jpg
Agent(由AIJoe生成)

from dotenv import dotenv_values
from langchain_openai import ChatOpenAI
from langchain_neo4j import Neo4jGraph
from langchain_neo4j import GraphCypherQAChain
from langchain_core.tools import tool
from pydantic import BaseModel, Field
import json
from langgraph.prebuilt import create_react_agent

 
env_vars = dotenv_values('.env')
OPENAI_KEY = env_vars['OPENAI_API_KEY'] 
OPENAI_BASE_URL = env_vars['OPENAI_API_BASE'] 

# 创建图数据库示例
graph = Neo4jGraph(url='neo4j+s://a2f9xcxx.databases.neo4j.io', 
      username="a2f9xxxx", 
      password="gh7EJn9Ik1xxxxx.xx",
      database="a2f9xxxx"
)

graph_llm = ChatOpenAI(temperature=0, model_name="gpt-5.4-mini" ,api_key=OPENAI_KEY,base_url=OPENAI_BASE_URL)


class DiseaseQuery(BaseModel):
    query: str = Field(description="Questions for disease queries")

@tool(args_schema=DiseaseQuery)
def get_disease_info(query):
    """
    get disease information, built on a graph-based knowledge base, excels at answering broad and comprehensive questions.
    """
    cypher_chain = GraphCypherQAChain.from_llm(
        graph=graph,
        cypher_llm=graph_llm,
        qa_llm=graph_llm,
        validate_cypher=True, 
        verbose=True,
        allow_dangerous_requests=True
    )
    response = cypher_chain.invoke({"query": query})
    print(362, response["result"])
    
    data = response["result"]
    return json.dumps(data)


tools = [get_disease_info]
agentGraph = create_react_agent(graph_llm, tools=tools)


finan_response = agentGraph.invoke({"messages":["苯中毒要如何防治"]})
print(668, finan_response["messages"][-1].content)  

逻辑还是比较简洁直接,将Neo4j封装成ReAct Agent的一个工具,直接跑就可以啰!