Function Calling
在介绍Function Calling之前我们先了解一个概念,接口。
接口
两种常见接口:
- 人机交互接口,User Interface,简称 UI
- 应用程序编程接口,Application Programming Interface,简称 API
接口能「通」的关键,是两边都要遵守约定。
- 人要按照 UI 的设计来操作。UI 的设计要符合人的习惯
- 程序要按照 API 的设计来调用。API 的设计要符合程序惯例
你是不是有很多调接口的痛苦经历?比如:
- 文档坑
- 大小写坑
- 参数顺序坑
- 参数类型坑
- ……
接口的进化
UI 进化的趋势是:越来越适应人的习惯,越来越自然
- 命令行,Command Line Interface,简称 CLI(DOS、Unix/Linux shell, Windows Power Shell)
- 图形界面,Graphical User Interface,简称 GUI(Windows、MacOS、iOS、Android)
- 语言界面,Conversational User Interface,简称 CUI,或 Natural-Language User Interface,简称 LUI ← 我们在这里
- 脑机接口,Brain–Computer Interface,简称 BCI
API:
- 从本地到远程,从同步到异步,媒介发生很多变化,但本质一直没变:程序员的约定
- 现在,开始进化到自然语言接口,Natural-Language Interface,简称 NLI
自然语言连接一切(Natural Language Interface)
NLI 是孙志岗在《以 ChatGPT 为代表的「大模型」会是多大的技术革命?》一文中提出的概念。
用户操作习惯的迁移,会逼所有软件,都得提供「自然语言界面(Natural Language Interface,简称 NLI)」。这是我生造的词,指的是以自然语言为输入的接口。
不仅用户界面要 NLI,API 也要 NLI 化。这是因为用户发出的宏观指令,往往不会是一个独立软件能解决的,它需要很多软件、设备的配合。
一种实现思路是,入口 AI(比如 Siri、小爱同学,机器人管家)非常强大,能充分了解所有软件和设备的能力,且能准确地把用户任务拆解和分发下去。这对入口 AI 的要求非常高。
另一种实现思路是,入口 AI 收到自然语言指令,把指令通过 NLI 广播出去(也可以基于某些规则做有选择的广播,保护用户隐私),由各个软件自主决策接不接这个指令,接了要怎么做,该和谁配合。
……
当 NLI 成为事实标准,那么互联网上软件、服务的互通性会大幅提升,不再受各种协议、接口的限制。
最自然的接口,就是自然语言接口:
以前因为计算机处理不对自然语言,所以有了那么多编程语言,那么多接口,那么多协议,那么多界面风格。而且,它们每一次进化,都是为了「更自然」。现在,终极的自然,到来了。我们终于可以把计算机当人看了!
OpenAI 是如何用自然语言连接一切的呢?
为什么要大模型连接外部世界?
- 并非知晓一切
- 训练数据不可能什么都有。垂直、非公开数据必有欠缺
- 不知道最新信息。大模型的训练周期很长,且更新一次耗资巨大,还有越训越傻的风险。所以 ta 不可能实时训练。
- GPT-3.5 知识截至 2021 年 9 月
- GPT-4-turbo 知识截至 2023 年 12 月
- GPT-4o-mini 知识截至 2023 年 10 月
- GPT-4o 知识截至 2023 年 10 月
- 没有「真逻辑」。它表现出的逻辑、推理,是训练文本的统计规律,而不是真正的逻辑,所以有幻觉。
所以:大模型需要连接真实世界,并对接真逻辑系统执行确定性任务。
比如算加法:
- 把 100 以内所有加法算式都训练给大模型,ta 就能回答 100 以内的加法算式,但仍有概率出错
- 如果问 ta 更大数字的加法,出错概率就会更大
- 因为 ta 并不懂「加法」,只是记住了 100 以内的加法算式的统计规律
- 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
工作流程:
- 通过 Actions 的 schema,GPT 能读懂各个 API 能做什么、怎么调用(相当于人读 API 文档)
- 拿到 prompt,GPT 分析出是否要调用 API 才能解决问题(相当于人读需求)
- 如果要调用 API,生成调用参数(相当于人编写调用代码)
- ChatGPT(注意,不是 GPT)调用 API(相当于人运行程序)
- 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_coordinateparameters:- name: keywordsin: querydescription: POI名称,必须是中文required: trueschema:type: string- name: regionin: querydescription: POI所在的区域名,必须是中文required: falseschema:type: stringdeprecated: false/around:get:description: 搜索给定坐标附近的POIoperationId: search_nearby_poisparameters:- name: keywordsin: querydescription: 目标POI的关键字required: trueschema:type: string- name: locationin: querydescription: 中心点的经度和纬度,用逗号分隔required: falseschema:type: stringdeprecated: false
components:schemas: {}
还需要配置 API key 来满足权限要求。(高德地图 API KEY 点此免费申请)

