AI大模型智能体开发实战|基于 Dify + MCP 的理财助手

导读: 本文以"AI大模型智能体开发实战|基于 Dify + MCP 的理财助手"为主题,完整还原一个可上线的 AIGC 理财助手项目:从技术选型、环境部署、智能体(Agent)架构设计,到插件开发、金融数据抓取、微信公众号接入,再到上线运维与性能安全优化,适合企业技术团队和个人开发者实践参考。


一、背景与核心概念

1.1 Dify:面向生产的开源 LLMOps 平台

  • 定位:Dify 将 Backend‑as‑a‑Service 与 LLMOps 结合,提供可视化 Prompt 编排、RAG 工作流、Agent 框架和低代码接口,帮助开发者快速发布生成式 AI 应用。(Dify Docs[1])
  • 生态:GitHub 已提供完整源码与 Docker 部署脚本,并内置对主流模型(OpenAI、Anthropic、Moonshot、Gemini 及本地 LLM)支持。(GitHub[2])

1.2 MCP(Model Context Protocol):Agent 的"USB‑C"

  • 定义:MCP 由 Anthropic 提出,用统一协议让 AI Agent 可在不同模型、工具与操作系统间无缝对话,降低调用外部服务的耦合度。(The Verge[3])
  • 实现 :开源库 mcp‑agent 提供了简洁的"意图‑工具‑回复"三段式流水线,可与 LangChain、Dify 等框架配合。(GitHub[4])
  • 生态趋势:微软在 Windows AI Foundry 中正式加入 MCP 支持,宣称它将成为 AI 应用的"USB‑C"。(The Verge[5])

1.3 理财助手的业务价值

  • 个性化投资顾问:基于大模型的上下文推理能力,结合个人资产与风险偏好生成投资建议。(BetterYeah[6])
  • 快速行情查询与组合分析:对接实时/历史金融数据 API,降低普通投资者获取信息门槛。(GeeksforGeeks[7], PyPI[8])
  • 多渠道连接:通过微信公众号、网页或 App,小程序触达终端用户。(CSDN Blog[9], Zhihu[10])

二、开发环境准备

组件 版本 / 说明 作用
Docker & Docker‑Compose 24+ 统一部署 Dify、MCP 服务、向量库
Python 3.11 SDK、插件、Webhook 逻辑
Dify 最新 stable LLMOps 与多 Agent 调度
mcp‑agent 0.4.x MCP 流水线核心库
向量库 Milvus 或 Qdrant 存储金融研报、FAQ 等检索语料
yfinance / iexfinance 0.2+ / 0.6+ 行情与财报数据抓取
wechatpy + Flask 2.x 公众号服务器

2.1 一键安装 Dify

bash 复制代码
git clone https://github.com/langgenius/dify.git
cd dify/deploy
docker compose -f docker-compose.enterprise.yml up -d

容器启动后访问 http://<your_ip>:5000 即可。(GitHub[11])

2.2 安装 MCP 及金融依赖

复制代码
pip install mcp-agent dify-api-python yfinance iexfinance wechatpy flask python-dotenv

dify-api-python SDK 简化了对 Dify SaaS 或自建实例的 API 调用。(GitHub[12])


三、整体架构设计

yaml 复制代码
用户 ─► 微信公众号 ─► Flask Webhook
                         │
                         ▼
                Dify Streaming API
                         │
            ┌────────────┴───────────┐
            │        Router Agent    │
            ├────────────┬───────────┤
            │  MCP Action: FetchData │  ←─ yfinance/IEX
            ├────────────┴───────────┤
            │  MCP Action: Analyze   │  ←─ Pandas/NumPy
            ├────────────┬───────────┤
            │  MCP Action: Response  │
            └────────────────────────┘
  1. 入口层:微信公众号接收用户消息,WebHook 转成 JSON 调用 Dify;支持文字、语音转写。(CSDN Blog[13], Zhihu[14])
  2. Dify Router Agent:根据意图路由到不同 MCP Action(数据抓取、策略分析、自然语言回复)。(Dify Docs[15])
  3. MCP Action :最小可组合单元;通过 @tool 声明需要外部函数并返回 JSON,降低大模型"幻想"风险。(GitHub[16])
  4. 数据层:行情接口(Yahoo / IEX)、本地向量库、RDS(保存用户配置)。(GeeksforGeeks[17], Analyzing Alpha[18])

