day11-functionCalling和MCP

今日内容

1 functionCalling和MCP

1.1 Agent智能体开发

# 1 Agent(智能体)开发 是当前人工智能领域最前沿、最具实用价值的方向之一。它让 AI 从“被动问答”升级为“主动思考 + 工具调用 + 自主决策”的智能系统
	-Agent(智能体)是一个能感知环境、自主规划、调用工具、执行任务并反思结果的 AI 系统
    -股票小白--》不知道买哪只股票赚钱
    	-自动从众多股票中--查询市盈率,公司新闻(工具调用)--》大模型LLM主动思考--》自主决策--》自动购买
        
        
# 2 大模型AI--》要能实现对外部工具的调用
	-大模型LLM 不具备这种能力
    -使用技术实现,大模型具备这种能力
    -functionCalling 方式
    -MCP 方式
    
   
# 3 智能体就是 大语言模型[LLM] + 工具调用能力

image-20260802201533510

1.2 functionCalling

大模型,如何调用工具?

# 1 functionCalling(函数调用) 是OpenAI,2023年6月首次提出的技术概念,解决大模型本身无法直接跟外部工具直接通信的问题
	-大模型是通过海量数据训练得到---》时效性问题:今天的天气?茅台今天的股票价格?---》调用外部工具
    -目前市面上所有大模型,都支持functionCalling 调用外部工具的能力
    
# 2 大模型在面对实时性问题、数学计算等问题时可能效果不佳。Function Calling 通过引入外部工具,让大模型可以回答原本无法解决的问题。

# 3 AI大模型相当于一个聪明的,但手无缚鸡之力的人
 1 雇了一个聪明的顾问(GPT,千问)
   -读过世界上所有的书
   -会写代码,会调试bug,懂很多很多知识
 2 比如我想让这个顾问--》帮我创建一个文件夹,打开浏览器,查询当天天气,发送邮件
	-给它配一些工具:创建文件夹函数,打开浏览器函数,查询某只股票价格函数
    
 3 让聪明的顾问(大模型)---》调用这些工具--》完成更高级的操作

 4 举个例子: 大模型调用外部工具的流程


5 关键点:使用Function Calling  调用外部工具---》大模型和工具直接的桥梁
	-工具是有我们开发者开发的
    -但是每个工具,都需要手动注册给模型,格式严格【我们写好并且告诉ai了--》说明书tools】
    -MCP统一规范后--》工具无论如何写【效率高,效率低,官方写,第三方写】---》我们调用的时候是统一的
7 MCP 是Function Calling 的进阶:解决了Agent 开发中调用外部工具的技术门槛过高的问题,不统一的问题,理解为:functionCalling的升级统一


### 注意:functionCalling对我们来讲,无法直接使用,开发Codex,Coze的工程师才会直接使用
	我们会使用MCP
    

1.3 MCP

# 1 MCP,全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于2024年11月正式提出。
    MCP 是一套标准协议,让任何工具都能被任何 AI 系统自动发现和调用,就像 USB 接口一样通用
    MCP(Model Context Protocol)—— 给 AI 调用工具制定"通用插座标准"
    举例:之前手机充电:
    	-type c
        -light
        -大口 c
    mcp统一后:大家都用type c,只要生产 type c ,就能给所有手机充电
    	-只要按标准写完工具,所有大模型都可以调用
    
    12306写了工具
    高德地图写了工具
    天气公司写了个工具
    
    大模型在调用时,是一样的,统一了调用方式
    ### MCP 统一了 大模型 与 工具之间,调用的协议
    
# 2 MCP 解决的问题:Agent 开发中调用外部工具的技术门槛过高的问题,过于复杂,不统一,理解为:functionCalling的升级统一
	统一大模型语言(LLM)与外界数据源和工具之间的通信协议
    
# 3 比喻
# 使用functionCalling,千问大模型,DeepSeek大模型要使用查询天气工具,都要单独写,很麻烦
# 使用mcp,只需要写好一次,发布成mcp-server,任意客户端【千问大模型,DeepSeek大模型】,都可以直接使用

1.4 总结

# 1 都是为了解决 开发中AI调用外部工具的问题,functionCalling比较麻烦不统一,mcp简洁统一
# 2 MCP的出现,不是取代了functionCalling,是对functionCalling的统一和升级
	-他俩都存在
    -MCP出现后,functionCalling不需要了---严重错误
    -如果没有functionCalling--》MCP用不了
    

