LangGraph + Neo4j 集成

概述

LangGraph 是一个用于构建有状态、多角色应用的框架,使用大语言模型(LLM)。与固定的代理架构不同,LangGraph 让您可以将自定义工作流定义为图——完全控制代理的推理、路由和执行。它提供循环图结构、内置持久化、人机交互模式以及流式支持。

虽然它可以无缝集成到 LangChain 生态系统,但也可以完全独立使用,无需将 LangChain 作为依赖。

安装

pip install langgraph langchain-neo4j langchain-mcp-adapters

核心功能

  • 可定制架构:精确定义代理的工作流程——添加验证步骤、并行分支、审批关卡或多代理协作

  • 显式的节点和边定义,用于代理逻辑

  • 内置持久化和人机交互模式

  • 流式支持,实现实时响应

  • 可独立运行,也可与 LangChain 集成

示例

Notebook 描述

langgraph.ipynb

使用 LangGraph 与 Neo4j 构建公司研究代理,具备 MCP 集成、定制工具、向量搜索和基于图的工作流编排

扩展点

1. 自定义图架构

LangGraph 的核心价值在于架构灵活性。您定义节点(函数)和边(转移),即可创建任何工作流

from langgraph.graph import END, START, StateGraph
from typing_extensions import Annotated, TypedDict

class MessagesState(TypedDict):
    messages: Annotated[list[AnyMessage], operator.add]
    llm_calls: int

# Build your custom workflow
agent_builder = StateGraph(MessagesState)

# Add nodes - each is a function that transforms state
agent_builder.add_node("llm_call", llm_call)
agent_builder.add_node("tool_node", tool_node)

# Define the flow with edges
agent_builder.add_edge(START, "llm_call")
agent_builder.add_conditional_edges("llm_call", should_continue, ["tool_node", END])
agent_builder.add_edge("tool_node", "llm_call")

agent = agent_builder.compile()

您可以构建的示例架构

  • ReAct 循环与工具调用(示例在 notebook 中)

  • 具有交接的多代理系统

  • 带有验证和重试逻辑的流水线

  • 人机交互审批工作流

  • 并行执行分支并合并结果

2. MCP 集成

使用 langchain-mcp-adapters 连接 MCP 服务器

from langchain_mcp_adapters.client import MultiServerMCPClient

cypher_mcp_config = {
    "neo4j-database": {
        "transport": "stdio",
        "command": "uvx",
        "args": ["mcp-neo4j-cypher"],
        "env": {
            "NEO4J_URI": os.environ["NEO4J_URI"],
            "NEO4J_USERNAME": os.environ["NEO4J_USERNAME"],
            "NEO4J_PASSWORD": os.environ["NEO4J_PASSWORD"],
            "NEO4J_DATABASE": os.environ["NEO4J_DATABASE"]
        }
    }
}

client = MultiServerMCPClient(cypher_mcp_config)
mcp_tools = await client.get_tools()

3. 直接 Neo4j 集成

langchain-neo4j 包提供原生集成

  • Neo4jGraph: 直接连接,可在自定义工具中执行 Cypher 查询

  • Neo4jVector: 向量存储集成,用于通过自定义检索查询进行语义搜索

4. 自定义工具

使用 @tool 装饰器定义自定义 Neo4j 工具,并与 MCP 工具组合

from langchain.tools import tool
from langchain_neo4j import Neo4jGraph

neo4j_graph = Neo4jGraph()

@tool
async def get_investments(company: str) -> str:
    """Returns the investments by a company by name."""
    results = neo4j_graph.query("""
        MATCH (o:Organization)-[:HAS_INVESTOR]->(i)
        WHERE o.name = $company
        RETURN i.id as id, i.name as name, head(labels(i)) as type
    """, {"company": company})
    return json.dumps(results, indent=2)

5. Neo4j 检查点保存器

langgraph-checkpoint-neo4j 包提供检查点保存器,用于将代理状态持久化到 Neo4j

  • Neo4jSaver: 同步检查点,用于存储对话历史和代理状态

  • AsyncNeo4jSaver: 异步变体,实现非阻塞的检查点操作

from langgraph.checkpoint.neo4j import AsyncNeo4jSaver

async with await AsyncNeo4jSaver.from_conn_string(
    uri=NEO4J_URI,
    user=NEO4J_USERNAME,
    password=NEO4J_PASSWORD,
    database=NEO4J_DATABASE
) as checkpointer:
    await checkpointer.setup()

    agent = agent_builder.compile(checkpointer=checkpointer)

MCP 身份验证

支持的机制

环境变量(STDIO 传输) - 对于本地 MCP 服务器(如 mcp-neo4j-cypher),凭证通过生成时的 env 参数传递。

HTTP 标头(HTTP/SSE 传输) - 对于远程 MCP 服务器,可通过 headers 参数传递 API 密钥或 Bearer 令牌。

OAuth 2.0(客户端内) - 当前 Python SDK 不支持客户端内的 OAuth2 MCP 认证。

HTTP 传输配置(例如,针对 Google Colab)

cypher_mcp_config = {
    "neo4j-database": {
        "url": "https://:8000/mcp",
        "transport": "streamable_http"
    }
}
© . This site is unofficial and not affiliated with Neo4j, Inc.