《AI大模型趣味实战》智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用
智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用
引言
随着人工智能技术的飞速发展,智能Agent与模型上下文协议(MCP)的应用场景越来越广泛。本报告将详细介绍如何基于Python Flask框架构建一个智能应用,该应用能够读取DOC文件并在前端实时显示润色改写过程。本文将深入探讨如何整合Flask、win32com、MCP协议以及智能Agent技术,为读者提供一个完整的实现方案。
系统架构设计
整体架构
我们的系统由三个主要部分组成:
- 前端界面:提供文件上传功能,并实时显示润色改写过程
- Flask后端:处理文件上传,使用win32com读取DOC文件内容,通过MCP协议与智能Agent通信
- 智能Agent:基于MCP协议实现,负责文本的润色改写工作
组件分工
- 前端:负责与用户的交互,展示上传进度和润色结果
- Flask后端:作为中间层,处理文件上传,协调各组件工作
- 智能Agent:实现文本处理的核心逻辑,通过MCP协议与后端通信
通信机制
- 前端与后端:使用WebSocket技术实现实时通信
- 后端与智能Agent:使用MCP协议进行通信
项目文档结构
以下是项目的标准文档结构:
project_name/
├── README.md
├── requirements.txt
├── app/
│ ├── __init__.py
│ ├── routes.py
│ ├── doc_processor.py
│ ├── mcp_agent.py
│ ├── socketio_handler.py
│ ├── templates/
│ │ ├── index.html
│ │ └── result.html
│ └── static/
│ ├── style.css
│ └── script.js
└── tests/├── test_doc_processor.py└── test_mcp_agent.py
文件功能说明
项目根目录
- README.md:项目概述、功能介绍、安装指南、使用说明和联系方式
- requirements.txt:列出项目所需的所有Python依赖包及其版本号,便于他人快速安装环境
Flask应用主目录 (app/
)
- init.py:初始化Flask应用,配置相关设置(如调试模式、密钥等),并注册蓝图
- routes.py:定义应用的路由规则和处理函数,包括:
- 主页面路由(显示上传表单)
- 文件上传处理路由(接收上传的DOC文件)
- 实时显示处理结果的WebSocket路由
- doc_processor.py:使用win32com库读取DOC文件内容,提供文本提取和保存的功能
- mcp_agent.py:实现MCP协议的智能Agent,负责与大模型通信,执行文本润色任务
- socketio_handler.py:处理WebSocket通信,实现实时显示润色过程
- templates/
- index.html:主页面,包含文件上传表单和上传按钮
- result.html:显示润色结果的页面,包含实时更新的文本区域
- static/
- style.css:定义页面的样式,包括布局、颜色、字体等
- script.js:前端JavaScript代码,处理文件上传、与后端的通信以及实时显示润色过程
测试文件目录 (tests/
)
- test_doc_processor.py:测试
doc_processor.py
模块的功能,包括文件读取、文本提取等 - test_mcp_agent.py:测试
mcp_agent.py
模块的功能,包括MCP协议的通信、智能Agent的响应等
前端界面设计
前端界面需要实现以下功能:
- 文件上传区域
- 上传进度显示
- 润色过程实时显示
- 最终结果展示
<!DOCTYPE html>
<html>
<head><title>DOC文件润色</title><script src="https://cdn.jsdelivr.net/npm/socket.io-client@4.7.2/dist/socket.io.min.js"></script><script>const socket = io();// 文件上传处理document.getElementById('uploadBtn').addEventListener('click', function() {const fileInput = document.getElementById('docFile');const file = fileInput.files[0];if (file) {const formData = new FormData();formData.append('docFile', file);fetch('/upload', {method: 'POST',body: formData}).then(response => {// 处理响应});}});// 监听后端消息socket.on('progress', function(data) {document.getElementById('progress').textContent = `处理进度: ${data.percent}%`;document.getElementById('steps').innerHTML = data.steps.join('<br>');});socket.on('result', function(data) {document.getElementById('result').textContent = data.text;});</script>
</head>
<body><h1>DOC文件润色</h1><input type="file" id="docFile" accept=".doc"><button id="uploadBtn">上传并润色</button><div id="progress">处理进度: 0%</div><div id="steps">处理步骤:</div><div id="result"></div>
</body>
</html>
Flask后端实现
环境配置
首先需要安装必要的Python库:
pip install flask flask-socketio win32com-client
文件上传处理
from flask import Flask, request, send_from_directory
from flask_socketio import SocketIO
from win32com.client import Dispatch
import time
import json
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, cors_allowed_origins="*")
# 存储上传的文件
UPLOAD_FOLDER = 'uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/upload', methods=['POST'])
def upload_file():if 'docFile' not in request.files:return jsonify({'error': 'No file part'})file = request.files['docFile']if file.filename == '':return jsonify({'error': 'No selected file'})if file:filename = secure_filename(file.filename)file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)file.save(file_path)# 异步处理文件process_file.delay(file_path, filename)return jsonify({'success': True, 'filename': filename})return jsonify({'error': 'Unknown error'})
@socketio.on('connect')
def handle_connect():print('Client connected')
@socketio.on('disconnect')
def handle_disconnect():print('Client disconnected')
if __name__ == '__main__':socketio.run(app)
使用win32com读取DOC文件
import win32com.client as win32
import time
from flask import current_app
from flask_socketio import emit
def read_doc_file(file_path):word = win32.Dispatch('Word.Application')doc = word.Documents.Open(file_path)# 读取文本内容text = doc.Content.Text# 关闭文档和Word应用程序doc.Close()word.Quit()return text
def process_file(file_path, filename):# 模拟处理进度steps = []# 第一步:读取文件steps.append("正在读取DOC文件...")emit('progress', {'percent': 20, 'steps': steps}, room=request.sid)time.sleep(1)try:content = read_doc_file(file_path)# 第二步:通过MCP协议发送给智能Agent处理steps.append("正在通过MCP协议发送文本给智能Agent...")emit('progress', {'percent': 40, 'steps': steps}, room=request.sid)time.sleep(1)# 模拟MCP协议调用processed_text = mcp_agent.process_text(content)# 第三步:接收处理结果steps.append("正在接收处理结果...")emit('progress', {'percent': 80, 'steps': steps}, room=request.sid)time.sleep(1)# 发送最终结果emit('result', {'text': processed_text}, room=request.sid)# 清理临时文件os.remove(file_path)return jsonify({'success': True})except Exception as e:return jsonify({'error': str(e)})
MCP协议服务实现
MCP协议概述
模型上下文协议(MCP)是一个开放协议,标准化了应用程序如何为大型语言模型(LLMs)提供上下文。可以将MCP想象成AI应用的"USB-C接口",它为AI应用提供了连接万物的接口[80]。
MCP协议的主要目的是解决当前AI模型因数据孤岛限制而无法充分发挥潜力的难题,使AI应用能够安全地访问和操作本地及远程数据[80]。
MCP协议实现
import json
import requests
class MCPClient:def __init__(self, server_url):self.server_url = server_urldef call(self, tool_name, arguments):payload = {"name": tool_name,"arguments": arguments}response = requests.post(f"{self.server_url}/mcp/call",headers={"Content-Type": "application/json","Accept": "application/json"},data=json.dumps(payload))if response.status_code == 200:return json.loads(response.text)else:raise Exception(f"API call failed with status code {response.status_code}")
定义服务接口和Schema
from pydantic import BaseModel, Field
class TextProcessingInput(BaseModel):text: str = Field(..., description="需要处理的文本内容")style: str = Field(..., description="需要的文本风格,例如正式、活泼等")
class TextProcessingOutput(BaseModel):text: str = Field(..., description="处理后的文本内容")changes: list = Field(..., description="文本修改记录")
智能Agent实现
AI模型选择与集成
对于文本润色任务,我们可以选择适合自然语言处理的模型,如GPT-3.5或LLama-2等。这些模型具有强大的文本理解和生成能力,能够完成文本润色、改写等任务。
文本润色改写算法
import time
class TextProcessor:def __init__(self, mcp_client):self.mcp_client = mcp_clientdef process_text(self, text):# 调用MCP服务处理文本result = self.mcp_client.call("text_processing.process",{"text": text,"style": "formal" # 示例:正式风格})return result["text"]
与MCP协议的集成
class TextProcessingAgent:def __init__(self):passdef process(self, request):# 处理文本润色请求text = request["arguments"]["text"]style = request["arguments"].get("style", "formal")# 进行文本处理processed_text = self._process_text(text, style)return {"name": "text_processing.process","arguments": {"text": processed_text}}def _process_text(self, text, style):# 实现具体的文本处理逻辑# 这里只是一个示例,实际可以根据需要实现更复杂的逻辑if style == "formal":# 正式风格处理逻辑processed_text = f"正式风格的润色文本:{text}"else:# 其他风格处理逻辑processed_text = f"其他风格的润色文本:{text}"return processed_text
系统集成与测试
系统集成方案
- 前端与后端集成:使用WebSocket技术实现前后端实时通信
- 后端与MCP服务集成:通过HTTP请求实现通信
- MCP服务与智能Agent集成:通过MCP协议实现通信
测试用例设计
- 基本功能测试:上传DOC文件,检查是否能正确显示处理进度和结果
- 错误处理测试:测试文件格式错误、文件大小超出限制等情况
- 性能测试:测试不同大小的DOC文件处理时间
性能测试与优化
- 异步处理:使用Flask的异步功能处理文件上传和文本处理
- 缓存机制:对于频繁使用的处理结果,可以考虑添加缓存
- 资源管理:合理管理Word应用程序的打开和关闭,避免资源泄漏
总结与展望
项目总结
本项目实现了基于Python Flask框架的DOC文件阅读和实时显示润色改写过程的应用。通过整合win32com、MCP协议和智能Agent技术,我们成功地实现了:
- 使用win32com库读取DOC文件内容
- 通过MCP协议实现与智能Agent的通信
- 使用Flask-SocketIO实现实时显示
- 提供用户友好的前端界面
可能的改进方向
- 支持更多文件格式:除了DOC文件,还可以支持DOCX、PDF等其他格式
- 增强智能Agent能力:集成更强大的AI模型,提供更智能的文本处理
- 添加用户认证:增加用户认证功能,保护用户数据安全
- 优化性能:优化文本处理算法,提高处理速度和质量
应用前景展望
随着人工智能技术的不断发展,基于智能Agent和MCP协议的应用将有更广泛的应用场景:
- 文档处理:自动摘要、翻译、风格转换等
- 内容创作:辅助写作、创意生成等
- 数据分析:从文档中提取关键信息、生成报告等
- 教育应用:自动批改作业、提供学习建议等
参考资料
[80] 模型上下文协议(MCP) - Anthropic API. https://docs.anthropic.com/zh-CN/docs/agents-and-tools/mcp.
相关文章:

《AI大模型趣味实战》智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用
智能Agent和MCP协议的应用实例:搭建一个能阅读DOC文件并实时显示润色改写过程的Python Flask应用 引言 随着人工智能技术的飞速发展,智能Agent与模型上下文协议(MCP)的应用场景越来越广泛。本报告将详细介绍如何基于Python Flask框架构建一个智能应用&…...

uniapp开发03-轮播图组件swiper的简单使用案例
uniapp开发03-轮播图组件swiper的简单使用案例!这个仅仅是官方提供的一个轮播图组件啊。实际上我们项目开发的时候,会应用到其他第三方公司的轮播图组件资源!效果更强大。兼容性更强。 废话不多说,我们直接上代码。分析代码。 &l…...
DAM-3B,英伟达推出的多模态大语言模型
DAM-3B是什么 DAM-3B(Describe Anything 3B)是英伟达推出的一款多模态大语言模型,专门用于为图像和视频中的特定区域生成详细描述。用户可以通过点、边界框、涂鸦或掩码等方式来标识目标区域,从而得到精准且符合上下文的文本描述…...
【虚幻C++笔记】碰撞检测
目录 碰撞检测参数详情示例用法 碰撞检测 显示名称中文名称CSphere Trace By Channel按通道进行球体追踪UKismetSystemLibrary::SphereTraceSingleSphere Trace By Profile按描述文件进行球体追踪UKismetSystemLibrary::SphereTraceSingleByProfileSphere Trace For Objects针…...
C++学习:六个月从基础到就业——STL:分配器与设计原理
C学习:六个月从基础到就业——STL:分配器与设计原理 本文是我C学习之旅系列的第三十篇技术文章,也是第二阶段"C进阶特性"的第九篇,主要介绍C STL中的分配器设计原理与实现。查看完整系列目录了解更多内容。 引言 在之前…...