2 functionCalling案例之肯德基门店【了解】

大模型无法获得上海所有肯德基门店的

使用大模型---》借助于functionCalling---》调用百度地图方法

实时获取某个城市肯德基门店

image-20260802204128899

2.1 主文件



import requests
import json

#### 第一步:定义函数--》外部工具--》查询肯德基门店的函数--》传入城市返回这个城市的肯德基门店
def get_KFC(location):
    # 百度地图API--》输入要搜索的城市和建筑--》输入上海和肯德基--》搜索上海的所有肯德基门店-->返回json格式
    url = f"https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region={location}&query=肯德基&output=json"
    response = requests.get(url)
    data = response.json()
    return json.dumps(data)



#### 第二步:外部工具的使用说明书--》格式严格--》tools
## 2.1 定义字典
get_KFC_function = {
    'name': 'get_KFC', # 函数名
    'description': '查询肯德基门店,根据输入的城市名称,查询对应城市的肯德基门店', # 如何使用这个函数
    'parameters': {           # 参数
        'type': 'object',  # json对象类型
        'properties': {  # 参数成员描述
            'location': {
                'description': "城市名称,直接输入中国城市的中文名,如'北京','上海'",
                'type': 'string'
            },
        },  # 对参数描述,有几个就写几个
        'required': ['location'] # 必填参数
    }
}
## 2.2 使用说明书 tools
tools = [
    {
        "type": "function",  # 是个函数
        "function": get_KFC_function # 上面定义的那个字典
    },
]



messages = [
    {'role': 'user', 'content': '请帮我查询上海地区的肯德基门店?'}
]


#### 第三步:调用大模型-》传入"函数使用说明书"
from openai import OpenAI
from dotenv import load_dotenv
import os
load_dotenv('.env01')
client = OpenAI(
    api_key=os.getenv("API_KEY"),
    base_url=os.getenv("BASE_URL"),
)
completion = client.chat.completions.create(
    model=os.getenv("MODEL_NAME"),
    messages=messages,
    tools=tools # 重点:把说明书传入
)
response_message = completion.choices[0].message


####  第四步:大模型返回数据---》大模型让我们去调用哪个函数:返回函数id,函数名,函数参数
print('大模型第一次返回:',response_message)



###### 第五步:自己调用函数---》需要拿到函数名,参数
# 我们自己调用函数需要 :
# 拿到大模型给我们的函数名[字符串],和入参[列表]
# 根据字符串对应到 具体函数上 function_to_call = available_functions[function_name]--》get_KFC
# 有了真正函数,我们调用,传入参数 get_KFC(上海)
function_name = response_message.tool_calls[0].function.name # 拿到函数名:固定写法
print('大模型判断后,要调用的函数名:',function_name)
function_args = json.loads(response_message.tool_calls[0].function.arguments) # 拿到参数,固定写法,是列表
print('大模型理解后,解析的参数:',function_args)
# 调用我们的函数--》大模型返回的是函数名的字符串
# 把函数名字符串 跟 真正的函数对应
available_functions = {
    "get_KFC": get_KFC,
}
# 根据大模型返回的字符串名字,拿到真正的 函数 get_KFC
function_to_call = available_functions[function_name]
# 调用函数,传入参数---》**function_args 把参数打散了传入
function_response = function_to_call(**function_args) # 本质get_KFC(上海)
print('调用我们函数,执行的结果是:',function_response)
##### 第五步结束--》调用函数---》不是get_KFC()直接调用--》是通过反射调用的####



####### 第六步:带着我们调用函数返回结果--》给大模型
# 6.1 response_message 大模型返回给我们的数据--》转成json格式,好处理
response_message.model_dump()
# 6.2 向messages追加第一次模型返回结果消息
'''
messages = [
    {'role': 'user', 'content': '请帮我查询上海地区的肯德基门店?只要名字和,地址和电话'},
    大模型返回的数据,
    {"role": "tool",content:我们调用函数结果,tool_call_id:第一次大模型返回的id}
]
'''
messages.append(response_message.model_dump())
# 6.3 追加function返回消息
messages.append({
    "role": "tool",
    "content": function_response, # 我们调用拿到的结果
    "tool_call_id": response_message.tool_calls[0].id # 大模型返回的工具id号
})
# 6.4  发送第二次请求
second_response = client.chat.completions.create(
    model=os.getenv('MODEL_NAME'),
    messages=messages
)

###### 第七步:大模型返回分析后返回
print('最终大模型给的答案:',second_response.choices[0].message.content)



