🤖 零基础学MCP:AI工具开发入门教程

作者 李金雨 --中文编程倡导者

前言:什么是MCP?

想象你是一个智能机器人的指挥官,MCP就是你和机器人之间的暗号系统

  • 你说人话:“帮我算数学题”
  • MCP翻译成机器指令:计算器(题目="1+2")
  • 机器人执行:返回3

MCP = 让AI听懂人话并调用工具的协议


第一章:最简单的MCP实现

1.1 基础框架(只需要30行代码)

import json

class 我的小助手:
    """一个超简单的AI助手"""
    
    def __init__(self):
        # 工具箱:存放所有工具的地方
        self.工具箱 = {}
    
    def 添加工具(self, 工具名, 工具函数):
        """把工具放进工具箱"""
        self.工具箱[工具名] = 工具函数
    
    def 处理请求(self, 用户说的话):
        """核心:解析用户的话,调用对应工具"""
        
        # 约定暗号格式:使用[工具名]执行 参数
        if "使用[" in 用户说的话 and "]执行" in 用户说的话:
            
            # 提取工具名
            开始 = 用户说的话.index("使用[") + 3
            结束 = 用户说的话.index("]执行")
            工具名 = 用户说的话[开始:结束]
            
            # 提取参数
            参数部分 = 用户说的话[结束+3:]
            
            # 执行工具
            if 工具名 in self.工具箱:
                结果 = self.工具箱[工具名](参数部分)
                return f"执行结果:{结果}"
            else:
                return f"没有找到【{工具名}】这个工具"
        
        return "请按格式说:使用[工具名]执行 参数"

# 创建我的第一个AI助手
小爱 = 我的小助手()

1.2 添加第一个工具

# 定义一个计算器工具
def 计算器(算式):
    """能算数学题的函数"""
    try:
        结果 = eval(算式)
        return f"{算式} = {结果}"
    except:
        return "算不出来,检查一下算式吧"

# 把计算器放进工具箱
小爱.添加工具("计算器", 计算器)

# 测试一下
print(小爱.处理请求("使用[计算器]执行 123 + 456"))
# 输出:执行结果:123 + 456 = 579

第二章:让AI自己决定用哪个工具

2.1 问题:用户不会暗号怎么办?

上面的例子要求用户必须说使用[计算器]执行,太不人性化了!

解决方案:让AI自动理解用户的话

class 智能MCP:
    """能理解自然语言的AI助手"""
    
    def __init__(self):
        self.工具箱 = {}
        self.工具说明 = {}
    
    def 添加工具(self, 工具名, 说明, 函数):
        """添加工具时附带说明"""
        self.工具箱[工具名] = 函数
        self.工具说明[工具名] = 说明
    
    def AI理解(self, 用户输入):
        """模拟AI理解用户意图(实际应该调用大模型)"""
        
        # 简单的关键词匹配(教学演示用)
        if "天气" in 用户输入:
            return {"工具": "查天气", "参数": 用户输入}
        elif "计算" in 用户输入 or "等于" in 用户输入:
            return {"工具": "计算器", "参数": 用户输入}
        elif "翻译" in 用户输入:
            return {"工具": "翻译", "参数": 用户输入}
        else:
            return {"工具": "聊天", "参数": 用户输入}
    
    def 处理请求(self, 用户输入):
        """智能处理用户请求"""
        
        # 第一步:AI理解用户想做什么
        意图 = self.AI理解(用户输入)
        
        # 第二步:调用对应的工具
        工具名 = 意图["工具"]
        参数 = 意图["参数"]
        
        if 工具名 in self.工具箱:
            结果 = self.工具箱[工具名](参数)
            return self.美化回答(结果)
        else:
            return f"我还不会{工具名}这个技能"
    
    def 美化回答(self, 结果):
        """把结果说得更友好"""
        return f"🤖 小助手:{结果}"

# 创建智能助手
小明 = 智能MCP()

# 添加各种工具
小明.添加工具("计算器", "做数学题", lambda x: f"答案是{eval(x.replace('计算', '').replace('等于', ''))}")
小明.添加工具("查天气", "查天气", lambda x: "今天晴天,25度")
小明.添加工具("翻译", "翻译文字", lambda x: "Hello (这是翻译结果)")