这里的所有 name
、description
都是 prompt,决定了 GPT 会不会调用你的 API,调用得是否正确。
还需要配置 API key 来满足权限要求。(高德地图 API KEY 点此免费申请)
这里的所有 name
、description
都是 prompt,决定了 GPT 会不会调用你的 API,调用得是否正确。
GPTs 与它的平替们
OpenAI GPTs
- 无需编程,就能定制个性对话机器人的平台
- 可以放入自己的知识库,实现 RAG(后面会讲)
- 可以通过 actions 对接专有数据和功能
- 内置 DALL·E 3 文生图和 Code Interpreter 能力
- 只有 ChatGPT Plus 会员可以使用
推荐两款平替:
字节跳动 Coze(扣子)中国版 国际版
- 中国版发展势头很猛,支持豆包、Moonshot 等国产大模型
- 功能很强大,支持工作流、API
- 但是……
Dify
- 开源,中国公司开发
- 功能最丰富
- 可以本地部署,支持几乎所有大模型
- 有 GUI,也有 API
有这类无需开发的工具,为什么还要学大模型开发技术呢?
- 并不是所有事情都适合用对话解决
- 它们都无法针对业务需求做极致调优
一个常见的研发场景:先在扣子/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": "加法器,计算一组数的和"
相关文章:

Function Calling
在介绍Function Calling之前我们先了解一个概念,接口。 接口 两种常见接口: 人机交互接口,User Interface,简称 UI应用程序编程接口,Application Programming Interface,简称 API接口能「通」的关键,是两边都要遵守约定。 人要按照 UI 的设计来操作。UI 的设计要符合人…...
【搭建Node-RED + MQTT Broker实现AI大模型交互】
搭建Node-RED MQTT Broker实现AI大模型交互 搭建Node-RED MQTT Broker实现AI大模型交互一、系统架构二、环境准备与安装1. 安装Node.js2. 安装Mosquitto MQTT Broker3. 配置Mosquitto4. 安装Node-RED5. 配置Node-RED监听所有网络接口6. 启动Node-RED 三、Node-RED流程配置1. …...
高可靠低纹波国产4644电源芯片在工业设备的应用
摘要 随着工业自动化和智能化的飞速发展,工业设备对于电源芯片的性能和可靠性提出了前所未有的严格要求。电源芯片作为工业设备的核心供电组件,其性能直接影响到整个设备的运行效率和稳定性。本文以国科安芯的ASP4644四通道降压稳压器为例,通…...

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

SparkSQL操作Mysql-准备mysql环境
我们计划在hadoop001这台设备上安装mysql服务器,(当然也可以重新使用一台全新的虚拟机)。 以下是具体步骤: 使用finalshell连接hadoop001.查看是否已安装MySQL。命令是: rpm -qa|grep mariadb若已安装,需要先做卸载MyS…...
Linux常用方法
1、查看日志后100行 tail -f -n 100 catalina.out 2、ps命令 ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照 ps -ef 显示所有进程信息,连同命令行,ps 与grep 常用组合用法,查找特定进程 ps aux列出目前所有的…...
[c++项目]云备份项目测试
1. 测试概述 测试时间:2024年3月 测试环境:macOS 23.4.0 测试工具:VSCode, CMake, GTest 2. 功能测试 2.1 文件备份功能 测试项预期结果实际结果状态单文件备份成功上传并保存成功✅多文件备份批量上传成功成功✅大文件备份分片上传成功…...

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

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

城市扫街人文街头纪实胶片电影感Lr调色预设,DNG/手机适配滤镜!
调色详情 城市扫街人文街头纪实胶片电影感 Lr 调色是通过 Lightroom(Lr)软件,对城市街头抓拍的人文纪实照片进行后期调色处理。旨在赋予照片如同胶片拍摄的质感以及电影般浓厚的叙事氛围,不放过每一个日常又珍贵的瞬间,…...
嵌入式学习笔记 D21:双向链表的基本操作
双向链表的定义与创建双向链表的插入双向链表的查找双向链表的修改双向链表的删除双向链表的逆序MakeFile工具使用 一、双向链表的定义与创建 1.双向链表的定义: 双向链表是在单链表的每个结点中,再设置一个指向其前一个结点的指针域。 struct DOUNode…...

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

OrangePi Zero 3学习笔记(Android篇)10 - SPI和从设备
目录 1. 配置内核 2. 修改设备数 3. 修改权限 4. 验证 Zero 3的板子有2个SPI Master接口,其中SPI0接的是板载16MB大小的SPI Nor Flash,SPI1则是导出到26pin的接口上。 spi和i2c有点不同,spi是直接生成spi虚拟设备,所以在dev里…...

基于策略的强化学习方法之近端策略优化(PPO)深度解析
PPO(Proximal Policy Optimization)是一种基于策略梯度的强化学习算法,旨在通过限制策略更新幅度来提升训练稳定性。传统策略梯度方法(如REINFORCE)直接优化策略参数,但易因更新步长过大导致性能震荡或崩溃…...
跨境电商定价革命:亚马逊“逆向提价“策略背后的价值重构逻辑
导言:打破价格魔咒的销量奇迹 2024年Q3亚马逊平台上演商业悖论:在TOP5000卖家中,12%实施5%-15%温和提价的商户,41%实现单量30.4%的季度增长。这一现象颠覆"低价即流量"的电商铁律,揭开新消费时代"价值定…...