2.2 .env01

MODEL_NAME=deepseek-v4-flash
API_KEY=你们自己的
BASE_URL=https://api.deepseek.com

3 functionCalling案例之AI股票小助手【了解】

大模型【Deepseek,千问,GPT】----》无法实时获取到 某个公司股票价格和涨跌幅信息的

需要调用工具--——》实现实时获取股票信息

image-20260802204803619

codex用的deepseek大脑跟直接用deepseek的区别是什么?

Codex 软件---》有很多功能【插件:创建文件夹,创建PPT】-底层就是基于functionCalling写的---》没有大脑

​ -可以对接deepseek大脑

​ -可以对接GPT大脑

Codex/ChatGPT 和 codex++有什么区别

codex++:能让Codex对接国产模型

如果不用它,只能对接GPT---》需要FQ,需要注册

codex和其他国产接国内模型有什么区别吗

Codex 接国产模型:我们无法直接使用GPT模型---》官方订阅能用,肯定用官方--》贵

Claude code、Coze、workbuddy,openclaw,爱马仕。。。---》本质都一样---》他们都是通用智能体,不同公司出的

Code是最强的:大脑强,工具全

DeepSeek v4 flash--->刚发布--》据说很强---》性能比肩DeepSeek v4 pro

我们国产模型,更新的很快--》跟国外模型 差 3--6个月的智商

3.1 同学运行老师的代码【有兴趣的同学可以研究一下】

# 1 替换你自己DeepSeek的api key
	.env 中
    
# 2 使用Pycharm打开老师给的项目,安装依赖
	pip install -r requirements.txt
    
# 3 在 flask_run.py 上 ,右键运行

# 4 浏览器中打开:http://127.0.0.1:5000/

# 5 就可以聊天了

Python ---》运行python代码的--》python解释器

Pycharm--》集成开发环境--》在这里面写python代码--》高级点的记事本

没有Pycharm也能写python代码,并运行

4 MCP详解

4.1 MCP结构和通信模式

# 1 MCP 架构:CS架构  【百度网盘就是cs架构】
	C:client 缩写--》客户端    # 桌面装的百度网盘
    S:server缩写---》服务端    # 在百度服务器上
    
# 2 我们在Codex中使用 MCP
	-C是:Codex-----》装在我们电脑上了
    -S是:某个厂商的MCP服务--——》麦当劳在麦当劳的服务器上;天眼查在天眼查的服务器上
    
# 3 我们C端配置[Codex中]---》就可以连接到S端:麦当劳,天眼查
	-我们就能在Codex中,下单麦当劳,查你的积分,优惠券
    -我们就能在Codex中,查公司信息
    
    -如果不对了麦当劳mcp服务---》能不能在codex直接下单麦当劳?
 

# 4 C S 架构---》要通信,客户端和服务端互传信息--》3种通信模型
	-Streamable HTTP(HTTP 流式请求) —— 官方推荐 · 现代标准--》最强烈推荐,绝大部分第三方mcp服务都是使用这种
    - Stdio(Standard Input/Output) —— 本地开发首选 · 极简高效--》不通过网络,速度快
    
    - SSE(Server-Sent Events)—— 官方弃用 · 不再推荐
    
    
# 5 本地跑,也可以用http,没有任何问题


# 6 下面演示的三个案例,都是使用http通信模型

image-20260802211133312

4.2 第三方MCP服务

# 1 自从MCP协议被推出后--》各大厂商,都在开发自己的MCP服务端
	-支付宝:支付功能,查账功能
    	案例:ai购物-->看好了商品:原来自己付款--》现在让大模型决定付款--》调用阿里的mcp的支付功能--》直接完成付款
    -高德地图:景点信息mcp服务
    	案例:ai旅行助手:我要去北海玩---》查出景点拥堵情况,景点门票,好玩的,附近好吃的
    -12306:查票,买票mcp服务
    	案例:ai旅行助手:2月10号去北京玩
        	-查看2月10日天气是否适合出行
        	-自动购买2月10日去北京的火车票
            	-调用了12306mcp服务
            -推荐景点	
            	-调用了高德mcp
            自动美团订票
            	-调用了美团mcp服务
        12306候补:所有抢票方案,都不如候补
    。。。。。
    
    
    
# 3 MCP服务有哪些?放在哪?非常的,老师推荐几个
	厂商开发出来--》绝大多数代码都开源:数据不开源--》隐私,重要是数据
    
    
    