# 测试:说人话就能用
print(小明.处理请求("今天天气怎么样"))
# 输出:🤖 小助手:今天晴天,25度

print(小明.处理请求("帮我计算 100 加 200 等于多少"))
# 输出:🤖 小助手:答案是300

第三章:真正的AI决策(使用大模型)

3.1 核心:让AI输出结构化指令

class 真智能MCP:
    """使用真实AI模型进行决策"""
    
    def __init__(self, 调用AI的函数):
        self.工具箱 = {}
        self.调用AI = 调用AI函数  # 比如调用ChatGPT的接口
    
    def 处理请求(self, 用户输入):
        """核心流程:AI思考 → 输出JSON → 执行工具"""
        
        # 1. 告诉AI有哪些工具可用
        工具列表 = "\n".join([
            f"- {}: {说明}" 
            for, (说明, _) in self.工具箱.items()
        ])
        
        # 2. 让AI输出JSON格式的指令
        提示词 = f"""
你有这些工具:
{工具列表}

用户说:"{用户输入}"

请判断要用哪个工具,输出JSON:
{{"工具名": "xxx", "参数": "xxx"}}

如果不需要工具,输出:
{{"回答": "你的回答"}}
"""
        
        # 3. AI返回结构化输出(关键步骤!)
        AI输出 = self.调用AI(提示词)
        
        # 4. 解析JSON并执行
        try:
            指令 = json.loads(AI输出)
            
            if "工具名" in 指令:
                工具名 = 指令["工具名"]
                参数 = 指令["参数"]
                
                # 从工具箱取出工具并执行
                执行函数 = self.工具箱[工具名][1]
                结果 = 执行函数(参数)
                
                return f"🎯 使用了{工具名}工具\n📊 结果:{结果}"
            else:
                return f"🤖 {指令['回答']}"
                
        except:
            return "我有点混乱,能再说一遍吗?"

# 模拟AI接口(实际应该调用真实大模型)
def 模拟AI(提示):
    """模拟AI的智能决策"""
    if "天气" in 提示:
        return '{"工具名": "查天气", "参数": "北京"}'
    elif "计算" in 提示:
        return '{"工具名": "计算器", "参数": "1+2"}'
    else:
        return '{"回答": "你好,我能帮你做什么?"}'

# 创建真正的智能助手
真助手 = 真智能MCP(模拟AI)

# 添加工具
真助手.工具箱["查天气"] = ("查询任意城市天气", lambda x: f"{x}的天气:晴天")
真助手.工具箱["计算器"] = ("做数学计算", lambda x: f"{x} = {eval(x)}")

# 测试
print(真助手.处理请求("北京天气"))
# 输出:🎯 使用了查天气工具
#      📊 结果:北京的天气:晴天

第四章:实战项目——万能学习助手

让我们把学到的知识用起来,做一个能帮中学生学习的AI助手!

import json
import random

