Function Calling

news2025/5/16 14:27:54

在介绍Function Calling之前我们先了解一个概念,接口。

接口

两种常见接口:

  1. 人机交互接口,User Interface,简称 UI
  2. 应用程序编程接口,Application Programming Interface,简称 API

接口能「通」的关键,是两边都要遵守约定。

  • 人要按照 UI 的设计来操作。UI 的设计要符合人的习惯
  • 程序要按照 API 的设计来调用。API 的设计要符合程序惯例

你是不是有很多调接口的痛苦经历?比如:

  • 文档坑
  • 大小写坑
  • 参数顺序坑
  • 参数类型坑
  • ……

接口的进化

UI 进化的趋势是:越来越适应人的习惯,越来越自然

  1. 命令行,Command Line Interface,简称 CLI(DOS、Unix/Linux shell, Windows Power Shell)
  2. 图形界面,Graphical User Interface,简称 GUI(Windows、MacOS、iOS、Android)
  3. 语言界面,Conversational User Interface,简称 CUI,或 Natural-Language User Interface,简称 LUI ← 我们在这里
  4. 脑机接口,Brain–Computer Interface,简称 BCI

在这里插入图片描述

API:

  1. 从本地到远程,从同步到异步,媒介发生很多变化,但本质一直没变:程序员的约定
  2. 现在,开始进化到自然语言接口,Natural-Language Interface,简称 NLI

自然语言连接一切(Natural Language Interface)

NLI 是孙志岗在《以 ChatGPT 为代表的「大模型」会是多大的技术革命?》一文中提出的概念。

用户操作习惯的迁移,会逼所有软件,都得提供「自然语言界面(Natural Language Interface,简称 NLI)」。这是我生造的词,指的是以自然语言为输入的接口。

不仅用户界面要 NLI,API 也要 NLI 化。这是因为用户发出的宏观指令,往往不会是一个独立软件能解决的,它需要很多软件、设备的配合。

一种实现思路是,入口 AI(比如 Siri、小爱同学,机器人管家)非常强大,能充分了解所有软件和设备的能力,且能准确地把用户任务拆解和分发下去。这对入口 AI 的要求非常高。

另一种实现思路是,入口 AI 收到自然语言指令,把指令通过 NLI 广播出去(也可以基于某些规则做有选择的广播,保护用户隐私),由各个软件自主决策接不接这个指令,接了要怎么做,该和谁配合。

……

当 NLI 成为事实标准,那么互联网上软件、服务的互通性会大幅提升,不再受各种协议、接口的限制。

最自然的接口,就是自然语言接口:

以前因为计算机处理不对自然语言,所以有了那么多编程语言,那么多接口,那么多协议,那么多界面风格。而且,它们每一次进化,都是为了「更自然」。现在,终极的自然,到来了。我们终于可以把计算机当人看了!

OpenAI 是如何用自然语言连接一切的呢?

为什么要大模型连接外部世界?

大模型两大缺陷:
  1. 并非知晓一切
    1. 训练数据不可能什么都有。垂直、非公开数据必有欠缺
    2. 不知道最新信息。大模型的训练周期很长,且更新一次耗资巨大,还有越训越傻的风险。所以 ta 不可能实时训练。
      1. GPT-3.5 知识截至 2021 年 9 月
      2. GPT-4-turbo 知识截至 2023 年 12 月
      3. GPT-4o-mini 知识截至 2023 年 10 月
      4. GPT-4o 知识截至 2023 年 10 月
  2. 没有「真逻辑」。它表现出的逻辑、推理,是训练文本的统计规律,而不是真正的逻辑,所以有幻觉。

所以:大模型需要连接真实世界,并对接真逻辑系统执行确定性任务。

比如算加法:

  1. 把 100 以内所有加法算式都训练给大模型,ta 就能回答 100 以内的加法算式,但仍有概率出错
  2. 如果问 ta 更大数字的加法,出错概率就会更大
  3. 因为 ta 并不懂「加法」,只是记住了 100 以内的加法算式的统计规律
  4. Ta 是用字面意义做数学

数学能力最强的软件系统是 Wolfram Alpha,推荐阅读这篇文章了解它和 ChatGPT 原理的不同:《Wolfram|Alpha as the Way to Bring Computational Knowledge Superpowers to ChatGPT》

PS. Wolfram 的书《这就是 ChatGPT!》是从神经网络层面解释大模型原理的最好读的书。英文版免费