【Android】四大组件之Service
目录 一、什么是Service 二、启停 Service 三、绑定 Service 四、前台服务 五、远程服务扩展 六、服务保活 七、服务启动方法混用 你可以把Service想象成一个“后台默默打工的工人”。它没有UI界面,默默地在后台干活,比如播放音乐、下载文件、处理…...

TRO再添新案 TME再拿下一热门IP,涉及Paddington多个商标
4月2日和4月8日,TME律所代理Paddington & Company Ltd.对热门IP Paddington Bear帕丁顿熊的多类商标发起维权,覆盖文具、家居用品、毛绒玩具、纺织用品、游戏、电影、咖啡、填充玩具等领域。跨境卖家需立即排查店铺内的相关产品! 案件基…...
spring-session-data-redis使用
spring-session-data-redis是spring session项目中的一个子模块,,他允许你使用Redis来存储http session,,从而支持多个应用实例之间共享session,,,即分布式session 原理: EnableRed…...
图论---LCA(倍增法)
预处理 O( n logn ),查询O( log n ) #include<bits/stdc.h> using namespace std; typedef pair<int,int> pii; const int N40010,M2*N;//是无向边,边需要见两边int n,m; vector<int> g[N]; //2的幂次范围 0~15 int depth[N],fa[N][1…...
WPF实现类似Microsoft Visual Studio2022界面效果及动态生成界面技术
WPF实现类似VS2022界面效果及动态生成界面技术 一、实现类似VS2022界面效果 1. 主窗口布局与主题 <!-- MainWindow.xaml --> <Window x:Class"VsStyleApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x…...
【安全扫描器原理】网络扫描算法
【安全扫描器原理】网络扫描算法 1.非顺序扫描2.高速扫描 & 分布式扫描3.服务扫描 & 指纹扫描 1.非顺序扫描 参考已有的扫描器,会发现几乎所有的扫描器都无一例外地使用增序扫描,即对所扫描的端口自小到大依次扫描,殊不知࿰…...

