任务核心定位

聚焦 AI 学习场景(覆盖 Python 基础、LLM 原理、RAG 实战、Dify/n8n 工具使用等方向),基于 Dify + MCP 协议搭建「AI 学习智能 Agent」。该 Agent 能根据用户的学习阶段(新手/进阶)、目标(如掌握 Dify 实战/搭建 RAG 系统)、每日可投入时长,自动生成「知识点学习内容 + 可落地实战任务」,并通过 MCP 协议对接外部学习资源(如 GitHub 学习仓库、AI 官方文档、在线代码评测平台),实现“个性化学习计划生成→学习资源调取→实战任务设计→进度追踪”的闭环,解决 AI 学习“无规划、无方向、学完不会用”的痛点。

一、任务基础信息

  • 适用人群:AI 学习新手/进阶者、想要系统化学习 LLM/RAG/Dify 的开发者、教育类工具搭建者;
  • 前置条件

    1. 已部署 Dify(v1.10.0+ 版本,支持 MCP 协议,Docker/私有化部署均可);
    2. 开发环境:Python 3.8+(搭建 MCP Server)、Git(对接 GitHub 学习资源)、浏览器(Dify 操作);
    3. 学习资源准备:

      • 本地/在线 AI 学习知识库(如 Python 基础、RAG 原理、Dify 文档等 Markdown/PDF 资料);
      • 可选对接外部工具:GitHub API(调取学习仓库)、LeetCode API(Python 刷题)、Dify 官方文档 API;
    4. 工具支持:FastAPI(搭建 MCP Server)、uvicorn(运行 Server)、requests(接口调用);
  • 任务周期:2-3 天(按「MCP Server 搭建→Dify 配置→工作流编排→测试优化」推进);
  • 最终产出:可直接使用的 AI 学习 Agent,输入指令如“我是 AI 新手,每天 1.5 小时,目标 2 周掌握 Dify 实战,生成今日学习计划”,即可返回:

    • 当日学习内容(知识点+资源链接);
    • 当日实战任务(步骤清晰、可落地的小任务);
    • 学习验证方式(如代码运行、效果验收标准)。

二、核心原理:MCP 协议对接 AI 学习工具链

本次 Agent 核心通过 MCP 协议对接 3 类核心工具(由 MCP Server 封装),Dify 作为“大脑”编排流程:

graph LR
    A[用户输入] --> B[Dify 工作流]
    B --> C[LLM 节点:解析学习阶段/目标/时长]
    C --> D[Fetch MCP Tools:获取 3 类学习工具]
    D --> E[Call MCP Tool:调用工具生成内容]
    E --> F[内容整合节点:拼接学习+实战内容]
    F --> G[返回给用户]
    
    subgraph MCP Server 封装的工具
    E --> E1[学习资源查询工具:调取知识点资料]
    E --> E2[实战任务生成工具:匹配阶段设计任务]
    E --> E3[进度记录工具:记录每日完成情况]
    end
    
    E1 --> H[GitHub 学习仓库/本地知识库]
    E2 --> I[实战任务模板库]
    E3 --> J[本地 JSON/轻量数据库]
  • MCP Server 作用:封装“学习资源查询、实战任务生成、进度记录”3 类工具,提供标准化 MCP 协议接口;
  • Dify 工作流作用:解析用户需求→调用 MCP 工具→整合结果→输出个性化学习计划。

三、任务详细拆解(Step-by-Step 落地)

阶段 1:搭建 AI 学习专属 MCP Server(1 天)

核心目标:封装 3 类 AI 学习工具,提供 MCP 协议接口供 Dify 调用

