苏森AI

  • 首页
  • AI资讯
  • AI应用
  • AI工作流
  • AI智能体
  • AI提示词
苏森AI
从这里开启你的AI学习旅程!
  1. 首页
  2. AI智能体
  3. 正文

智能体开发实战|基于Dify+MCP实现理财助手智能体

2025-05-21 126点热度 0人点赞 0条评论

前言

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
.venvScriptsactivate

# Install dependencies
uv add mcp[cli] mysql-connector-python python-dotenv

如果在执行.venvScriptsactivate时报错“无法加载.venvScriptsactivate.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 策略进行安装。

智能体开发实战|基于Dify+MCP实现理财助手智能体

选择插件MCP SSE / StreamableHTTP进行安装。

智能体开发实战|基于Dify+MCP实现理财助手智能体

2) 设置MCP服务

切换到"插件"tab,选择已经安装的插件"MCP SSE / StreamableHTTP",点击“去授权”

智能体开发实战|基于Dify+MCP实现理财助手智能体

填上MCP服务配置:

智能体开发实战|基于Dify+MCP实现理财助手智能体

配置如下:

{"finance_server":{"url":"http://host.docker.internal:8000/sse","headers":{},"timeout":50,"sse_read_timeout":50}}

3) 创建Chatflow应用

  • • 创建一个空白应用,类型为Chatflow

    智能体开发实战|基于Dify+MCP实现理财助手智能体
  • • 调整工作流,把默认的LLM节点替换为Agent节点

    智能体开发实战|基于Dify+MCP实现理财助手智能体
  • • 设置Agent节点的Agent策略,并添加MCP工具
    策略选择Function Calling

    智能体开发实战|基于Dify+MCP实现理财助手智能体
  • • Agent节点的模型选择doubao-1.5-pro-32k
    通义千问系列的模型跑起来效果不佳,这次改用豆包模型
  • • 设置Agent节点的指令(系统提示词)
# 角色
你是记账助手,可以通过调用MCP工具完成记录日常收入和支出并作分析。
为了获得MCP工具列表,必须先通过mcp_sse_list_tools获取。
为了完成记账操作,需要先获取表finance的定义。
记账的用户ID取值为{{#sys.user_id#}}

# 收支类别
收入:工资薪金,劳务报酬,投资收益,分红收入,租金收入,其它收入
支出:住房,交通,通讯,保险,餐饮,电子产品,日用品,服饰,旅行,娱乐,医疗,学习,其它支出

# 技能
## 技能1:记录日常开支
将开支信息记录到数据库表finance

## 技能2:统计日常开支
根据用户输入信息分析统计日常开支

# 限制
仅处理记账相关问题,不回复其它问题
  • • 设置Agent节点的查询和最大迭代次数
    Agent完成一项任务可能需要迭代多次调用工具,最大迭代次数设置过小可能导致无法正常完成任务。

    智能体开发实战|基于Dify+MCP实现理财助手智能体
  • • 预览调试
    输入“昨天吃饭用了50元,还花了22元买了拖鞋。今天买手机花了1999元,吃饭花了60元”,验证输出为成功记录支出。

    智能体开发实战|基于Dify+MCP实现理财助手智能体

另外,通过数据库表验证数据正常插入

智能体开发实战|基于Dify+MCP实现理财助手智能体

输入“汇总各个类别的金额”,验证数据查询

智能体开发实战|基于Dify+MCP实现理财助手智能体

确认无误后点击右上角的“发布”按钮发布应用

总结

基于Dify搭建的智能体案例,不仅展示了从语义理解到工具调用的完整决策链路,更印证了MCP协议在降低开发成本和加速应用落地方面的工程意义。

#智能体开发 #Dify开发 #MCP开发 #AI应用开发


如果您觉得本文对您有帮助,欢迎关注、点赞、转发、推荐

参考资料

  • • https://github.com/langgenius/dify.git
  • • https://github.com/modelcontextprotocol

本篇文章来源于微信公众号: AI大模型应用开发

标签: AI应用 Dify mcp 智能体
最后更新:2025-07-26

苏森

这个人很懒,什么都没留下

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
最新 热点 随机
最新 热点 随机
我替你们试过了,这才是Nano Banana在国内最爽的玩法 即梦AI图片、视频无水印保存教程:跟即梦水印说再见吧!亲测有效,上手超简单。 生成图片有水印怎么办?豆包最新无水印图片保存技巧(手机/网页端) 90%的人都不知道,这套提示词公式,让我AI生成的画面准确率提升5倍 1小时用AI工具搞定一支《浪浪山》风格茶饮广告片 别人花一周爬数据,我用Crawlee只花了十分钟! 保姆级n8n教程来了:手把手教你打造一个AI生成内容并自动发布公众号的工作流 一线中小学教师的10个豆包AI教学指令公式+实操示例
100%免费,不限次数,无需魔法,无限生图生视频的AI网站给大家找到了 Google王炸图像模型Nano Banana!附:国内免费可用指南 太有用了!53 个作品狂揽 11 万粉,AI 做安全科普:第一人称 + 危机反转,看完就记牢 基于Dify动态解析异构银行流水:架构拆解→风控报告生成 月薪20k+的小红书运营,正偷偷用AI搭“爆文选题库” 不用卷剪辑了!用这个视频Agent输入想法,自动出爆款短视频 AI智能体:一键生成睡前历史故事短视频,用AI难道就不可以做出好内容吗? 别人花一周爬数据,我用Crawlee只花了十分钟!
标签聚合
豆包 扣子 nano-banana n8n Agent coze 工作流 飞书 小红书 ChatGPT 智能体 提示词 Dify Gemini Prompt DeepSeek

COPYRIGHT © 2025 苏森AI SOOSON.COM. ALL RIGHTS RESERVED.

站点地图