ChatGPT 用 Actions 连接外部世界

第一次尝试:Plugins

  • 2023 年 3 月 24 日发布 Plugins,模型可以调用外部 API
  • 2024 年 4 月 9 日正式下线,宣告失败

第二次尝试:Actions

Actions,内置在 GPTs 中,解决了落地场景问题,但没能成功商业化。

小瓜 GPT 已经接入了高德地图 actions,可以试试问位置相关的问题:https://chat.openai.com/g/g-DxRsTzzep-xiao-gua
工作流程:

在这里插入图片描述

划重点:
  1. 通过 Actions 的 schema,GPT 能读懂各个 API 能做什么、怎么调用(相当于人读 API 文档)
  2. 拿到 prompt,GPT 分析出是否要调用 API 才能解决问题(相当于人读需求)
  3. 如果要调用 API,生成调用参数(相当于人编写调用代码)
  4. ChatGPT(注意,不是 GPT)调用 API(相当于人运行程序)
  5. API 返回结果,GPT 读懂结果,整合到回答中(相当于人整理结果,输出结论)

把 AI 当人看!

上面这个五个步骤总结的精辟到极致。

这个过程中,GPT 已经是个 agent 了。

Actions 开发对接

Actions 官方文档:https://platform.openai.com/docs/actions

把 API 对接到 GPTs 里,只需要配置一段 API 描述信息:

openapi: 3.1.0
info:
  title: 高德地图
  description: 获取 POI 的相关信息
  version: v1.0.0
servers:
  - url: https://restapi.amap.com/v5/place
paths:
  /text:
    get:
      description: 根据POI名称,获得POI的经纬度坐标
      operationId: get_location_coordinate
      parameters:
        - name: keywords
          in: query
          description: POI名称,必须是中文
          required: true
          schema:
            type: string
        - name: region
          in: query
          description: POI所在的区域名,必须是中文
          required: false
          schema:
            type: string
      deprecated: false
  /around:
    get:
      description: 搜索给定坐标附近的POI
      operationId: search_nearby_pois
      parameters:
        - name: keywords
          in: query
          description: 目标POI的关键字
          required: true
          schema:
            type: string
        - name: location
          in: query
          description: 中心点的经度和纬度,用逗号分隔
          required: false
          schema:
            type: string
      deprecated: false
components:
  schemas: {
   }

还需要配置 API key 来满足权限要求。(高德地图 API KEY 点此免费申请)

这里的所有 namedescription 都是 prompt,决定了 GPT 会不会调用你的 API,调用得是否正确。

思考:为什么不干脆整个描述文件都用自然语言写?非要用结构化的 JSON 或 YAML?

还需要配置 API key 来满足权限要求。(高德地图 API KEY 点此免费申请)

在这里插入图片描述
这里的所有 namedescription 都是 prompt,决定了 GPT 会不会调用你的 API,调用得是否正确。

思考:为什么不干脆整个描述文件都用自然语言写?非要用结构化的 JSON 或 YAML?

GPTs 与它的平替们

OpenAI GPTs

  1. 无需编程,就能定制个性对话机器人的平台
  2. 可以放入自己的知识库,实现 RAG(后面会讲)
  3. 可以通过 actions 对接专有数据和功能
  4. 内置 DALL·E 3 文生图和 Code Interpreter 能力
  5. 只有 ChatGPT Plus 会员可以使用

推荐两款平替:

字节跳动 Coze(扣子)中国版 国际版

  1. 中国版发展势头很猛,支持豆包、Moonshot 等国产大模型
  2. 功能很强大,支持工作流、API
  3. 但是……

Dify

  1. 开源,中国公司开发
  2. 功能最丰富
  3. 可以本地部署,支持几乎所有大模型
  4. 有 GUI,也有 API

有这类无需开发的工具,为什么还要学大模型开发技术呢?

  1. 并不是所有事情都适合用对话解决
  2. 它们都无法针对业务需求做极致调优

一个常见的研发场景:先在扣子/Dify 验证原型可行性,再编程落地实现。

Function Calling 技术可以把大模型和业务系统连接,实现更丰富的功能。

Function Calling 的机制

原理和 Actions 一样,只是使用方式有区别。

在这里插入图片描述
Function Calling 完整的官方接口文档:https://platform.openai.com/docs/guides/function-calling