# 开源的如下:
## 3.1 ModelContextProtocol https://github.com/modelcontextprotocol/servers
	-https://registry.modelcontextprotocol.io/
## 3.2  魔塔MCP广场【国内的】    https://www.modelscope.cn/mcp 
## 3.3  MCP.so        https://mcp.so/zh
## 3.4  MCP Market    https://mcpmarket.com/zh
## 3.5  百炼MCP广场【阿里自家产品多】    https://bailian.console.aliyun.com/cn-beijing/?tab=app#/mcp-market 
	

image-20260802211906866

Codex 装好了:C端

S端:麦当劳,天眼查---》部署好了:部署在他们自己的服务器上了----有个地址--》通过这地址,连接上--》codex就可以用了

S端的代码,需要我们写吗?不需要,我们只用别人写好的

如果同学们去了 高德公司/麦当劳---》MCP服务开发---》Python--》FastMCP框架

懂开发【使用Codex开发】: 开发智能体--》使用大模型+MCP调用---》实现出一款产品

Codex就是一款产品

5 Codex使用麦当劳MCP服务

# 1 信息:https://www.modelscope.cn/mcp/servers/MChina/mcd_mcp_server
# 2 接入介绍:https://open.mcd.cn/mcp  /   https://open.mcd.cn/mcp/doc
	-手机号登录--》麦当劳app--》账号
    -拿到API-key:2RXXfAmjg5qpXZ1CWFAO29sDdiTxJQXS
# 2 url地址:https://mcp.mcd.cn

# 3 API_KEY :独属于你,所有使用Codex下单的账号,就是这个账号
	2RXXfAmjg5qpXZ1CWFAO29sDdiTxJQXS
# 方式一:自己配

# 方式二:直接让Codex配

# 4 直接让codex给配置
帮我设置麦当劳的mcp服务:
{
  "mcpServers": {
    "mcd-mcp": {
      "type": "streamablehttp",
      "url": "https://mcp.mcd.cn",
      "headers": {
        "Authorization": "Bearer 替换成你们的API key"
      }
    }
  }
}

帮我设置麦当劳的mcp服务:
{
  "mcpServers": {
    "mcd-mcp": {
      "type": "streamablehttp",
      "url": "https://mcp.mcd.cn",
      "headers": {
        "Authorization": "Bearer 2RXXfAmjg5qpXZ1CWFAO29sDdiTxJQXS"
      }
    }
  }
}

# 使用:
	-查询我的积分
    -查询我的优惠券
    -查询餐厅
    -下单等

image-20260802214703445

image-20260802220412313

image-20260802220433986

image-20260802220819435

6 Codex使用天眼查MCP

查公司,法人,官司。。。。

# 0 参考:https://www.tianyancha.com/ai/developer-docs#mcp-tips
# 1 信息:https://www.tianyancha.com/ai/profile  # 登录你的账号

# 2 url地址:https://mcp.tianyancha.com/v1
# 3 API_KEY :https://www.tianyancha.com/ai/profile?tab=usage
	mcpk2_7JCr9KQGI2DPsl7HoJnSEKaZX
    
    
# 4 请使用 tyc-mcp 查询乐视网信息技术(北京)股份有限公司的基本工商信息。

image-20260802221301659

image-20260802221401829

7 Codex使用独立部署12306 MCP

# 1 12306 第三方写的,没部署,代码放在github上,我们自己部署
	-同学们不需要会,我已经部署好了--》买了个云服务器部署了
    -相当于:第三方已经给我们部署好了
    -这个第三方如何写的? 使用爬虫技术--》爬取了12306的数据--》可能不稳定
    	-12306可能有反爬--》之前是没问题的,今天测的时候,有的服务不能用,有的能用
        
        
# 2 配置,只需要地址即可:http://121.43.104.179:8080/sse




image-20260802221921950

image-20260802222150179

# 1 functionCalling和MCP
## 1.1 Agent智能体开发
## 1.2 functionCalling
## 1.3 MCP
## 1.4 总结

# 2 functionCalling案例之肯德基门店

# 3 functionCalling案例之AI股票小助手

# 4 MCP详解
## 4.1 MCP结构和通信模式
## 4.2 第三方MCP服务

# 5 Codex使用麦当劳MCP服务
# 6 Codex使用天眼查MCP
# 7 Codex使用独立部署12306 MCP
posted @ 2026-08-04 23:18  凫弥  阅读(19)  评论(0)    收藏  举报