WPF之项目创建
文章目录 引言先决条件创建 WPF 项目步骤理解项目结构XAML 与 C# 代码隐藏第一个 "Hello, WPF!" 示例构建和运行应用程序总结相关学习资源 引言 Windows Presentation Foundation (WPF) 是 Microsoft 用于构建具有丰富用户界面的 Windows 桌面应用程序的现代框架。它…...
Unity中数据储存
在Unity项目开发中,会有很多数据,有需要保存到本地的数据,也有直接保存在缓存中的临时数据,一般为了方便整个项目框架中各个地方能调用需要的数据,因此都会实现一个数据工具或者叫数据管理类,用来管理项目中所有的数据。 首先保存在缓存中的数据,比如用户信息,我们只需…...
第十一天 主菜单/设置界面 过场动画(Timeline) 成就系统(Steam/本地) 多语言支持
前言 对于刚接触Unity的新手开发者来说,构建完整的游戏系统往往充满挑战。本文将手把手教你实现游戏开发中最常见的四大核心系统:主菜单界面、过场动画、成就系统和多语言支持。每个模块都将结合完整代码示例,使用Unity 2022 LTS版本进行演示…...

AI数字人:未来职业的重塑(9/10)
摘要:AI 数字人凭借计算机视觉、自然语言处理与深度学习技术,从虚拟形象进化为智能交互个体,广泛渗透金融、教育、电商等多领域,重构职业生态。其通过降本提效、场景拓展与体验升级机制,替代重复岗位工作,催…...
Android插拔U盘导致黑屏问题排查
问题现象: 车机大屏偶先插拔带音乐的U盘,导致车机系统短暂黑屏的情况。 日志中可以看到vold进程unmount了两次分区,一次是U盘分区,一次是/storage/emulated/0分区: I vold : Start killProcesses: /mnt/media_rw/…...

深入解析Mlivus Cloud中的etcd配置:最佳实践与高级调优指南
作为大禹智库的向量数据库高级研究员,我在《向量数据库指南》一书中详细阐述了向量数据库的核心组件及其优化策略。今天,我将基于30余年的实战经验,深入剖析Mlivus Cloud中etcd这一关键依赖的配置细节与优化方法。对于希望深入掌握Mlivus Cloud的读者,我强烈建议参考《向量…...
分享一个可以批量巡检GET和POST接口的Shell脚本
一、场景痛点与需求分析 在分布式系统架构中,服务接口的可用性和稳定性直接影响业务连续性。当面临以下场景时,需批量巡检GET和POST接口: 上线验证:新版本发布后批量验证核心接口 故障恢复:异常数据修复后的批量重试…...