文章复现|(1)整合scRNA-seq 和空间转录组学揭示了子宫内膜癌中 MDK-NCL 依赖性免疫抑制环境
https://www.frontiersin.org/journals/immunology/articles/10.3389/fimmu.2023.1145300/full 目标:肿瘤微环境(TME)在子宫内膜癌(EC)的进展中起着重要作用。我们旨在评估EC的TME中的细胞群体。 方法:我们从GEO下载了EC的单细胞RNA测序(scRNA-seq)和空…...

HTML-3.4 表单form
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 系列文章目录 HTML-1.1 文本字体样式-字体设置、分割线、段落标签、段内回车以及特殊符号 HTML…...
阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)
上一篇文章介绍了如何通过topic操作命令实现与机器人的交互,本篇我们介绍如何通过Message(即topic的下一级)实现与机器人的交互。 和topic一样,首先在一个终端通过ssh命令登录机器人、启动机器人,然后打开另外一个终端…...

【MySQL】服务器配置与管理(相关日志)
🔥个人主页: 中草药 🔥专栏:【MySQL】探秘:数据库世界的瑞士军刀 一、系统变量和选项 当通过mysqld启动数据库服务器时,可以通过选项文件或命令行中提供选项。一般,为了确保服务器在每次运行时…...

【问题】Watt加速github访问速度:好用[特殊字符]
前言 GitHub 是全球知名的代码托管平台,主要用于软件开发,提供 Git 仓库托管、协作工具等功能,经常要用到,但是国内用户常因网络问题难以稳定访问 。 Watt Toolkit(原名 Steam)是由江苏蒸汽凡星科技有限公…...

vue3:十三、分类管理-表格--行内按钮---行删除、批量删除实现功能实现
一、实现效果 增加行内按钮的样式效果,并且可以根绝父组件决定是否显示 增加行内删除功能、批量删除功能 二、增加行内按钮样式 1、增加视图层按钮 由于多个表格都含有按钮功能,所以这里直接在子组件中加入插槽按钮 首先增加表格行<el-table-column></el-table-…...
Web3.0:互联网的去中心化未来
随着互联网技术的不断发展,我们正站在一个新时代的门槛上——Web3.0时代。Web3.0不仅仅是一个技术升级,它更是一种全新的互联网理念,旨在通过去中心化技术重塑网络世界。本文将深入探讨Web3.0的核心概念、技术基础、应用场景以及它对未来的深…...

浏览器设置代理ip后不能上网?浏览器如何改ip地址教程
使用代理IP已成为许多用户保护隐私、绕过地域限制或进行网络测试的常见做法。当浏览器设置代理IP后无法上网时,通常是由于代理配置问题或代理服务器本身不可用。以下是排查和解决问题的详细步骤,以及更改浏览器IP的方法: 一、代理设置后无法上…...
Java应用OOM排查:面试通关“三部曲”心法
开篇点题:OOM——Java应用的“内存爆仓”警报 OOM (OutOfMemoryError) 是啥病?想象一下,你的Java应用程序是一个大仓库,内存就是仓库的存储空间。如果货物(程序运行时创建的对象)越来越多,超出了…...

R语言的专业网站top5推荐
李升伟 以下是学习R语言的五个顶级专业网站推荐,涵盖教程、社区、资源库和最新动态: 1.R项目官网 (r-project.org) R语言的官方网站,提供软件下载、文档、手册和常见问题解答。特别适合初学者和高级用户,是获取R语言核心资源的…...
设计模式系列(03):设计原则(二):DIP、ISP、LoD
本文为设计模式系列第3篇,聚焦依赖倒置、接口隔离、迪米特法则三大设计原则,系统梳理定义、实际业务场景、优缺点、最佳实践与常见误区,适合系统学习与团队协作。 目录 1. 引言2. 依赖倒置原则(DIP)3. 接口隔离原则(ISP)4. 迪米特法则(LoD)5. 常见误区与反例6. 最佳实…...
Java Socket编程完全指南:从基础到实战应用
Socket编程是构建网络应用的基石,Java通过java.net包提供了强大的Socket API。本文将深入解析Java Socket类的核心用法,涵盖TCP/UDP协议实现、多线程通信及性能优化技巧,助您快速掌握网络编程精髓。 一、Socket编程核心概念 1.1 网络通信模型…...

[训练和优化] 3. 模型优化
👋 你好!这里有实用干货与深度分享✨✨ 若有帮助,欢迎: 👍 点赞 | ⭐ 收藏 | 💬 评论 | ➕ 关注 ,解锁更多精彩! 📁 收藏专栏即可第一时间获取最新推送🔔…...
基于FPGA的车速检测系统仿真设计与实现
标题:基于FPGA的车速检测系统仿真设计与实现 内容:1.摘要 本文旨在设计并实现基于FPGA的车速检测系统仿真。随着汽车行业的快速发展,精确的车速检测对于车辆的安全性和性能评估至关重要。本研究采用FPGA作为核心处理单元,结合传感器数据采集与处理技术进…...

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