具体操作:

  1. 创建 MCP Server 项目&安装依赖

    • 新建文件夹 ai-learning-mcp-server,执行以下命令安装依赖:

      pip install fastapi uvicorn requests pydantic python-dotenv
    • 新建 server.py(核心代码,含 3 类工具封装,可直接复制):

      from fastapi import FastAPI, HTTPException
      from pydantic import BaseModel
      import requests
      import json
      from datetime import datetime
      import os
      
      # 初始化 FastAPI 应用
      app = FastAPI(title="AI 学习 Agent MCP Server")
      
      # ===================== 配置项(可根据自己的学习资源修改) =====================
      # 1. 学习资源映射(按阶段/主题分类)
      LEARNING_RESOURCES = {
          "新手-Python基础": {
              "知识点": "Python 变量/数据类型/循环/函数/模块导入",
              "资源链接": "https://github.com/walter201230/Python.git",
              "文档": "https://docs.python.org/zh-cn/3/tutorial/index.html"
          },
          "新手-Dify部署": {
              "知识点": "Docker 基本命令、Dify 一键部署、知识库创建",
              "资源链接": "https://github.com/langgenius/dify.git",
              "文档": "https://docs.dify.ai/guides/getting-started/install-docker"
          },
          "进阶-RAG优化": {
              "知识点": "Embedding 模型选型、分片策略、混合检索、Rerank 重排序",
              "资源链接": "https://github.com/explodinggradients/ragas.git",
              "文档": "https://docs.dify.ai/guides/knowledge-base/optimize-retrieval"
          },
          "进阶-MCP协议": {
              "知识点": "MCP 协议原理、MCP Server 搭建、Dify MCP 插件配置",
              "资源链接": "https://github.com/langgenius/dify-docs.git",
              "文档": "https://docs.dify.ai/guides/plugins/mcp-plugin"
          }
      }
      
      # 2. 实战任务模板(按阶段/主题匹配)
      PRACTICE_TASKS = {
          "新手-Python基础": {
              "任务名称": "Python 基础语法实战",
              "任务描述": "编写一个 Python 脚本,实现:1. 定义函数计算两个数的和;2. 循环输出 1-10 的偶数;3. 导入 math 模块计算圆的面积(半径手动输入)",
              "验收标准": "脚本可运行,无语法错误,输出结果正确"
          },
          "新手-Dify部署": {
              "任务名称": "Dify 本地部署+基础知识库创建",
              "任务描述": "1. 用 Docker 一键部署 Dify;2. 创建名为「AI 学习笔记」的知识库;3. 上传 1 篇 Python 学习笔记(Markdown 格式);4. 测试 1 个简单问答(如“Python 函数定义规则”)",
              "验收标准": "Dify 服务正常启动,知识库问答准确率≥80%"
          },
          "进阶-RAG优化": {
              "任务名称": "Dify RAG 检索效果优化",
              "任务描述": "1. 基于已有的 Dify 知识库,修改分片参数(Chunk Size=500,Overlap=100);2. 启用混合检索+gte-rerank-v2 模型;3. 设计 5 条测试用例,验证召回率提升≥10%",
              "验收标准": "检索结果更精准,模糊查询能匹配到相关内容"
          },
          "进阶-MCP协议": {
              "任务名称": "MCP 对接天气 API 实战",
              "任务描述": "1. 搭建简易 MCP Server,封装天气查询工具;2. 在 Dify 中配置 MCP 插件;3. 编排工作流,实现“输入城市名→调用 MCP 工具→返回天气信息”",
              "验收标准": "工作流可正常运行,查询城市天气返回准确结果"
          }
      }
      
      # 3. 学习进度存储(本地 JSON 文件,简易版)
      PROGRESS_FILE = "learning_progress.json"
      if not os.path.exists(PROGRESS_FILE):
          with open(PROGRESS_FILE, "w", encoding="utf-8") as f:
              json.dump({}, f)
      
      # ===================== MCP 协议核心接口 =====================
      # 定义工具调用请求模型
      class ToolCallRequest(BaseModel):
          tool_name: str
          parameters: dict
      
      # 1. MCP 接口:获取工具列表(Dify 必须调用)
      @app.get("/mcp/tools")
      async def get_tools():
          return {
              "tools": [
                  {
                      "name": "get_learning_resource",
                      "description": "根据学习阶段和目标查询对应的学习资源(知识点+链接+文档)",
                      "parameters": [
                          {"name": "stage", "type": "string", "required": True, "description": "学习阶段:新手/进阶"},
                          {"name": "topic", "type": "string", "required": True, "description": "学习主题:Python基础/Dify部署/RAG优化/MCP协议"}
                      ]
                  },
                  {
                      "name": "generate_practice_task",
                      "description": "根据学习阶段和主题生成可落地的实战任务",
                      "parameters": [
                          {"name": "stage", "type": "string", "required": True, "description": "学习阶段:新手/进阶"},
                          {"name": "topic", "type": "string", "required": True, "description": "学习主题:Python基础/Dify部署/RAG优化/MCP协议"}
                      ]
                  },
                  {
                      "name": "record_learning_progress",
                      "description": "记录每日学习进度(完成/未完成)",
                      "parameters": [
                          {"name": "date", "type": "string", "required": True, "description": "学习日期,格式:YYYY-MM-DD"},
                          {"name": "stage", "type": "string", "required": True, "description": "学习阶段"},
                          {"name": "topic", "type": "string", "required": True, "description": "学习主题"},
                          {"name": "status", "type": "string", "required": True, "description": "进度状态:完成/未完成"}
                      ]
                  }
              ]
          }
      
      # 2. MCP 接口:调用工具(核心逻辑)
      @app.post("/mcp/call")
      async def call_tool(request: ToolCallRequest):
          tool_name = request.tool_name
          params = request.parameters
      
          # 工具1:查询学习资源
          if tool_name == "get_learning_resource":
              key = f"{params['stage']}-{params['topic']}"
              if key not in LEARNING_RESOURCES:
                  return {"success": False, "error": f"无匹配的学习资源:{key}"}
              return {"success": True, "result": LEARNING_RESOURCES[key]}
      
          # 工具2:生成实战任务
          elif tool_name == "generate_practice_task":
              key = f"{params['stage']}-{params['topic']}"
              if key not in PRACTICE_TASKS:
                  return {"success": False, "error": f"无匹配的实战任务:{key}"}
              return {"success": True, "result": PRACTICE_TASKS[key]}
      
          # 工具3:记录学习进度
          elif tool_name == "record_learning_progress":
              try:
                  with open(PROGRESS_FILE, "r", encoding="utf-8") as f:
                      progress = json.load(f)
                  # 存储格式:{日期: {阶段-主题: 状态}}
                  if params["date"] not in progress:
                      progress[params["date"]] = {}
                  progress[params["date"]][f"{params['stage']}-{params['topic']}"] = params["status"]
                  with open(PROGRESS_FILE, "w", encoding="utf-8") as f:
                      json.dump(progress, f, ensure_ascii=False, indent=2)
                  return {"success": True, "result": "学习进度记录成功"}
              except Exception as e:
                  return {"success": False, "error": f"记录失败:{str(e)}"}
      
          # 未知工具
          else:
              raise HTTPException(status_code=404, detail=f"工具 {tool_name} 不存在")
      
      # 启动 MCP Server
      if __name__ == "__main__":
          import uvicorn
          uvicorn.run(app, host="0.0.0.0", port=8001)
  2. 启动并测试 MCP Server

    • 运行 Server:在项目文件夹执行 python server.py
    • 测试工具列表接口:浏览器访问 http://localhost:8001/mcp/tools,能看到 3 个工具列表即启动成功;
    • 测试工具调用(Postman/浏览器):发送 POST 请求到 http://localhost:8001/mcp/call,请求体示例(查询新手-Dify部署的学习资源):

      {
        "tool_name": "get_learning_resource",
        "parameters": {"stage": "新手", "topic": "Dify部署"}
      }
    • 若返回对应的学习资源信息,说明工具调用正常。