前端面试宝典---vue原理
vue的Observer简化版 class Observer {constructor(value) {if (!value || typeof value ! object) returnthis.walk(value) // 对对象的所有属性进行遍历并定义响应式}walk (obj) {Object.keys(obj).forEach(key > defineReactive(obj, key, obj[key]))} } // 定义核心方法…...

PyTorch卷积层填充(Padding)与步幅(Stride)详解及代码示例
本文通过具体代码示例讲解PyTorch中卷积操作的填充(Padding)和步幅(Stride)对输出形状的影响,帮助读者掌握卷积层的参数配置技巧。 一、填充与步幅基础 填充(Padding):在输入数据边缘…...
2025年Redis分片存储性能优化指南
一、分片规则与负载均衡 动态哈希分片 采用CRC16算法计算键哈希值,通过hash_slot CRC16(key) % 16384确定槽位分布,结合Redis Cluster自动管理槽位迁移。 总分片数按需动态调整,例如从16节点扩容至32节点时,触发槽位重分配以…...
【概念】什么是 JWT Token?
—什么是 JWT Token? JWT Token(JSON Web Token) 就是一张后端发给前端的小票,里面包含用户身份信息,用于做无状态认证(Stateless Authentication)。 每次前端访问后端接口,都拿着…...
部署大模型需要多少GPU显存?以DeepSeek R1部署为例
引言 部署大型语言模型(LLM)时究竟需要多少GPU显存?本文将进行一次简单测算。 如何计算 算法1 可以用一个简单的公式来计算显存占用(单位GB): 参数说明如下: 符号 含义 M 所需的 GPU 显存…...

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1
希望借助手写这个go的中间件项目,能够理解go语言的特性以及用go写中间件的优势之处,同时也是为了更好的使用和优化公司用到的trpc,并且作者之前也使用过grpc并有一定的兴趣,所以打算从0构建一个rpc系统,对于生产环境已…...
Fedora 43 计划移除所有 GNOME X11 相关软件包
Fedora 43 计划移除所有 GNOME X11 相关软件包,这是 Fedora 项目团队为全面拥抱 Wayland 所做的重要决策。以下是关于此计划的详细介绍: 提案内容:4 月 23 日,Neal Gompa 提交提案,建议从 Fedora 软件仓库中移除所有 G…...

django之账号管理功能
账号管理功能 目录 1.账号管理页面 2.新增账号 3.修改账号 4.账号重置密码 5.删除账号功能 6.所有代码展示集合 7.运行结果 这一片文章, 我们需要新增账号管理功能, 今天我们写到的代码, 基本上都是用到以前所过的知识, 不过也有需要注意的细节。 一、账号管理界面 …...
搭建spark-local模式
要搭建Spark的local模式,你可以按照以下步骤进行操作(以在Linux系统上安装为例,假设你已经安装了Java环境): 1. 下载Spark安装包:访问Spark官方网站(https://spark.apache.org/downloads.html&a…...

月之暗面开源 Kimi-Audio-7B-Instruct,同时支持语音识别和语音生成
我们向您介绍在音频理解、生成和对话方面表现出色的开源音频基础模型–Kimi-Audio。该资源库托管了 Kimi-Audio-7B-Instruct 的模型检查点。 Kimi-Audio 被设计为通用的音频基础模型,能够在单一的统一框架内处理各种音频处理任务。主要功能包括: 通用功…...

IDEA配置将Servlet真正布署到Tomcat
刚开始只能IDEA运行完Servlet web application 并保持IDEA运行才能通过浏览器访问到我的Servlet,跟想象中的不一样,不应该是IDEA运行完项目以后只要打开Tomcat就能访问吗?事实时运行完项目只要关掉IDEA就不能再访问到应用了,而且T…...
删除新安装IBM Guardium Data Protection 12.1的baltimorecybertrustroot证书
登录web console,会显示 baltimorecybertrustroot证书过期警告。 采用下面的命令删除过期证书就可消除警告。 collector02.cpd.com> delete certificate keystore Select an alias from the list below to delete the corresponding certificate. Alias List:…...