构建一个能说会做的智能体
| 课程 | 软件工程 |
|---|---|
| 这个作业要求在哪里 | 作业要求 |
| 这个作业的目标 | 本项目目标是实现一个面向学生群体的日程待办智能助理,是具备“能说会做”特征的AI智能体。 |
项目名:MCP 学生日程&待办智能助理
小组成员:3124004262 张高朗
GitHub 仓库地址:https://github.com/3214153741-sudo/mcp-student-todo
一、需求描述
本项目目标是实现一个面向学生群体的日程待办智能助理,是具备“能说会做”特征的AI智能体。
- 能说: 支持自然语言对话交互,用户使用日常口语输入任务,不需要严格固定格式;
- 会做: 智能体解析用户输入,调用 MCP 工具服务,自动创建、管理待办日程,并在前端页面可视化展示任务清单。
使用场景:学生输入课程、作业、考试、社团任务等,智能体自动整理日程,生成结构化待办,方便规划学习安排。
技术选型:Python + Flask,采用 Model Context Protocol(MCP) 框架思想,将大模型对话层与工具执行服务解耦,符合作业技术要求。
项目整体架构图:用户前端 → Flask客户端 → MCP Server(日程工具服务)
二、业务流描述
整体业务流程分为4步:
- 用户在网页前端输入自然语言指令,例如:“明天晚上19:00完成高数作业”;
- Flask 前端客户端接收文本,向独立的 MCP Server 发送调用请求;
- MCP 服务作为工具层,解析文本、创建待办记录,存储任务数据;
- 结果回传给前端页面,页面刷新聊天记录 + 右侧待办清单,展示全部日程。
架构特点: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 网页开发有了入门的认识。

浙公网安备 33010602011771号