构建一个能说会做的智能体

课程 软件工程
这个作业要求在哪里 作业要求
这个作业的目标 本项目目标是实现一个面向学生群体的日程待办智能助理,是具备“能说会做”特征的AI智能体。

项目名:MCP 学生日程&待办智能助理
小组成员:3124004262 张高朗
GitHub 仓库地址:https://github.com/3214153741-sudo/mcp-student-todo

一、需求描述

本项目目标是实现一个面向学生群体的日程待办智能助理,是具备“能说会做”特征的AI智能体。

  • 能说: 支持自然语言对话交互,用户使用日常口语输入任务,不需要严格固定格式;
  • 会做: 智能体解析用户输入,调用 MCP 工具服务,自动创建、管理待办日程,并在前端页面可视化展示任务清单。
    使用场景:学生输入课程、作业、考试、社团任务等,智能体自动整理日程,生成结构化待办,方便规划学习安排。
    技术选型:Python + Flask,采用 Model Context Protocol(MCP) 框架思想,将大模型对话层与工具执行服务解耦,符合作业技术要求。
    项目整体架构图:用户前端 → Flask客户端 → MCP Server(日程工具服务)

二、业务流描述

整体业务流程分为4步:

  1. 用户在网页前端输入自然语言指令,例如:“明天晚上19:00完成高数作业”;
  2. Flask 前端客户端接收文本,向独立的 MCP Server 发送调用请求;
  3. MCP 服务作为工具层,解析文本、创建待办记录,存储任务数据;
  4. 结果回传给前端页面,页面刷新聊天记录 + 右侧待办清单,展示全部日程。

架构特点:MCP 服务是独立的后端服务(单独端口8000),和交互前端(5000端口)分离。后续新增功能(天气查询、提醒等)只需要扩展MCP服务,不需要改动前端主体,解耦性强。

三、 核心实现思路

  • MCP Server:封装日程管理能力,对外提供标准化调用接口,作为可复用工具包;

① MCP服务核心代码片段(mcp_server.py,工具定义)

from flask import Flask, request, jsonify
from pydantic import BaseModel

app = Flask("mcp_server")
todo_list = []

# MCP工具入参模型
class AddTodoRequest(BaseModel):
    content: str
    time: str

# MCP提供的工具接口:新增待办
@app.route("/tool/add_todo", methods=["POST"])
def add_todo():
    data = request.get_json()
    req = AddTodoRequest(**data)
    new_todo = {"content": req.content, "time": req.time}
    todo_list.append(new_todo)
    return jsonify({"code":0, "msg":"添加成功", "data":new_todo})

# MCP提供的工具接口:查询全部待办
@app.route("/tool/get_todo", methods=["GET"])
def get_todo():
    return jsonify({"code":0, "data": todo_list})

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=8000, debug=True)
  • Flask 客户端:负责用户交互、页面渲染,作为调用 MCP 的客户端;

② Flask前端调用MCP的核心代码片段(app.py)

from flask import Flask, render_template, request, jsonify
import requests

app = Flask(__name__)
MCP_URL = "http://127.0.0.1:8000"

# 网页首页
@app.route("/")
def index():
    return render_template("index.html")

# 接收用户对话,解析后调用MCP工具
@app.route("/chat", methods=["POST"])
def chat():
    user_msg = request.form["msg"]
    # 此处调用豆包API,从user_msg里解析出任务内容、时间
    # 省略大模型API调用代码,解析得到task_content, task_time
    payload = {
        "content": task_content,
        "time": task_time
    }
    # 请求MCP后端服务,执行新增待办工具
    resp = requests.post(f"{MCP_URL}/tool/add_todo", json=payload)
    todo_data = resp.json()
    # 获取最新待办列表,传回前端页面渲染
    all_todo = requests.get(f"{MCP_URL}/tool/get_todo").json()
    return jsonify({"reply":f"已帮你创建日程:{task_time} {task_content}", "todo":all_todo["data"]})

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000, debug=True)
  • 对话能力:调用豆包 API 进行自然语言理解,识别任务内容、时间信息;

③ 前端网页关键片段(templates/index.html,展示区域)

<!-- 聊天输入框 -->
<div class="chat-input">
    <input type="text" id="userInput" placeholder="输入你的任务,例如:明天19点写高数作业">
    <button onclick="sendMsg()">发送</button>
</div>
<!-- 待办清单渲染区域 -->
<div class="todo-panel">
    <h3>我的待办日程</h3>
    <div id="todoList"></div>
</div>

<script>
function sendMsg(){
    let msg = document.getElementById("userInput").value;
    fetch("/chat",{
        method:"POST",
        body:new URLSearchParams({"msg":msg})
    }).then(res=>res.json()).then(ret=>{
        // 渲染AI回复
        // 渲染刷新待办列表
    })
}
</script>
  • 数据存储:简易内存持久化(当前版本),后续可扩展 SQLite/JSON 文件持久化。

四、环境复现步骤

# 1. 克隆代码
git clone https://github.com/3214153741-sudo/mcp-student-todo.git
cd mcp-student-todo

# 2. 激活虚拟环境
python -m venv venv
.\venv\Scripts\Activate.ps1

# 3. 安装依赖
pip install -r requirements.txt

# 4. 启动服务
# 终端1:启动MCP服务
python mcp_server.py
# 终端2:启动Flask前端
python app.py

启动完成后,浏览器访问:http://127.0.0.1:5000 进入交互界面。

使用示例(功能演示)

示例 1

用户输入:明天晚上19:00完成高数作业
智能体响应:识别任务名称、时间,新增一条待办,右侧清单自动新增「【明天 19:00】高数作业」。

示例 2

用户输入:周五下午三点开班会
智能体响应:自动创建班会日程,添加到待办列表,在页面持久展示。

五、项目分工

第一天:整体方案设计、MCP 服务开发(mcp_server.py)、架构调试
第二天:Flask 前端页面、交互逻辑、页面样式开发(app.py + index.html)
第三天:文档编写、GitHub 版本管理、测试与博客撰写、Demo 演示准备

六、心得体会

本次项目是我第一次接触并实践 MCP 相关思想,让我理解了 MCP 把工具能力和模型交互逻辑解耦的设计思路。之前我只写过简单的 Python 脚本,这次独立搭建了双后端服务,分别作为 MCP 工具服务和 Flask Web 前端服务,学习了前后端协同的开发模式。在搭建网页交互界面、调试服务之间接口调用的过程中,我了解了网页服务的启动、端口通信、数据传递的流程。从代码编写、调试排错,到使用 GitHub 进行版本管理、逐步提交开发进度,我完整走完了一个智能体原型的开发流程。这次实践让我直观理解了 “能说会做” 智能体的含义:通过自然语言对话接收用户指令,再调用后端工具去完成对应的任务,也让我对后端服务开发、Web 网页开发有了入门的认识。

posted @ 2026-10-24 21:22  张高朗  阅读(13)  评论(0)    收藏  举报