Token导航 LogoToken导航TokenDH.com
finance graph agent logo
数据服务stdio官方级别未说明来源级核验

finance graph agent

MCP Server

基于Neo4j图数据库和MCP工具调用协议的增强型RAG系统,支持关系推理和多维度检索。

工具数

0

提示词数

0

GitHub Stars

2

资源数

0
图数据库Python数据分析

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

fu4geliu

提供方

fu4geliu

最后核验

2026/5/17 20:19

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install -r requirements.txt

详细介绍

🚀 Graph-Enhanced RAG: Neo4j + MCP

基于图数据库与工具调用协议(MCP)的增强型 RAG 系统

![Python](https://www.python.org/) ![License](LICENSE) ![Neo4j](https://neo4j.com/) ![RAG](https://en.wikipedia.org/wiki/Retrieval-augmented_generation)

传统向量检索的局限性?→ 图检索 + 关系推理的增强 RAG

📖 项目简介

本项目是一个增强型 RAG(Retrieval-Augmented Generation)系统,采用 Neo4j 图数据库 + MCP(Model Context Protocol)工具调用协议,相比传统基于向量数据库的 RAG 方案,能够实现更精准的上下文检索和复杂关系推理。

🎯 核心创新点

  • 📊 图检索替代向量检索:使用 Neo4j 图数据库存储结构化知识,支持关系查询和多跳推理
  • 🔗 关系感知检索:不仅检索相似内容,还能发现实体间的关联关系和路径
  • 🛠️ MCP 工具调用协议:通过标准化工具接口,让 LLM 能够动态查询图数据库
  • 🧠 智能检索策略:支持实体历史、关系路径、时序查询等多种检索模式
  • ⚡ 实时知识更新:持续从财经新闻中抽取事件,构建动态知识图谱

🆚 对比传统 RAG

特性传统向量 RAG本项目的图增强 RAG
检索方式语义相似度检索图关系检索 + 语义检索
关系理解❌ 无法理解实体关系✅ 支持多跳关系推理
查询能力关键词/语义匹配关系路径、最短路径、时序查询
结构化非结构化文档块结构化事件-实体-关系
复杂查询"A 和 B 的关系?" ❌"A 和 B 的关系?" ✅

🏗️ 系统架构

增强 RAG 架构图

┌─────────────────────────────────────────────────────────┐
│                    用户查询                              │
│          "宁德时代和比亚迪有什么关系?"                   │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│              LLM (Qwen) + Tool Calling                  │
│  ┌────────────────────────────────────────────────┐    │
│  │  理解查询意图 → 决定调用哪个检索工具            │    │
│  └────────────────────────────────────────────────┘    │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼ (MCP Tool Call)
┌─────────────────────────────────────────────────────────┐
│              Neo4j 图数据库 (检索层)                     │
│  ┌────────────────────────────────────────────────┐    │
│  │  Cypher 查询:                                  │    │
│  │  MATCH path = shortestPath(                    │    │
│  │    (a:Entity {name:"宁德时代"})-[*]-(          │    │
│  │    b:Entity {name:"比亚迪"})                    │    │
│  │  )                                             │    │
│  └────────────────────────────────────────────────┘    │
│                                                          │
│  (Entity) ──[竞争关系]──> (Entity)                      │
│  宁德时代                   比亚迪                        │
│     │                        │                          │
│     └─[投资]─> (Event) (e:Event)
WHERE ent.name CONTAINS $name
ORDER BY e.timestamp DESC

应用场景:回答"宁德时代最近有什么动态?"、"茅台的财务数据?"

工具 3: 关系检索 - find_relationships

# 查找两个实体之间的最短路径(关系推理)
MATCH p = shortestPath(
  (e1:Entity {name: $n1})-[*]-(e2:Entity {name: $n2})
)
RETURN p

应用场景:回答"A 和 B 有什么关系?"、"如何从 A 关联到 B?"

2. 图增强检索的优势

传统向量 RAG 的限制

# 只能做相似度检索
query_vector = encode("宁德时代和比亚迪的关系")
results = vector_db.similarity_search(query_vector, k=5)
# ❌ 问题:无法理解"关系"的含义,只能返回包含这两个词的文档

图增强 RAG 的实现

# 能够进行关系推理
cypher = """
MATCH p = shortestPath(
  (a:Entity {name: "宁德时代"})-[*]-(b:Entity {name: "比亚迪"})
)
RETURN p, relationships(p) as rels
"""
# ✅ 优势:直接返回实体间的路径和关系类型

3. MCP 协议集成

通过 OpenAI Tool Calling 兼容协议(类似 MCP),实现 LLM 与图数据库的交互:

TOOLS_SCHEMA = [
    {
        "type": "function",
        "function": {
            "name": "find_relationships",
            "description": "分析两个实体之间的关系路径",
            "parameters": {
                "type": "object",
                "properties": {
                    "entity1": {"type": "string"},
                    "entity2": {"type": "string"}
                }
            }
        }
    }
]

# LLM 自动决定调用哪个工具
response = client.chat.completions.create(
    model="qwen-max",
    messages=messages,
    tools=TOOLS_SCHEMA,  # 提供工具定义
    tool_choice="auto"   # 让 LLM 自主决定
)

🛠️ 技术栈

组件技术选型作用
检索层Neo4j图数据库,存储结构化知识
LLMQwen (DashScope)生成模型 + Tool Calling
协议OpenAI Tool CallingMCP 兼容的工具调用协议
数据抽取LLM + Transformers从非结构化文本抽取结构化事件
数据源akshare实时财经新闻

📁 项目结构

finance_graph_agent/
├── ingest_service.py      # 数据抽取与图谱构建服务
├── agent_client.py        # RAG Agent 客户端(工具调用)
├── mcp_server.py          # MCP 工具定义(检索策略)
├── database.py            # Neo4j 连接层
├── requirements.txt       
└── README.md             

🚀 快速开始

1. 环境准备

# 安装依赖
pip install -r requirements.txt

# 启动 Neo4j(Docker 方式)
docker run -d \
  --name neo4j \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/password \
  neo4j:latest

2. 配置环境变量

创建 .env 文件:

# Neo4j
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=password

# LLM API
DASHSCOPE_API_KEY=your_key
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LLM_MODEL=qwen-max

3. 启动服务

# 终端1: 启动数据抽取服务(构建知识图谱)
python ingest_service.py

# 终端2: 启动 RAG Agent(支持工具调用)
python agent_client.py

💡 使用示例

示例 1: 关系推理查询

User: 宁德时代和比亚迪有什么关系?

Agent 思考过程:
  1. 识别实体: "宁德时代"、"比亚迪"
  2. 调用工具: find_relationships(entity1="宁德时代", entity2="比亚迪")
  3. Neo4j 查询: 最短路径算法
  4. 返回结果: 路径包含 [竞争关系]、[同行业]、[投资关系] 等
  
Agent 回答:
  根据知识图谱查询,宁德时代和比亚迪之间存在以下关系:
  - 直接关系:同属锂电池行业,存在竞争关系
  - 间接关系:都投资了上游产业链(如锂矿、正极材料)
  - 关联事件:在多个新能源汽车项目中同时出现

示例 2: 时序检索

User: 最近有什么重要的财经事件?

Agent:
  ⚙️ 调用工具: get_latest_market_events(limit=5)
  🔍 执行 Cypher 查询...
  
  根据最新数据,最近发生了以下重要事件:
  1. 宁德时代宣布投资100亿建设新工厂(2024-01-15)
  2. 茅台发布三季度财报,净利润增长15%(2024-01-14)
  ...

示例 3: 实体历史检索

User: 宁德时代最近有什么动态?

Agent:
  ⚙️ 调用工具: search_entity_history(entity_name="宁德时代")
  
  宁德时代最近的动态包括:
  - 2024-01-15:宣布投资100亿建设新工厂(主体角色)
  - 2024-01-10: 与某公司达成战略合作(主体角色)
  - 2024-01-05: 发布新技术突破(主体角色)

🎨 技术亮点

1. 图检索 vs 向量检索

传统向量 RAG

  • 只能做语义相似度匹配
  • 无法理解实体关系
  • 返回的是文档片段,需要 LLM 自行理解

图增强 RAG(本项目)

  • 结构化存储:Event + Entity + Relation
  • 关系推理:支持多跳查询、最短路径
  • 精确检索:直接返回结构化关系数据

2. 多维度检索策略

系统支持三种检索模式,对应不同的查询需求:

检索模式适用场景Cypher 查询类型
时序检索"最近发生了什么?"ORDER BY timestamp
实体检索"A公司的情况?"WHERE name CONTAINS
关系检索"A和B的关系?"shortestPath()

3. MCP 协议的优势

  • 标准化接口:工具定义遵循标准格式,易于扩展
  • LLM 自主决策:让模型自己决定调用哪个工具
  • 灵活组合:支持多工具链式调用
  • 易于维护:工具逻辑与 LLM 逻辑解耦

4. 实时知识更新

  • 持续从新闻源抽取事件
  • 自动构建知识图谱
  • 支持增量更新和去重
  • 时间戳管理,支持时序查询

📊 知识图谱模型

数据模型

(Entity {name: "宁德时代"})
    -[:PARTICIPATES_IN {role: "主体"}]-> 
(Event {type: "投资", trigger: "宣布", timestamp: "2024-01-15"})
    
(Entity {name: "比亚迪"})

检索查询示例

-- 关系路径查询
MATCH p = shortestPath(
  (a:Entity {name: "宁德时代"})-[*]-(b:Entity {name: "比亚迪"})
)
RETURN [n in nodes(p) | labels(n)[0] + ':' + coalesce(n.name, n.type)] as path

-- 实体历史查询
MATCH (ent:Entity)-[r:PARTICIPATES_IN]->(e:Event)
WHERE ent.name CONTAINS "宁德时代"
RETURN e.timestamp, e.type, e.trigger, r.role
ORDER BY e.timestamp DESC

-- 时序查询
MATCH (e:Event)
WHERE e.timestamp >= date() - duration({days: 7})
RETURN e
ORDER BY e.timestamp DESC

🔬 对比实验

查询:"宁德时代和比亚迪有什么关系?"

传统向量 RAG

检索结果: 
- "宁德时代是锂电池龙头企业..."
- "比亚迪也从事锂电池生产..."
- "两者在新能源汽车领域..."

❌ LLM 需要自行推理关系,可能不准确

本项目的图增强 RAG

Neo4j 查询结果:
路径: 宁德时代 -[COMPETES_WITH]-> 比亚迪
路径: 宁德时代 -[INVEST]-> Event -[INVEST]-> 比亚迪

✅ 直接返回结构化关系,LLM 直接使用

🎯 适用场景

  • 金融领域:公司关系分析、事件追踪
  • 知识问答:需要关系推理的复杂查询
  • 企业图谱:供应链、投资关系分析
  • 学术研究:论文引用关系、作者合作网络

🔮 未来规划

  • [ ] 支持向量 + 图混合检索(Hybrid Search)
  • [ ] 实现更复杂的图算法(PageRank、社区发现)
  • [ ] 支持自然语言到 Cypher 的自动转换
  • [ ] 添加查询结果缓存和优化
  • [ ] 支持更多数据源和知识抽取策略
  • [ ] Web 界面和可视化展示

📚 相关技术

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 License

MIT License

👤 作者

fu4geliu - - Email

🙏 致谢


⭐ 如果这个项目对你有帮助,请给个Star支持一下!

目录标签

目录标签

图数据库Python数据分析本地部署增强RAG关系推理知识图谱工具调用协议

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP