智能體開發實戰 | 基于Dify+MCP實現理財助手智能體
前言
AI智能體通過感知環境、自主決策和執行任務,突破傳統大模型僅限于語言交互的局限。例如,當用戶指令“訂一張明天去北京的機票”時,智能體不僅理解語義,還能自動調用航班查詢接口、完成支付并同步至日程系統。這種能力使其在客服、醫療、智能制造等領域展現出顛覆性潛力。
然而,智能體的開發長期受制于接口碎片化與工具兼容性難題。開發者需為不同數據源編寫適配代碼,導致60%的開發周期浪費在系統對接上。這一痛點催生了MCP協議的誕生。MCP(Model Context Protocol,模型上下文協議)由Anthropic于2024年底開源,其核心是通過標準化接口實現大模型與外部工具的“即插即用”。類比互聯網的TCP/IP協議,MCP構建了AI交互的通用語言。
本文將介紹如下內容:
- 搭建基于Docker的MySQL數據庫環境
- 開發MCP Server實現MySQL數據庫操作
- 基于Dify搭建智能體通過MCP操作MySQL實現理財助手智能體
搭建基于Docker的MySQL數據庫環境
1) 啟動Docker容器
- 建立docker_compose.yaml,內容如下
services:
mysql:
image: mysql:5.7
container_name: mysql5.7
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- TZ=Asia/Shanghai
volumes:
- ./volumes:/var/lib/mysql
command: --character-set-server=utf8mb4
- 執行
docker compose up -d
啟動數據庫
2) 創建數據庫和表
- 下載MySQL客戶端軟件,例如dbeaver (https://dbeaver.io/download)
- 連接數據庫,創建數據庫和表
create database testdb;
use testdb;
CREATE TABLE `finance` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` varchar(36) NOT NULL DEFAULT '' COMMENT '用戶ID',
`date` datetime NOT NULL COMMENT '金額發生日期',
`amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '收入支出金額(收入記為正數,支出記為負數)',
`category` varchar(32) NOT NULL DEFAULT '' COMMENT '收支類別',
`remark` varchar(100) NOT NULL DEFAULT '' COMMENT '收支具體類目',
PRIMARY KEY (`id`),
KEY `idx_user_date` (`user_id`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日常收支';
開發MCP Server實現MySQL數據庫操作
以windows開發環境為例:
1) 設置Python開發環境
安裝uv。uv是一個用Rust編寫的極其快速的Python包和項目管理器。
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
創建python虛擬環境(假設項目目錄為finance)
# Create a new directory for our project
uv init finance
cd finance
# Create virtual environment and activate it
uv venv
.venv\Scripts\activate
# Install dependencies
uv add mcp[cli] mysql-connector-python python-dotenv
如果在執行.venv\Scripts\activate時報錯“無法加載.venv\Scripts\activate.ps1,因為在此系統上禁止運行腳本”,需要以管理員權限在終端執行
Set-ExecutionPolicy RemoteSigned
更改執行策略后再重新執行。
2) 設置環境變量
創建.env,配置數據庫相關的環境變量,內容如下
DB_HOST=localhost
DB_USER=root
DB_PASSWD=root
DB_NAME=testdb
把.env添加到.gitignore
3) MCP Server實現代碼
實現兩個mcp工具:
- get_table_definition: 獲取表結構定義
- execute_sql: 執行SQL語句
import mysql.connector
import json
import os
from contextlib import contextmanager
from dotenv import load_dotenv
from mcp.server.fastmcp import FastMCP
# 加載環境變量
load_dotenv()
class DbManager:
def __init__(self):
self.connection_pool = mysql.connector.pooling.MySQLConnectionPool(
pool_name="db_pool",
pool_size=5,
pool_reset_session=True,
host=os.getenv("DB_HOST"), # 數據庫服務器地址
user=os.getenv("DB_USER"), # 數據庫用戶名
password=os.getenv("DB_PASSWD"), # 數據庫密碼
database=os.getenv("DB_NAME"), # 數據庫名
)
@contextmanager
def get_cursor(self):
with self.connection_pool.get_connection() as connection:
cursor = None
try:
cursor = connection.cursor()
yield cursor
connection.commit()
except Exception as e:
connection.rollback()
raise e
finally:
if cursor:
cursor.close()
def execute_sql(self, sql: str) -> str:
with self.get_cursor() as cursor:
cursor.execute(sql)
if cursor.description is not None:
rows = cursor.fetchall()
result = {
"columns": [desc[0] for desc in cursor.description],
"rows": rows,
}
return json.dumps(result, default=str)
else:
return f"row affected:{cursor.rowcount}"
dbManager = DbManager()
# Initialize FastMCP server
mcp = FastMCP()
@mcp.tool()
def get_table_definition(table: str) -> str:
"""get table definition"""
return dbManager.execute_sql(f"show create table {table}")
@mcp.tool()
def execute_sql(sql: str) -> str:
"""execute sql"""
return dbManager.execute_sql(sql)
if __name__ == "__main__":
# Initialize and run the server
mcp.run(transport="sse")
3) 啟動MCP Server
uv run main.py
基于Dify搭建智能體通過MCP操作MySQL實現理財助手智能體
Dify是一款開源的大語言模型應用開發平臺,旨在降低AI應用的開發門檻,幫助開發者和企業快速構建、部署及管理生成式AI應用。
假設已經通過Docker Desktop for Windows安裝Dify。
1) 安裝MCP插件
點擊右上角“插件”按鈕,進入插件頁面,選擇“探索Marketplace
選擇插件Dify Agent 策略
進行安裝。
選擇插件
MCP SSE / StreamableHTTP
進行安裝。
2) 設置MCP服務
切換到"插件"tab,選擇已經安裝的插件"MCP SSE / StreamableHTTP",點擊“去授權”
填上MCP服務配置:
配置如下:
{"finance_server":{"url":"http://host.docker.internal:8000/sse","headers":{},"timeout":50,"sse_read_timeout":50}}
3) 創建Chatflow應用
- 創建一個空白應用,類型為Chatflow
- 調整工作流,把默認的LLM節點替換為Agent節點
- 設置Agent節點的Agent策略,并添加MCP工具策略選擇Function Calling
- Agent節點的模型選擇doubao-1.5-pro-32k通義千問系列的模型跑起來效果不佳,這次改用豆包模型
- 設置Agent節點的指令(系統提示詞)
# 角色
你是記賬助手,可以通過調用MCP工具完成記錄日常收入和支出并作分析。
為了獲得MCP工具列表,必須先通過mcp_sse_list_tools獲取。
為了完成記賬操作,需要先獲取表finance的定義。
記賬的用戶ID取值為{{#sys.user_id#}}
# 收支類別
收入:工資薪金,勞務報酬,投資收益,分紅收入,租金收入,其它收入
支出:住房,交通,通訊,保險,餐飲,電子產品,日用品,服飾,旅行,娛樂,醫療,學習,其它支出
# 技能
## 技能1:記錄日常開支
將開支信息記錄到數據庫表finance
## 技能2:統計日常開支
根據用戶輸入信息分析統計日常開支
# 限制
僅處理記賬相關問題,不回復其它問題
- 設置Agent節點的查詢和最大迭代次數Agent完成一項任務可能需要迭代多次調用工具,最大迭代次數設置過小可能導致無法正常完成任務。
- 預覽調試輸入“昨天吃飯用了50元,還花了22元買了拖鞋。今天買手機花了1999元,吃飯花了60元”,驗證輸出為成功記錄支出。
另外,通過數據庫表驗證數據正常插入
輸入“匯總各個類別的金額”,驗證數據查詢
確認無誤后點擊右上角的“發布”按鈕發布應用
總結
基于Dify搭建的智能體案例,不僅展示了從語義理解到工具調用的完整決策鏈路,更印證了MCP協議在降低開發成本和加速應用落地方面的工程意義。