通过MCP+数据库实现AI检索和分析

通过 MCP(Multi-Agent Collaboration Platform,多智能体协作平台)+ 数据库,实现一个AI检索和分析系统

一、系统目标

实现通过 AI 多智能体对结构化(数据库)和非结构化(文档、文本)数据进行:

  • ✅ 智能检索(自然语言问答、SQL 自动生成)

  • ✅ 智能分析(总结、趋势识别、异常检测、风险分析等)

  • ✅ 多模型协同分析 + 决策建议

  • ✅ 结果推送(如 ECM、BPM 系统对接、前端仪表盘展示) 

二、技术组成与框架结构

整体结构如下:

[ 用户 ] ⇄ [ MCP Server ] ⇄ [ Agent / LangChain Tool ] ⇄ [ 数据库 / 文档系统 ]⇅[ 多模型分析引擎 ]

1. MCP Server

  • 支持用户通过自然语言输入查询意图(如:“分析近三月销售异常”)

  • 调用 Agent 工厂,动态分配合适的 AI Agent 进行任务分解与协作

  • 负责中控调度、缓存上下文、流程记录和结果集成

2. 数据检索模块(LangChain + 数据库工具)

  • 使用 LangChain SQLDatabaseChainSQLAgent 工具对接数据库

  • 支持自然语言转 SQL(通过 GPT/Claude 等模型)

  • 数据库返回结构化数据(DataFrame)

  • 对于多表分析,使用 SQLGraph 工具做自动联表推理

3. AI 分析 Agent

  • 负责对结构化数据进行统计分析、趋势识别、聚类等

  • 可通过 Python Agent(LangChain 的 Pandas DataFrame Agent)进行数据分析(用模型调用 pandasmatplotlib 等进行分析)

4. 多模型投票机制(可选)

  • 通过调用 Claude/GPT/Mistral 等多个模型

  • 对分析结果进行比对和投票(如多个模型都认为某条数据是风险项,则置信度更高)

5. 分析结果输出模块

  • 可以将结果推送到:

    • ECM 系统(如 IBM FileNet)做文档记录

    • BPM 系统(如 IBM BPM)发起审批流程

    • 前端仪表盘展示(如 React + Tailwind + Charts) 

三、功能示例

示例 1:自然语言问数据库

用户输入:「帮我查一下过去3个月每个地区的销售趋势,并找出异常波动。」

执行流程:

  1. MCP 调用 SQLAgent 将用户意图翻译为 SQL

  2. 查询数据库中相关销售表

  3. 将数据交给 Pandas Agent 进行趋势图绘制 + 异常检测

  4. 返回分析结果 + 图表

  5. 可选:将异常记录推送到 BPM 发起“销售异常核查”流程 

示例 2:合同数据分析(结合 ECM)

用户输入:「找出近30天签署的合同中,金额超过100万的,并做风险分析。」

  1. 查询数据库 + ECM 中文档(合同 PDF 或条款摘要)

  2. 使用 NLP 模型(或 Agent)读取文本内容进行分析(如违约风险)

  3. 多模型评估结果(Claude/GPT/Mistral 投票)

  4. 推送分析结果到 ECM 系统的备注字段或 BPM 流程中 

四、数据库接入方式(MySQL/PostgreSQL 示例)

可以使用 LangChain 中的 SQLDatabase 对象连接数据库:

from langchain.utilities import SQLDatabasedb = SQLDatabase.from_uri("mysql+pymysql://user:password@host:3306/database_name")

然后使用 SQLDatabaseChainSQLAgent 对接:

from langchain.chains import SQLDatabaseChain
from langchain.chat_models import ChatOpenAIllm = ChatOpenAI(model_name="gpt-4")
db_chain = SQLDatabaseChain.from_llm(llm, db)response = db_chain.run("显示最近三个月销售额趋势")

五、搭建一个本地 MCP + SQLite 的 AI 数据分析原型系统,使用 LangChain + GPT(或本地模型)实现自然语言到 SQL,再通过 Pandas 分析数据。

第一步:系统核心结构设计

我们先构建一个最简 MVP(最小可行产品)版本,包含以下模块:

系统模块划分