class 万能学习助手:
    """帮你学习各科知识的AI助手"""
    
    def __init__(self):
        # 注册所有学习工具
        self.工具 = {
            "数学工具": self.数学题,
            "英语工具": self.翻译单词,
            "物理工具": self.计算物理,
            "查资料工具": self.查百科,
            "做笔记工具": self.记笔记,
        }
        
        # 存储笔记
        self.笔记本 = []
    
    def AI决策(self, 问题):
        """AI判断该用哪个工具"""
        
        # 关键词匹配(简化版)
        if any(word in 问题 for word in ["数学", "计算", "等于", "方程"]):
            return "数学工具"
        elif any(word in 问题 for word in ["英语", "翻译", "单词"]):
            return "英语工具"
        elif any(word in 问题 for word in ["物理", "速度", "力", "能量"]):
            return "物理工具"
        elif any(word in 问题 for word in ["笔记", "记录"]):
            return "做笔记工具"
        else:
            return "查资料工具"
    
    def 数学题(self, 问题):
        """解数学题"""
        # 提取数字和运算符
        if "+" in 问题:
            nums = [int(n) for n in 问题.split("+")]
            return f"答案:{sum(nums)}"
        elif "平方" in 问题:
            return "平方就是自己乘自己,比如3²=9"
        else:
            return "让我想想...建议你把算式写清楚,比如:3+5"
    
    def 翻译单词(self, 问题):
        """中英文互译"""
        词库 = {
            "苹果": "apple",
            "电脑": "computer",
            "学习": "study",
            "hello": "你好",
            "world": "世界"
        }
        
        for 中文, 英文 in 词库.items():
            if 中文 in 问题:
                return f"翻译结果:{中文}{英文}"
            if 英文 in 问题:
                return f"翻译结果:{英文}{中文}"
        
        return f"暂时不知道{问题}的翻译,我会学习的!"
    
    def 计算物理(self, 问题):
        """物理计算"""
        if "速度" in 问题:
            return "速度公式:v = s / t (速度 = 路程 ÷ 时间)"
        elif "重力" in 问题:
            return "重力公式:G = m × g (g ≈ 9.8 N/kg)"
        else:
            return "物理很神奇!具体什么问题?"
    
    def 查百科(self, 问题):
        """查资料"""
        百科 = {
            "Python": "Python是一种编程语言,像给电脑写指令",
            "AI": "AI是人工智能,让机器像人一样思考",
            "MCP": "MCP是模型上下文协议,让AI调用工具"
        }
        
        for 关键词, 解释 in 百科.items():
            if 关键词 in 问题:
                return f"📚 {解释}"
        
        return f"关于「{问题}」,建议你上网搜索哦"
    
    def 记笔记(self, 问题):
        """记录学习笔记"""
        self.笔记本.append(问题)
        return f"✅ 已记录:{问题}\n📒 现在有{len(self.笔记本)}条笔记"
    
    def 运行(self):
        """启动助手"""
        print("="*50)
        print("🎓 万能学习助手启动啦!")
        print("💡 你可以问我:")
        print("   - 数学题:3+5等于多少")
        print("   - 英语:苹果的英文")
        print("   - 物理:速度公式")
        print("   - 笔记:记录我学会了MCP")
        print("="*50)
        
        while True:
            用户输入 = input("\n🧑‍🎓 学生:")
            
            if 用户输入 in ["退出", "拜拜", "88"]:
                print("🤖 加油学习!下次见~")
                break
            
            # AI决策并执行
            要用的工具 = self.AI决策(用户输入)
            结果 = self.工具[要用的工具](用户输入)
            
            print(f"🤖 {结果}")

# 启动助手
if __name__ == "__main__":
    助手 = 万能学习助手()
    助手.运行()

第五章:核心要点总结

📚 你学到的核心概念

# MCP的核心公式
MCP = 工具注册 + AI决策 + 结构化输出 + 工具执行

# 关键步骤:
1. 注册工具:把Python函数放进工具箱
2. AI决策:让AI理解用户意图,输出JSON
3. 解析JSON:你的代码读取AI的想法
4. 执行工具:调用对应的Python函数
5. 返回结果:把答案说给用户听

🎯 三个最重要的认知

  1. AI不会直接执行代码(太危险)
  2. AI只输出文本(JSON格式)
  3. 你的程序负责解析和执行(安全可控)

💡 作业挑战

试试自己做一个:

  1. 背单词助手:记录生词,随机测试
  2. 番茄钟助手:定时提醒学习休息
  3. 错题本助手:记录和分析错题

🚀 延伸学习

# 当你学会基础后,可以:
- 接入真实的AI模型(OpenAI、讯飞、百度)
- 添加网络工具(搜索、翻译API)
- 做成本地应用(使用tkinter做界面)
- 连接硬件(树莓派、micro:bit)

写在最后

MCP就像给了AI一双,让它能真正做事,不只是聊天。

你现在已经掌握了:

  • ✅ MCP的基本原理
  • ✅ 如何注册工具
  • ✅ 如何让AI决策
  • ✅ 如何解析和执行

动手试试吧!编程就像打游戏,看100遍攻略不如自己打一关!

有问题随时问,祝你编程愉快!🎉

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