阶段 2:Dify 配置 MCP 插件与工具(0.5 天)

核心目标:让 Dify 识别 MCP Server 中的 3 类学习工具,实现工具调用

具体操作:

  1. 安装并配置 MCP 插件

    • 登录 Dify 后台 → 插件市场 → 搜索「MCP SSE 插件」→ 安装;
    • 配置插件参数:

      • MCP Server URL:http://你的服务器IP:8001(确保 Dify 能访问该地址,本地部署填 http://localhost:8001);
      • 授权方式:选择「无授权」(简易场景);
      • 点击「测试连接」,显示「连接成功」即完成配置。
  2. 验证 MCP 工具识别

    • 进入 Dify 「工作室」→ 创建新应用,命名为「AI 学习智能 Agent」,选择「工作流」类型;
    • 在工作流编辑器中,添加「Fetch MCP Tools」节点:

      • 插件选择:已安装的 MCP 插件;
      • 运行该节点,输出结果中能看到 get_learning_resource/generate_practice_task/record_learning_progress 3 个工具,说明识别成功。

阶段 3:编排 AI 学习 Agent 工作流(核心环节,1 天)

核心目标:实现“用户输入→解析需求→调用 MCP 工具→整合学习+实战内容→输出计划”的完整流程

工作流节点配置(按顺序添加):