四、分步实战

4.1 在 Dify 创建应用

  1. 新建 Dataset:上传券商研报 PDF、基金招募说明书等,Dify 会自动切分文本并写入向量库。(Dify Docs[19])
  2. Prompt 编排 :在可视化编辑器中添加 RouterFinancial‑QAPortfolio‑Analysis 三个节点,每个节点对应不同 MCP Action。
  3. 模型配置:选择 GPT‑4o 或 Claude‑Sonnet;若成本敏感可串联 Llama‑3‑8B 作摘要、GPT‑4o 作决策。

4.2 编写 MCP 动作(Python 示例)

python 复制代码
# mcp_actions.py
from mcp_agent import action, ctx
import yfinance as yf
from iexfinance.stocks import Stock

@action(name="get_stock_price", desc="获取实时股价")
def get_stock_price(symbol: str):
    price = yf.Ticker(symbol).fast_info['last_price']
    return {"symbol": symbol, "price": price}

@action(name="get_company_finance", desc="拉取财报摘要")
def get_company_finance(symbol: str):
    stock = Stock(symbol, token=ctx.secrets['IEX_TOKEN'])
    return stock.balance_sheet().iloc[0].to_dict()

yfinance 使用示例来源于 GeeksForGeeks 教程;IEX Cloud SDK 用法参考官方文档。(GeeksforGeeks[20], PyPI[21])

4.3 在 Dify 中注册 Tool

Tools ➜ Custom Tools ➜ +Tool,粘贴上方函数签名即可自动生成 JSON Schema。(Dify Docs[22])

4.4 配置 MCP Pipeline

mcp.yaml

perl 复制代码
version: 0.2
pipeline:
  - use: get_stock_price
    when: "user_asks_price"
  - use: get_company_finance
    when: "user_asks_finance"
  - use: respond_naturally

基于 LangChain 的 MCP 适配器还支持在链前后插入预处理器/后处理器。(hubwiz.com[23])

4.5 微信公众号对接

ini 复制代码
# app.py
from flask import Flask, request, abort
from wechatpy import parse_message, create_reply
from dify_api_python import DifyClient
import os

app = Flask(__name__)
dify = DifyClient(base_url=os.getenv("DIFY_URL"), api_key=os.getenv("DIFY_KEY"))

@app.route("/wx", methods=["GET", "POST"])
def wechat():
    if request.method == "GET":
        # 服务器验证略
        return request.args.get("echostr", "")
    msg = parse_message(request.data)
    if msg.type == "text":
        rsp = dify.chat.completions(
              model="router-agent",
              inputs={"query": msg.content},
              user="wx_"+msg.source)
        reply = create_reply(rsp.choices[0].message.content, msg)
        return reply.render()
    return "success"

公众号开启服务器配置 → 填写 URL、Token 即可。(CSDN Blog[24], CSDN Blog[25])

4.6 Docker‑Compose 一键部署

bash 复制代码
version: "3.9"
services:
  dify:
    image: langgenius/dify:stable
    ports: ["5000:80"]
    env_file:
      - .env
  mcp:
    build: ./mcp_svc
    env_file: .env
  wechat:
    build: ./wechat
    ports: ["80:8000"]
    depends_on: [dify, mcp]
  qdrant:
    image: qdrant/qdrant:latest
    volumes: ["./qdrant_data:/qdrant/storage"]

五、进阶功能

5.1 智能资产组合分析

ini 复制代码
import pandas as pd
import numpy as np
from scipy.optimize import minimize

