【翻译、转载】【转载】LLM 的函数调用与 MCP

来源:

https://www.dailydoseofds.com/p/function-calling-mcp-for-llms/

【代码以图像显示的是原文内容,以代码形式显示的是大模型给出的参考】


LLM 的函数调用与 MCP

在 MCP 变得像现在这样主流(或流行)之前,大多数 AI 工作流依赖于传统的函数调用 (Function Calling)

现在,MCP(模型上下文协议)正在引入一种转变,改变开发者为智能体(Agent)构建工具访问和编排的方式。

以下是一个解释函数调用和 MCP 的图示:

在这里插入图片描述

让我们深入了解更多!

什么是函数调用?

函数调用是一种机制,允许 LLM 根据用户输入识别它需要什么工具以及何时调用它。

在这里插入图片描述

它通常的工作方式如下:

  1. LLM 接收来自用户的提示。
  2. LLM 决定它需要的工具。
  3. 程序员实现程序来接受来自 LLM 的工具调用请求,并准备一个函数调用。
  4. 函数调用(带有参数)被传递给将处理实际执行的后端服务。

让我们快速看看实际操作!

首先,我们定义一个工具函数 get_stock_price。它使用 yfinance 库来获取指定股票代码的最新收盘价:
在这里插入图片描述
【参考】

# (示例 Python 代码,定义 get_stock_price 函数)
import yfinance as yf

def get_stock_price(ticker_symbol):
  """获取给定股票代码的最新收盘价"""
  stock = yf.Ticker(ticker_symbol)
  # 获取历史市场数据,这里只取最近一天的数据来获取最新收盘价
  hist = stock.history(period="1d")
  if not hist.empty:
    return str(hist['Close'].iloc[0])
  else:
    return "无法获取股价信息。"

接下来,我们向一个 LLM(通过 Ollama 提供服务)发出提示,并传递模型可以用来获取外部信息(如果需要)的工具:
在这里插入图片描述
【参考】

# (示例 Python 代码,向 LLM 发出带工具的提示)
from ollama import Client

client = Client() # 假设 Ollama 服务正在本地运行

response = client.chat(model='llama3'
给定引用内容未提及MCP不依赖LLM实现函数调用的方法。一般而言,MCP(Multi - Cloud Provider)作为一种协议规范,通常LLM紧密协作,LLM利用MCP协议进行工具调用。若要实现不依赖LLM函数调用,可能需要从MCP架构的组件入手,例如资源管理模块、调度策略模块和通信模块。 可以利用资源管理模块监控计算资源,当有函数调用请求时,根据资源使用情况动态分配资源。调度策略模块可基于负载均衡算法对函数调用任务进行合理调度,避免资源过度集中或闲置。通信模块负责不同计算节点之间的通信和同步,确保函数调用过程中数据的一致性和任务的协调性。 以下是一个简单的伪代码示例,展示基本的函数调用调度: ```python # 资源管理模块模拟 class ResourceManager: def __init__(self): self.resources = [True] * 10 # 假设有10个资源 def allocate_resource(self): for i, available in enumerate(self.resources): if available: self.resources[i] = False return i return -1 # 无可用资源 def release_resource(self, resource_id): self.resources[resource_id] = True # 调度策略模块模拟 class Scheduler: def __init__(self): self.queue = [] def add_task(self, task): self.queue.append(task) def schedule_task(self, resource_manager): if self.queue: task = self.queue.pop(0) resource_id = resource_manager.allocate_resource() if resource_id != -1: # 模拟执行任务 print(f"Executing task {task} on resource {resource_id}") resource_manager.release_resource(resource_id) else: self.queue.insert(0, task) # 放回队列 # 模拟函数调用 resource_manager = ResourceManager() scheduler = Scheduler() # 添加任务 scheduler.add_task("function_call_1") scheduler.add_task("function_call_2") # 调度任务 scheduler.schedule_task(resource_manager) scheduler.schedule_task(resource_manager) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值