通過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.pswp.cn/news/900957.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900957.shtml
英文地址,請注明出處:http://en.pswp.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 遺留系統的重構提供了…