用户输入 → LLM 节点(解析需求)→ 条件分支 → Call MCP Tool(资源查询)→ Call MCP Tool(实战生成)→ 内容整合 → 输出
                                                                 → 进度记录(可选)→ 输出
  1. 节点 1:用户输入(默认节点)

    • 接收用户自然语言输入,示例:

      • 新手:“我是 AI 新手,每天 1 小时,今天想学习 Dify 部署,生成学习计划和实战任务”;
      • 进阶:“我是进阶学习者,今天想优化 RAG 检索效果,生成对应的学习内容和实战任务”。
  2. 节点 2:LLM 节点(解析学习需求,关键!)

    • 模型选择:GPT-3.5 Turbo/DeepSeek-R1(意图识别准确率高);
    • Prompt 设计(严格按格式解析参数,可直接复制):

      你是 AI 学习助手,需解析用户的学习需求,输出以下 JSON 格式的参数(无额外内容):
      {
        "stage": "学习阶段(仅填:新手/进阶)",
        "topic": "学习主题(仅填:Python基础/Dify部署/RAG优化/MCP协议)",
        "duration": "每日学习时长(如1小时/2小时)",
        "date": "今日日期(格式:YYYY-MM-DD)"
      }
      规则:
      1. 必须从用户输入中提取准确的 stage 和 topic,无法识别时 stage 填“新手”,topic 填“Python基础”;
      2. duration 如实提取,无则填“1小时”;
      3. date 填当前系统日期(YYYY-MM-DD)。
      示例:
      用户输入:我是 AI 新手,每天 1 小时,今天想学习 Dify 部署 → 输出:
      {"stage":"新手","topic":"Dify部署","duration":"1小时","date":"2026-01-12"}
    • 输出格式:选择「JSON」,确保后续节点能解析参数。
  3. 节点 3:Call MCP Tool(调用学习资源查询工具)

    • 插件选择:已配置的 MCP 插件;
    • 工具名称:get_learning_resource
    • 工具参数:

      • stage:{{$node["LLM 节点"].json["stage"]}}(引用 LLM 节点解析的阶段);
      • topic:{{$node["LLM 节点"].json["topic"]}}(引用学习主题)。
  4. 节点 4:Call MCP Tool(调用实战任务生成工具)

    • 插件选择:已配置的 MCP 插件;
    • 工具名称:generate_practice_task
    • 工具参数:

      • stage:{{$node["LLM 节点"].json["stage"]}}
      • topic:{{$node["LLM 节点"].json["topic"]}}
  5. 节点 5:内容整合(编辑字段节点)

    • 作用:将学习资源、实战任务、时长整合为易读的每日学习计划,示例配置:

      【今日 AI 学习计划】
      学习阶段:{{$node["LLM 节点"].json["stage"]}}
      学习主题:{{$node["LLM 节点"].json["topic"]}}
      每日时长:{{$node["LLM 节点"].json["duration"]}}
      
      === 一、学习内容 ===
      核心知识点:{{$node["Call MCP Tool(资源查询)"].json["result"]["知识点"]}}
      学习资源:{{$node["Call MCP Tool(资源查询)"].json["result"]["资源链接"]}}
      官方文档:{{$node["Call MCP Tool(资源查询)"].json["result"]["文档"]}}
      
      === 二、实战任务 ===
      任务名称:{{$node["Call MCP Tool(实战生成)"].json["result"]["任务名称"]}}
      任务描述:{{$node["Call MCP Tool(实战生成)"].json["result"]["任务描述"]}}
      验收标准:{{$node["Call MCP Tool(实战生成)"].json["result"]["验收标准"]}}
  6. 节点 6:进度记录(可选,Call MCP Tool)

    • 工具名称:record_learning_progress
    • 工具参数:

      • date:{{$node["LLM 节点"].json["date"]}}
      • stage:{{$node["LLM 节点"].json["stage"]}}
      • topic:{{$node["LLM 节点"].json["topic"]}}
      • status:未完成(用户完成后可手动修改为“完成”)。
  7. 节点 7:输出节点

    • 引用「内容整合」节点的输出,将格式化的学习计划返回给用户。