模块名功能说明
用户界面输入自然语言查询
MCP Server调度 Agent,管理上下文和执行流程
SQL Agent自然语言转 SQL,并查询 SQLite
分析 Agent用 Pandas 对结果做分析、趋势识别、图表输出等
输出模块将分析结果展示在终端或网页

 

第二步:环境准备

安装依赖(建议新建虚拟环境)

pip install langchain openai sqlite3 pandas matplotlib streamlit

你可以用 gpt-3.5-turbo 作为 LLM,也可以对接本地模型(如 Ollama)

 第三步:原型代码结构

我们先建立如下文件结构:

mcp_sqlite_demo/
│
├── main.py                # 主入口
├── db_init.py             # 创建并填充 SQLite 示例数据
├── mcp_server.py          # 模拟 MCP 调度器
├── agent_sql.py           # SQL Agent 实现
├── agent_analysis.py      # 数据分析 Agent 实现

第四步:编写关键代码

1. 创建示例数据库(db_init.py

import sqlite3
import random
from datetime import datetime, timedeltaconn = sqlite3.connect("sales.db")
cur = conn.cursor()cur.execute("DROP TABLE IF EXISTS sales")
cur.execute("""
CREATE TABLE sales (id INTEGER PRIMARY KEY,region TEXT,amount REAL,sale_date TEXT
)
""")regions = ["华东", "华南", "华北", "西南", "东北"]
start_date = datetime(2023, 12, 1)for i in range(90):for region in regions:date = (start_date + timedelta(days=i)).strftime("%Y-%m-%d")amount = round(random.uniform(5000, 50000), 2)cur.execute("INSERT INTO sales (region, amount, sale_date) VALUES (?, ?, ?)",(region, amount, date))conn.commit()
conn.close()
print("数据库初始化完成 ✅")

 运行后会生成一个 sales.db 的销售数据库。

2. SQL Agent(agent_sql.py

from langchain.utilities import SQLDatabase
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.chat_models import ChatOpenAIdef get_sql_agent():db = SQLDatabase.from_uri("sqlite:///sales.db")llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)toolkit = SQLDatabaseToolkit(db=db, llm=llm)agent_executor = create_sql_agent(llm=llm,toolkit=toolkit,verbose=True,)return agent_executor

 3. 分析 Agent(agent_analysis.py

import pandas as pd
import matplotlib.pyplot as pltdef analyze_sales(df):print("\n🔍 正在分析销售趋势...")trend = df.groupby("sale_date")["amount"].sum()trend.plot(kind="line", title="每日销售趋势", figsize=(10, 5))plt.tight_layout()plt.savefig("sales_trend.png")max_day = trend.idxmax()print(f"\n📈 销售峰值日期:{max_day},金额:{trend.max():,.2f}")

 4. MCP Server 主控(mcp_server.py

from agent_sql import get_sql_agent
from agent_analysis import analyze_sales
import pandas as pd
import sqlite3def run_query(natural_language_query):print(f"\n🧠 MCP 收到请求:{natural_language_query}")agent = get_sql_agent()sql_response = agent.run(natural_language_query)print("\n📊 SQL Agent 执行结果如下:")print(sql_response)# 执行 SQL 再交给分析模块db = sqlite3.connect("sales.db")df = pd.read_sql_query("SELECT * FROM sales", db)analyze_sales(df)

5. 启动主程序(main.py

from mcp_server import run_queryif __name__ == "__main__":print("欢迎使用 MCP + SQLite 智能分析系统")while True:query = input("\n💬 请输入分析请求(或 q 退出):")if query.lower() in ['q', 'exit']:breakrun_query(query)

第五步:运行测试

先初始化数据库:

python db_init.py

 然后运行主程序:

python main.py

示例输入:

过去30天每个地区销售趋势如何?有没有异常波动?

六、可运行的本地系统模板

把这个 MCP + SQLite 的 AI 分析系统打造成一个完整可运行的本地系统模板,包括:

  • ✅ 完整代码结构

  • ✅ Streamlit 前端界面

  • ✅ Docker 容器化部署支持

  • ✅ 可扩展的多 Agent 结构 

1.项目结构设计(最终版)

我们建立如下目录结构:

mcp_sqlite_ai/
│
├── app/
│   ├── __init__.py
│   ├── db_init.py               # 初始化 SQLite 示例数据
│   ├── mcp_server.py            # MCP 调度模块
│   ├── agent_sql.py             # SQL Agent
│   ├── agent_analysis.py        # 分析 Agent
│   └── config.py                # 模型配置
│
├── frontend/
│   └── dashboard.py             # Streamlit 前端交互界面
│
├── Dockerfile                   # Docker 镜像构建
├── requirements.txt             # 依赖列表
└── run.sh                       # 一键运行脚本

2.文件内容逐个说明

app/db_init.py

# 初始化数据库
import sqlite3
import random
from datetime import datetime, timedeltadef init_db():conn = sqlite3.connect("sales.db")cur = conn.cursor()cur.execute("DROP TABLE IF EXISTS sales")cur.execute("""CREATE TABLE sales (id INTEGER PRIMARY KEY,region TEXT,amount REAL,sale_date TEXT)""")regions = ["华东", "华南", "华北", "西南", "东北"]start_date = datetime(2023, 12, 1)for i in range(90):for region in regions:date = (start_date + timedelta(days=i)).strftime("%Y-%m-%d")amount = round(random.uniform(5000, 50000), 2)cur.execute("INSERT INTO sales (region, amount, sale_date) VALUES (?, ?, ?)",(region, amount, date))conn.commit()conn.close()print("✅ SQLite 数据库初始化完成")if __name__ == "__main__":init_db()

 ✅ app/config.py

OPENAI_API_KEY = "your-openai-key"  # 替换成你自己的,或使用环境变量加载

 ✅ app/agent_sql.py

from langchain.utilities import SQLDatabase
from langchain.agents import create_sql_agent
from langchain.agents.agent_toolkits import SQLDatabaseToolkit
from langchain.chat_models import ChatOpenAI
from app.config import OPENAI_API_KEYdef get_sql_agent():db = SQLDatabase.from_uri("sqlite:///sales.db")llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0, openai_api_key=OPENAI_API_KEY)toolkit = SQLDatabaseToolkit(db=db, llm=llm)return create_sql_agent(llm=llm, toolkit=toolkit, verbose=True)

app/agent_analysis.py 

import pandas as pd
import matplotlib.pyplot as pltdef analyze_sales(df, output_path="frontend/sales_plot.png"):trend = df.groupby("sale_date")["amount"].sum()trend.plot(kind="line", title="每日销售趋势", figsize=(10, 5))plt.tight_layout()plt.savefig(output_path)plt.close()return f"趋势图已生成:{output_path}"

 ✅ app/mcp_server.py

import sqlite3
import pandas as pd
from app.agent_sql import get_sql_agent
from app.agent_analysis import analyze_salesdef run_mcp_query(query):agent = get_sql_agent()response = agent.run(query)conn = sqlite3.connect("sales.db")df = pd.read_sql_query("SELECT * FROM sales", conn)plot_path = analyze_sales(df)return response, plot_path

frontend/dashboard.py (Streamlit 前端) 

import streamlit as st
from app.mcp_server import run_mcp_queryst.set_page_config(page_title="AI 智能销售分析", layout="centered")st.title("📊 AI 销售数据分析平台")
query = st.text_input("请输入分析请求(如:过去30天销售趋势)", "")if st.button("提交分析") and query.strip():with st.spinner("正在分析,请稍候..."):response, img_path = run_mcp_query(query)st.success("分析完成")st.image(img_path, caption="销售趋势图", use_column_width=True)st.markdown("### 🤖 SQL Agent 结果")st.markdown(response)

 ✅ requirements.txt

langchain>=0.1.0
openai>=1.0.0
pandas
matplotlib
streamlit
sqlite3

 ✅ Dockerfile

FROM python:3.10-slimWORKDIR /appCOPY . /app
RUN pip install --upgrade pip && \pip install -r requirements.txtEXPOSE 8501CMD ["streamlit", "run", "frontend/dashboard.py", "--server.port=8501", "--server.address=0.0.0.0"]

 ✅ run.sh

#!/bin/bash
echo "初始化数据库..."
python3 app/db_init.pyecho "启动前端界面..."
streamlit run frontend/dashboard.py

3.启动方式

👉 本地运行:

chmod +x run.sh
./run.sh

 浏览器访问:http://localhost:8501

🐳 Docker 容器运行:

docker build -t mcp-ai-agent .
docker run -p 8501:8501 mcp-ai-agent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教学类-102-08】剪纸图案全套代码08——Python点状虚线优化版本02(有空隙)+制作1图2图6图24图

背景需求 代码实现了点状虚线的全套流程,但是图片中主体图案和虚线与左右两边粘连。 【教学类-102-07】剪纸图案全套代码07——Python点状虚线优化版本01(无空隙)+制作1图2图6图24图-CSDN博客文章浏览阅读665次,点赞11次,收藏11次。【教学类-102-07】剪纸图案全套代码07…

循环神经网络 - 长短期记忆网络

在之前的博文中,我们介绍了循环神经网络的长程依赖问题及改进方案,可以参考:循环神经网络 - 长程依赖问题及改进方案-CSDN博客 但是改进方案只是可以缓解梯度消失,并不能彻底解决梯度爆炸问题和记忆容量(Memory Capacity)问题。 …

LLM应用开发(七)--记忆

1.LangChain记忆模块 底层原理:在最新一次问题时,带上前面的人机对话历史内容 1.1.具体方式 缓冲记忆 缓冲窗口记忆(限定存储会话信息次数) 令牌缓冲记忆 摘要总结记忆 摘要缓冲混合记忆 向量存储库记忆

Unity VideoPlayer 播放无声音

增加一个videoPlayer下挂&#xff0c;audiorSource脚本 this.videoPlayer.EnableAudioTrack(0, true); this.videoPlayer.audioOutputMode VideoAudioOutputMode.AudioSource; this.videoPlayer.SetTargetAudioSource(0, this.videoPlayer.GetComponent<AudioSource>()…

AGI|AutoGen入门食用手册,搭建你的智能体流水线

目录 1. AutoGen简介 主要特点 2.快速安装 3. 相关概念 Agent Roles and Conversations 4.多代理对话 4.1 Agents 例子: 两个对话代理 4.2 支持多样化的对话模式 1. AutoGen简介 AutoGen 是一个开源编程框架&#xff0c;用于构建AI代理并促进多个代理之间的合作以解…

基于ImGui+FFmpeg实现播放器

基于ImGuiFFmpeg实现播放器 演示&#xff1a; ImGui播放器 继续研究FFmpeg&#xff0c;之前做了一个SDL的播放器&#xff0c;发现SDL的可视化UI界面的功能稍微差了点&#xff0c;所以今天我们换了一个新的工具&#xff0c;也就是ImGui。 ImGui官方文档&#xff1a;https://g…

ES6变量声明:let、var、const全面解析

一、引言 ECMAScript 6&#xff08;简称 ES6&#xff09;的发布为 JavaScript 带来了许多革命性的变化&#xff0c;其中变量声明方式的更新尤为重要。let、var和const成为开发者日常编码中频繁使用的关键字。 本文将深入解析这三种声明方式的核心特性、区别及最佳实践&#xff…

Java基础 - 反射(2)

文章目录 示例5. 通过反射获得类的private、 protected、 默认访问修饰符的属性值。6. 通过反射获得类的private方法。7. 通过反射实现一个工具BeanUtils&#xff0c; 可以将一个对象属性相同的值赋值给另一个对象 接上篇&#xff1a; 示例 5. 通过反射获得类的private、 pro…

FCOS目标检测

一、模型框架 FCOS采用的网络架构和RetinaNet一样&#xff0c;都是采用FPN架构&#xff0c;如图2所示&#xff0c;每个特征图后是检测器&#xff0c;检测器包含3个分支&#xff1a;classification&#xff0c;regression和center-ness。 对于特征图Fi∈RHWC&#xff0c;其相对…

Java基础 - 泛型(常见用法)

文章目录 泛型类泛型方法泛型类派生子类示例 1&#xff1a;子类固定父类泛型类型&#xff08;StringBox 继承自 Box<String>&#xff09;示例 2&#xff1a;子类保留父类泛型类型&#xff08;AdvancedBox<T> 继承自 Box<T>)示例 3&#xff1a;添加子类自己的…

YOLO学习笔记 | YOLOv8环境搭建全流程指南(2025.4)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== YOLOv8环境搭建 一、环境准备与工具配置1. Conda虚拟环境搭建2. CUDA与…

【 Beautiful Soup (bs4) 详解】

引言 Beautiful Soup 是 Python 最流行的 HTML/XML 解析库&#xff0c;能够从复杂的网页文档中高效提取数据。以下是其核心知识点及示例代码。 一、库简介 1. 核心模块 BeautifulSoup&#xff1a;主类&#xff0c;用于构建文档树结构Tag&#xff1a;表示 HTML/XML 标签的对象…

傅利叶发布首款开源人形机器人N1:开发者可实现完整复刻

2025年4月11日&#xff0c;上海——通用机器人公司傅利叶正式发布首款开源人形机器人 Fourier N1&#xff0c;并同步开放涵盖物料清单、设计图纸、装配指南、基础操作软件在内的完整本体资源包。作为傅利叶 “Nexus 开源生态矩阵” 的首个落地项目&#xff08;“N1” 即 “Nexu…

视觉目标检测大模型GAIA

中国科学院自动化研究所智能感知与计算研究中心携手华为等领军企业&#xff0c;共同推出面向产业应用的视觉目标检测全流程解决方案——GAIA智能检测平台。该研究成果已获CVPR 2021会议收录&#xff08;论文链接&#xff1a; 论文地址&#xff1a;https://arxiv.org/pdf/2106.…

前端时间同步利器:React + useEffect 实现高性能动态时钟

前言 在你奋笔疾敲代码的瞬间&#xff0c;是不是突然一低头&#xff0c;发现时间像偷偷跑路的变量&#xff0c;一眨眼就从上午飘到下午&#xff1f;饭没吃、会没开、工位也快被前端猫霸占了。仿佛你写的不是代码&#xff0c;而是“时间穿梭机”。别慌&#xff0c;咱们今天就来…

前端动画性能优化

前端动画性能优化全攻略&#xff1a;告别卡顿与高CPU占用 一、动画性能问题现状分析 1.1 性能问题现象 动画帧率低于60FPS时出现明显卡顿滚动/缩放操作时响应延迟CPU占用率长期超过70%移动端设备发热严重 1.2 核心问题根源 浏览器渲染流程中的性能瓶颈主要出现在&#xff1…

springboot中如何处理跨域

什么是跨域 跨域&#xff08;Cross-Origin&#xff09;是浏览器出于安全考虑&#xff0c;对不同源的资源访问施加的限制机制。其核心原因是同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;即浏览器仅允许协议&#xff08;Protocol&#xff09;、域名&#xf…

js实现生肖宜忌展示

实现效果图如下 实现逻辑&#xff1a; 1.录入属相列表&#xff08;列表顺序不可调整&#xff09;&#xff1b; 2.录入各属相相宜、相忌属相&#xff1b; 3.输入年份后&#xff0c;根据属相列表获取到正确的属相&#xff1b; 4.根据获取的属相去展示宜、忌属相&#xff1b; 5.打…

3DMAX笔记-UV知识点和烘焙步骤

1. 在展UV时&#xff0c;如何点击模型&#xff0c;就能选中所有这个模型的uv 2. 分多张UV时&#xff0c;不同的UV的可以设置为不同的颜色&#xff0c;然后可以通过颜色进行筛选。 3. 烘焙步骤 摆放完UV后&#xff0c;要另存为一份文件&#xff0c;留作备份 将模型部件全部分成…

AI 重构 Java 遗留系统:从静态方法到 Spring Bean 注入的自动化升级

在当今快速发展的软件行业中&#xff0c;许多企业都面临着 Java 遗留系统的维护和升级难题。这些老旧系统往往采用了大量静态方法&#xff0c;随着业务的不断发展&#xff0c;其局限性日益凸显。而飞算 JavaAI 作为一款强大的 AI 工具&#xff0c;为 Java 遗留系统的重构提供了…