def optimize_portfolio(symbols):
    prices = yf.download(symbols, period="3y")["Adj Close"]
    returns = prices.pct_change().dropna()
    cov = returns.cov() * 252
    mu = returns.mean() * 252

    def neg_sharpe(w):
        ret = np.dot(w, mu)
        vol = np.sqrt(np.dot(np.dot(w, cov), w.T))
        return -ret/vol

    w0 = np.repeat(1/len(symbols), len(symbols))
    bounds = [(0, 0.3) for _ in symbols]
    cons = {"type": "eq", "fun": lambda w: np.sum(w)-1}
    out = minimize(neg_sharpe, w0, bounds=bounds, constraints=[cons])
    return dict(zip(symbols, out.x.round(4)))

结果通过 MCP Action 回传给大模型,再生成自然语言解释。

5.2 LangChain MCP Adapter 联动

使用 langchain_mcp_adapters 将 Dify Prompt‑flow 转成 LangChain Chain,在同一脚本里复用记忆、RAG、工具调用。(hubwiz.com[26], CSDN Blog[27])

5.3 多模态与 RAG 加强

  • 语音:公众号支持用户语音提问;Dify 接入 OpenAI Whisper 自动转写。
  • PDF、图片解析:MCP Action 调用 mini‑ocr 服务,向量化后写入 Dify Dataset。

六、运维与安全

风险点 方案
Prompt 注入 MCP 工具严格返回 JSON,限制大模型对系统命令的输出。(GitHub[28])
Token 泄露 环境变量+ KMS 加密;IEX Token 只在服务器端调用。(Analyzing Alpha[29])
请求速率 Nginx + Redis 限流;Dify 内置 QPS 监控面板。(GitHub[30])
法规合规 跟随微信官方"金融信息"类接口规范,提前报备。(CSDN Blog[31])

七、未来展望

  • 原生 Windows 生态:微软已将 MCP 引入 Windows AI Foundry,未来 Dify Agent 可直接调用本地文件、日历等系统能力。(Microsoft Learn[32])
  • 多 Agent 协同:路由 Agent 可分裂出"量化策略 Agent""基金对比 Agent",共同写入统一 Memory Pool。
  • 可解释性增强:在生成投资建议时同时输出模型使用的数据引用、风险模型参数,提升监管可追溯性。

结语

以上从 0 到 1 深度拆解了 "基于 Dify + MCP 的大模型理财助手" :既结合了 Dify 在 LLMOps 上的可视化与高并发优势,又借助 MCP 的协议化工具链实现安全、可组装的智能体流水线。通过对接金融数据 API、微信公众号等高频入口,一个真正能落地、能迭代、可监控的 AI 理财助手就此诞生。希望本文的流程图、 YAML 配置和完整 Python 代码能够助你快速实践,把生成式 AI 能力转换为面向 C 端的金融服务产品。

原文地址:

相关推荐
大模型开发18 分钟前
5分钟带你搞懂从0打造一个ChatGPT
chatgpt·程序员·llm
Captaincc2 小时前
𝐂𝐮𝐫𝐬𝐨𝐫 𝐌𝐂𝐏 攻击现象:一句话,就能让你的私有数据库裸奔
mcp
大模型教程2 小时前
一文速通提示词工程Prompt Engineering
程序员·llm·agent
AI大模型3 小时前
大模型炼丹术(八):手把手教你玩转 LLM 的指令微调
程序员·llm·agent
袁煦丞3 小时前
Photopea云端修图不求人!cpolar内网穿透实验室第641个成功挑战
前端·程序员·远程工作
聚客AI4 小时前
🛠️从架构到部署:企业级多Agent系统开发百科全书
人工智能·llm·agent
落樱弥城4 小时前
Function CAll和MCP
ai·llm
redreamSo6 小时前
AI Daily | AI日报:谷歌AlphaEvolve或开启无‘灵感’科学革命; Karpathy:强化学习神话被戳破!; 流匹配成ICML 2025超热门主题
程序员·aigc·资讯
lovep17 小时前
详解大模型的位置编码-positional encoding
llm·位置编码·基础模型·vlm·rope·mllm·sinusoidal编码