值得一提:接口里的 tools,最初版本叫 functions。这是一个很有趣的指向

示例 1:调用本地函数

需求:实现一个回答问题的 AI。题目中如果有加法,必须能精确计算。

# 初始化
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
import json

_ = load_dotenv(find_dotenv())

client = OpenAI()


def print_json(data):
    """
    打印参数。如果参数是有结构的(如字典或列表),则以格式化的 JSON 形式打印;
    否则,直接打印该值。
    """
    if hasattr(data, 'model_dump_json'):
        data = json.loads(data.model_dump_json())

    if (isinstance(data, (list))):
        for item in data:
            print_json(item)
    elif (isinstance(data, (dict))):
        print(json.dumps(
            data,
            indent=4,
            ensure_ascii=False
        ))
    else:
        print(data)
def get_completion(messages, model="gpt-4o-mini"):
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0.7,
        tools=[{
     # 用 JSON 描述函数。可以定义多个。由大模型决定调用谁。也可能都不调用
            "type": "function",
            "function": {
   
                "name": "sum",
                "description": "加法器,计算一组数的和"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2376920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试--HTML

1.src和href的区别 总结来说&#xff1a; <font style"color:rgb(238, 39, 70);background-color:rgb(249, 241, 219);">src</font>用于替换当前元素&#xff0c;指向的资源会嵌入到文档中&#xff0c;例如脚本、图像、框架等。<font style"co…

SparkSQL操作Mysql-准备mysql环境

我们计划在hadoop001这台设备上安装mysql服务器&#xff0c;&#xff08;当然也可以重新使用一台全新的虚拟机&#xff09;。 以下是具体步骤&#xff1a; 使用finalshell连接hadoop001.查看是否已安装MySQL。命令是: rpm -qa|grep mariadb若已安装&#xff0c;需要先做卸载MyS…

DeepBook 与 CEX 的不同

如果你曾经使用过像币安或 Coinbase 这样的中心化交易所&#xff08;CEX&#xff09;&#xff0c;你可能已经熟悉了订单簿系统 — — 这是一种撮合买卖双方进行交易的机制。而 DeepBook 是 Sui 上首个完全链上的中央限价订单簿。 那么&#xff0c;是什么让 DeepBook 如此独特&…

Scrapy框架下地图爬虫的进度监控与优化策略

1. 引言 在互联网数据采集领域&#xff0c;地图数据爬取是一项常见但具有挑战性的任务。由于地图数据通常具有复杂的结构&#xff08;如POI点、路径信息、动态加载等&#xff09;&#xff0c;使用传统的爬虫技术可能会遇到效率低下、反爬策略限制、任务进度难以监控等问题。 …

城市扫街人文街头纪实胶片电影感Lr调色预设,DNG/手机适配滤镜!

调色详情 城市扫街人文街头纪实胶片电影感 Lr 调色是通过 Lightroom&#xff08;Lr&#xff09;软件&#xff0c;对城市街头抓拍的人文纪实照片进行后期调色处理。旨在赋予照片如同胶片拍摄的质感以及电影般浓厚的叙事氛围&#xff0c;不放过每一个日常又珍贵的瞬间&#xff0c…

让AI帮我写一个word转pdf的工具

需求分析 前几天&#xff0c;一个美女找我&#xff1a; 阿瑞啊&#xff0c;能不能帮我写个工具&#xff0c;我想把word文件转为pdf格式的 我说&#xff1a;“你直接网上搜啊&#xff0c;网上工具多了去了” 美女说&#xff1a; 网上的要么是需要登录注册会员的&#xff0c;要…

OrangePi Zero 3学习笔记(Android篇)10 - SPI和从设备

目录 1. 配置内核 2. 修改设备数 3. 修改权限 4. 验证 Zero 3的板子有2个SPI Master接口&#xff0c;其中SPI0接的是板载16MB大小的SPI Nor Flash&#xff0c;SPI1则是导出到26pin的接口上。 spi和i2c有点不同&#xff0c;spi是直接生成spi虚拟设备&#xff0c;所以在dev里…

基于策略的强化学习方法之近端策略优化(PPO)深度解析

PPO&#xff08;Proximal Policy Optimization&#xff09;是一种基于策略梯度的强化学习算法&#xff0c;旨在通过限制策略更新幅度来提升训练稳定性。传统策略梯度方法&#xff08;如REINFORCE&#xff09;直接优化策略参数&#xff0c;但易因更新步长过大导致性能震荡或崩溃…

文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境

https://www.frontiersin.org/journals/immunology/articles/10.3389/fimmu.2023.1145300/full 目标&#xff1a;肿瘤微环境(TME)在子宫内膜癌(EC)的进展中起着重要作用。我们旨在评估EC的TME中的细胞群体。 方法&#xff1a;我们从GEO下载了EC的单细胞RNA测序(scRNA-seq)和空…

HTML-3.4 表单form

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…

【MySQL】服务器配置与管理(相关日志)

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【MySQL】探秘&#xff1a;数据库世界的瑞士军刀 一、系统变量和选项 当通过mysqld启动数据库服务器时&#xff0c;可以通过选项文件或命令行中提供选项。一般&#xff0c;为了确保服务器在每次运行时…

【问题】Watt加速github访问速度:好用[特殊字符]

前言 GitHub 是全球知名的代码托管平台&#xff0c;主要用于软件开发&#xff0c;提供 Git 仓库托管、协作工具等功能&#xff0c;经常要用到&#xff0c;但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit&#xff08;原名 Steam&#xff09;是由江苏蒸汽凡星科技有限公…

vue3:十三、分类管理-表格--行内按钮---行删除、批量删除实现功能实现

一、实现效果 增加行内按钮的样式效果,并且可以根绝父组件决定是否显示 增加行内删除功能、批量删除功能 二、增加行内按钮样式 1、增加视图层按钮 由于多个表格都含有按钮功能,所以这里直接在子组件中加入插槽按钮 首先增加表格行<el-table-column></el-table-…

浏览器设置代理ip后不能上网?浏览器如何改ip地址教程

使用代理IP已成为许多用户保护隐私、绕过地域限制或进行网络测试的常见做法。当浏览器设置代理IP后无法上网时&#xff0c;通常是由于代理配置问题或代理服务器本身不可用。以下是排查和解决问题的详细步骤&#xff0c;以及更改浏览器IP的方法&#xff1a; 一、代理设置后无法上…

R语言的专业网站top5推荐

李升伟 以下是学习R语言的五个顶级专业网站推荐&#xff0c;涵盖教程、社区、资源库和最新动态&#xff1a; 1.R项目官网 (r-project.org) R语言的官方网站&#xff0c;提供软件下载、文档、手册和常见问题解答。特别适合初学者和高级用户&#xff0c;是获取R语言核心资源的…

[训练和优化] 3. 模型优化

&#x1f44b; 你好&#xff01;这里有实用干货与深度分享✨✨ 若有帮助&#xff0c;欢迎&#xff1a;​ &#x1f44d; 点赞 | ⭐ 收藏 | &#x1f4ac; 评论 | ➕ 关注 &#xff0c;解锁更多精彩&#xff01;​ &#x1f4c1; 收藏专栏即可第一时间获取最新推送&#x1f514;…

无人设备遥控器之无线通讯技术篇

无人设备遥控器的无线通讯技术是确保遥控操作准确、稳定、高效进行的关键。以下是对无人设备遥控器无线通讯技术的详细解析&#xff1a; 一、主要无线通讯技术类型 Wi-Fi通讯技术 原理&#xff1a;基于IEEE 802.11标准&#xff0c;通过无线接入点&#xff08;AP&#xff09;…

PyTorch LSTM练习案例:股票成交量趋势预测

文章目录 案例介绍源码地址代码实现导入相关库数据获取和处理搭建LSTM模型训练模型测试模型绘制折线图主函数 绘制结果 案例介绍 本例使用长短期记忆网络模型对上海证券交易所工商银行的股票成交量做一个趋势预测&#xff0c;这样可以更好地掌握股票买卖点&#xff0c;从而提高…

CK3588下安装linuxdeployqt qt6 arm64

参考资料&#xff1a; Linux —— linuxdeployqt源码编译与打包&#xff08;含出错解决&#xff09; linux cp指令报错&#xff1a;cp: -r not specified&#xff1b; cp: omitting directory ‘xxx‘&#xff08;需要加-r递归拷贝&#xff09; CMake Error at /usr/lib/x86_64…

木马查杀引擎—关键流程图

记录下近日研究的木马查杀引擎&#xff0c;将关键的实现流程图画下来 PHP AST通道实现 木马查杀调用逻辑 模型训练流程