阶段 4:测试与优化(0.5 天)

核心目标:验证 Agent 生成的学习计划精准、实战任务可落地

具体操作:

  1. 测试用例设计&验证

    用户输入预期输出验证要点
    “我是 AI 新手,每天 1 小时,今天想学习 Dify 部署”新手-Dify部署的学习资源+实战任务,格式清晰知识点准确、实战任务可落地、资源链接有效
    “我是进阶学习者,今天想优化 RAG 检索效果”进阶-RAG优化的学习资源+实战任务RAG 优化知识点完整、实战任务有量化验收标准
    “随便推荐今天的 AI 学习内容”默认新手-Python基础的学习计划兜底逻辑生效,无报错
  2. 优化方向

    • 若 LLM 解析参数错误:在 Prompt 中添加更多示例(few-shot),或降低温度参数(temperature=0.1);
    • 若学习资源/实战任务不足:补充 LEARNING_RESOURCESPRACTICE_TASKS 字典(如新增“进阶-n8n 工作流”主题);
    • 若格式混乱:优化「内容整合」节点的模板,增加换行/分段。

四、企业级/个性化扩展建议

  1. 对接更多学习工具

    • 在 MCP Server 中新增工具:对接 LeetCode API(Python 刷题)、AI 教程网站(如 HuggingFace Docs)、Dify 社区案例库;
    • 新增“学习效果验证”工具:调用在线代码评测平台,自动校验实战任务的代码正确性。
  2. 个性化适配

    • 增加「学习目标」参数(如“找工作/兴趣学习/企业落地”),生成不同侧重点的学习计划;
    • 对接用户学习进度,生成“昨日未完成→今日优先学”的联动计划。
  3. 多端集成

    • 通过 Dify 的「集成」功能,将 Agent 接入飞书/企业微信/钉钉,每日自动推送学习计划;
    • 增加“进度打卡”功能,用户完成实战任务后可上传截图,Agent 自动标记“完成”。

五、总结

关键点回顾

  1. 本次 AI 学习 Agent 核心通过 MCP 协议封装了「学习资源查询、实战任务生成、进度记录」3 类核心工具,实现了学习计划的自动化生成;
  2. Dify 工作流的核心是「LLM 解析用户需求→调用 MCP 工具→整合内容」,其中 LLM Prompt 的精准解析是关键;
  3. 实战任务设计遵循“可落地、可验证”原则,每个任务都有明确的验收标准,避免“学完不会用”。

核心价值

这个 Agent 不仅解决了 AI 学习“无规划”的问题,还通过 MCP 协议打通了“学习资源→实战任务→进度追踪”的全链路,新手可快速上手系统化学习,进阶者可针对性突破难点。你可根据自己的学习目标(如新增“大模型微调”“Agent 开发”等主题),补充 MCP Server 中的学习资源和实战任务模板,适配个性化学习需求。


AIAgent研究
7.2k 声望12.8k 粉丝

一群有AI的人 研究AI-Agent的开发,做优秀的AI应用;