1. 项目概述
作为一名长期关注AI技术落地的开发者,我最近一直在探索如何让大模型真正"动起来"——不只是回答问题,而是能主动调用工具、操作数据、完成实际任务。Model Context Protocol(MCP)的出现完美解决了这个问题,它就像给AI装上了"手脚",让它们能够安全高效地与外部系统交互。
这个项目我将分享如何用MCP打造一个私人穿搭推荐系统。每天早上打开衣柜时的选择困难症,相信很多人都有同感。通过这个项目,你的AI助手将能直接访问你的衣柜数据库,根据当天的场合、天气和你的个人风格,给出专业的搭配建议。
2. 技术选型与架构设计
2.1 为什么选择MCP而非传统API
在传统AI应用开发中,我们通常需要:
- 为每个外部服务编写特定的API调用代码
- 处理复杂的鉴权和参数格式
- 解析各种可能的错误响应
MCP通过标准化接口解决了这些问题。它就像AI世界的USB-C接口,提供统一的连接方式。具体优势体现在:
- 开发效率:MCP工具描述包含完整的语义信息,AI能自动理解如何使用
- 安全性:内置的权限控制和审计机制
- 可观测性:所有交互都有完整的日志记录
2.2 系统架构设计
整个系统采用分层架构:
code复制[AI Agent层]
↓
[MCP适配层] → [LangChain集成]
↓
[业务服务层] → [MySQL数据库]
↓
[监控层] → [LangFuse]
关键技术组件:
- FastMCP:轻量级MCP服务器实现
- LangChain:AI应用框架
- Ollama/Qwen:本地和云端大模型
- LangFuse:可观测性平台
3. 核心实现步骤
3.1 数据准备与建模
首先需要建立衣柜数据库。我选择MySQL作为存储方案,因为它:
- 开源免费
- 成熟稳定
- 支持JSON等现代数据类型
建表语句特别注意了:
- 使用utf8mb4字符集支持emoji
- 为每件衣物添加详细的分类和颜色标签
- 设置自增主键便于管理
sql复制CREATE TABLE `clothing_items` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`category` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`color` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
3.2 MCP服务开发
使用FastMCP框架开发服务端:
python复制from fastmcp import FastMCP
import pymysql
app = FastMCP(name="ClothingService")
@app.tool()
def get_clothing_items(style: str = None):
"""根据风格筛选衣物"""
conn = pymysql.connect(host='localhost', user='root',
password='', database='wardrobe')
try:
with conn.cursor() as cursor:
sql = "SELECT * FROM clothing_items"
if style:
sql += f" WHERE style='{style}'"
cursor.execute(sql)
return cursor.fetchall()
finally:
conn.close()
关键点:
- 使用装饰器声明MCP工具
- 添加详细的文档字符串帮助AI理解功能
- 实现基本的错误处理
3.3 AI Agent集成
在LangChain中集成MCP客户端:
python复制from langchain.agents import AgentExecutor
from langchain_mcp_adapters import MCPToolkit
mcp_tools = MCPToolkit.from_mcp_url("http://localhost:8000").get_tools()
agent = AgentExecutor.from_agent_and_tools(
agent=your_agent,
tools=mcp_tools,
verbose=True
)
4. 效果优化与问题排查
4.1 解决AI幻觉问题
在实际测试中发现,AI有时会推荐不存在的衣物。我们通过以下方法解决:
- 后验证机制:将推荐结果与数据库二次比对
- 提示词优化:明确要求"只推荐数据库中存在的衣物"
- 数据增强:为每件衣物添加更多描述性标签
4.2 性能调优
当衣柜物品超过500件时,发现响应变慢。优化措施:
- 为常用查询字段添加索引
- 实现分页查询
- 增加缓存层
sql复制ALTER TABLE clothing_items ADD INDEX idx_category_color (category, color);
4.3 风格匹配算法
初期简单的关键词匹配效果不佳,改进为:
- 建立风格标签体系
- 使用嵌入模型计算相似度
- 结合用户反馈持续优化
5. 部署与监控
5.1 生产环境部署
使用Docker compose编排服务:
yaml复制version: '3'
services:
mcp-server:
image: fastmcp:latest
ports:
- "8000:8000"
volumes:
- ./config:/app/config
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: yourpassword
volumes:
- ./mysql_data:/var/lib/mysql
5.2 监控配置
集成LangFuse进行全链路监控:
python复制from langfuse import Langfuse
langfuse = Langfuse(
public_key="your-key",
secret_key="your-secret",
host="http://localhost:3000"
)
监控指标包括:
- 工具调用成功率
- 响应时间
- 用户满意度
6. 使用效果展示
经过优化后的系统能够:
- 3秒内完成搭配推荐
- 准确率提升至95%以上
- 支持10+种风格类型
典型推荐结果示例:
code复制今日商务休闲推荐:
- 上衣:浅蓝条纹衬衫
- 下装:炭黑西裤
- 外套:驼色针织开衫
- 鞋子:棕色乐福鞋
- 配饰:银色腕表
7. 扩展与展望
这个项目的核心价值在于展示了MCP如何桥接AI与真实世界。基于这个框架,还可以实现:
- 智能购物助手:自动补货缺色单品
- 穿搭日志:记录每日搭配并评分
- 社交分享:生成穿搭卡片分享到社交平台
在实际开发中,最大的收获是认识到:好的AI应用不是要替代人类决策,而是通过技术放大我们的审美和个性。这个项目让我每天节省15分钟选衣服时间,更重要的是,它让我尝试了很多自己可能不会选择的搭配,意外发现了新的风格。