当前位置: 首页 > news >正文

当语言模型学会犯错和改正:搜索流(SoS)方法解析

引言

语言模型的能力日新月异,但它们在执行复杂规划任务时仍面临着明显的局限。这是因为大多数训练数据只展示了最终的"正确答案",而非解决问题的完整过程。想象一下,如果我们只能看到数学题的最终答案,而从不知道解题过程中的尝试、错误与修正,我们能真正学会解题吗?斯坦福大学、MIT和哈维穆德学院的研究团队在论文《Stream of Search (SoS): Learning to Search in Language》中提出了一个新颖观点:语言模型需要学习"如何搜索",包括探索、错误和回溯的完整过程。

研究问题:自回归模型的规划弱点

研究者指出,基于Transformer的自回归模型存在两个核心问题:

  1. 错误累积:单个错误可能导致后续步骤性能越来越差,形成雪球效应。
  2. 预见任务难度:模型难以预测其行动在多步之后的后果。

这两个问题源于语言模型缺乏搜索和回溯能力。虽然近期有研究将语言模型与符号搜索算法结合,但这些方法只是在推理阶段辅助语言模型,没有让语言模型真正学会搜索。研究团队认为,如果语言模型能在训练过程中学习搜索,它们可能能够发现更灵活的搜索策略,从而更好地应对复杂规划挑战。

创新方法:搜索流(Stream of Search)

研究团队提出了"搜索流"(SoS)方法,将搜索过程表示为序列化的文本字符串。这种表示保留了搜索的关键元素,包括:

  • 当前状态:正在探索的状态
  • 状态扩展:基于当前状态生成新状态
  • 移动决策:在搜索树中的移动
  • 回溯操作:放弃当前路径,返回之前的节点
  • 目标检查:验证是否达到目标状态

这种表示方法将搜索过程"翻译"成语言形式,使语言模型能够学习搜索的核心组件和策略。下面是SoS方法表示搜索的示例:

Current State: 50:[39, 66, 33, 13], Operations: []
Exploring Operation: 66-13=53, Resulting Numbers: [39, 33, 53]
Generated Node #0,0: 50:[39, 33, 53] Operation: 66-13=53
Moving to Node #0,0
Current State: 50:[39, 33, 53], Operations: ['66-13=53']

研究团队选择了"倒计时"(Countdown)游戏作为测试案例,这是一个需要将输入数字通过算术运算组合达到目标数字的问题。

数据集构建

研究者构建了一个多样化的搜索轨迹数据集:

  1. 搜索策略:结合12种不同的搜索策略

    • 深度优先搜索(DFS)
    • 广度优先搜索(BFS),带有不同的广度限制b∈[1,2,3,4,5]
    • 两种启发式函数:求和启发式和乘法启发式
  2. 数据集规模

    • 500,000个搜索轨迹
    • 其中约57%(285,000个)成功找到解决方案
    • 目标数字范围从10到100
  3. 测试集划分

    • 已见目标+新输入:评估泛化到新输入组合的能力
    • 未见目标+新输入:评估泛化到全新问题的能力

实验设计与结果

1. 搜索流vs最优路径训练

研究者比较了两种训练方法:

  • 最优路径(OP):仅在正确解决步骤上训练
  • 搜索流(SoS):在完整搜索过程(包括错误和回溯)上训练
训练方法已见目标+新输入未见目标+新输入
最优路径(OP)25.73%24.86%
搜索流(SoS)51.27%49.00%
符号算法平均53.92%51.65%

搜索流方法显著优于最优路径训练,接近专门设计的符号搜索算法的性能,尽管SoS模型面临更复杂的挑战:它必须同时学习状态转换和算术运算。

2. 策略改进方法评估

研究者使用两种策略改进方法进一步优化SoS模型:

  • STaR:自我训练推理器,通过筛选正确解决方案进行自我改进
  • APA:优势诱导策略对齐,使用强化学习优化搜索策略
模型已见目标+新输入未见目标+新输入
SoS基础51.27%49.00%
SoS+STaR55.59%53.34%
SoS+APA56.52%54.23%

两种策略改进方法都显著提高了模型性能,特别是APA方法。

3. 错误分析

对生成轨迹的错误类型进行详细分析:

模型算术错误格式错误探索错误其他错误
SoS基础2.25±0.100.01±0.000.01±0.000.02±0.01
SoS+STaR1.93±0.080.01±0.000.02±0.000.07±0.01
SoS+APA0.67±0.040.01±0.000.01±0.000.02±0.00

APA方法显著减少了算术错误,从每轨迹约2.3个错误减少到约0.7个错误。

4. 搜索效率分析

评估模型找到正确解决方案所需的平均搜索步骤:

模型已见目标+新输入未见目标+新输入
SoS基础75.04±0.6481.75±0.64
SoS+STaR66.18±0.6472.25±0.65
SoS+APA64.73±0.6570.85±0.66

策略改进显著提高了搜索效率,减少了达到目标所需的状态数量。

5. 解决新问题能力

评估改进模型解决原始符号算法无法解决问题的能力:

模型解决未解决问题比例解决困难问题比例
SoS基础28.9%1.5%
SoS+STaR36.2%3.9%
SoS+APA35.7%4.1%

改进后的模型能够解决约36%之前未解决的问题,展示了超越原始训练数据中符号算法的能力。

更广泛的意义与未来方向

这项研究的意义远超倒计时游戏问题,它揭示了语言模型学习复杂规划能力的新途径:

  1. 符号推理能力的内化:研究表明,结构化搜索、启发式评估和世界模型构建等符号推理的核心特征可以在序列建模范式内实现。

  2. 错误的价值:展示了错误和回溯对学习过程的重要性,这可能启发未来AI训练方法的设计。

  3. 自我改进的可能性:模型不仅学会了搜索,还能通过自我改进发现新的解决策略,这为AI系统的持续学习提供了新思路。

未来研究方向包括将SoS方法扩展到更复杂的现实问题、整合子目标和分层规划,以及探索搜索能力在不同领域间的迁移性。

结论

该研究揭示了一个关键洞见:要让AI真正掌握解决复杂问题的能力,我们不应只展示成功的最终结果,还需要展示整个过程中的探索、错误和修正。正如人类通过试错学习一样,语言模型也需要"犯错"和"改正"的经验来发展更强大的推理能力。这种方法不仅提高了模型在特定任务上的表现,还为解决自回归模型在规划方面的根本局限提供了新思路。


注:本文是对论文《Stream of Search (SoS): Learning to Search in Language》的解读。该论文由Kanishk Gandhi、Denise Lee、Gabriel Grand等人撰写,发表于2024年4月。

相关文章:

当语言模型学会犯错和改正:搜索流(SoS)方法解析

引言 语言模型的能力日新月异,但它们在执行复杂规划任务时仍面临着明显的局限。这是因为大多数训练数据只展示了最终的"正确答案",而非解决问题的完整过程。想象一下,如果我们只能看到数学题的最终答案,而从不知道解题…...

Centos7.9同步外网yum源至内网

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache yum repolist安装软件 yum install -y yum-utils createrepo # yum-utils包含re…...

OTA与boot loader

OTA指的是无线升级,通常用于更新设备的固件或软件,用户不用手动操作,非常方便。而bootloader是启动时加载操作系统的程序,负责硬件初始化和启动流程。 首先,OTA是如何通过bootloader工作的。OTA下载更新包后&#xff0…...

【目标检测】【Transformer】Swin Transformer

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows Swin Transformer:基于移位窗口的分层视觉Transformer CVPR 2021 0.论文摘要 本文提出了一种新型视觉Transformer——Swin Transformer,其可作为计算机视觉领域的…...

Class类的详细说明

Class类的详细说明 Class 类是Java反射机制的核心,每个Java类或接口在JVM中都有一个对应的 Class 对象,用于表示该类的元数据(如类名、方法、字段、构造器等)。以下是其核心知识点: 1. 获取Class对象的三种方式 方式…...

电商项目-品牌管理微服务开发

一、功能分析 品牌管理微服务包括: (1)查询全部列表数据 (2)根据ID查询实体数据 (3)增加 (4)修改 (5)删除 (6)分页…...

【Linux网络编程】Socket编程:协议理论入门

前言 首先,在学习Socket编程之前,我们应该了解关于网络的一些基本概念,虽然说没有这些理论概念并不影响编程,但是以后工作时扯扯皮还是有用的。而且,一个开发网络程序的人不知道网络领域的一些基本概念,这说…...

Redis——缓存雪崩、击穿、穿透

缓存雪崩 大量缓存数据在同一时间过期或者Redis故障宕机时,若此时有大量请求,都会直接访问到数据库,导致数据库压力倍增甚至宕机。 大量数据同时过期解决方案: 1、均匀设置过期时间: 设置过期时间的时候可以追加一…...

基于QT和FFmpeg实现自己的视频播放器FFMediaPlayer(一)——项目总览

在音视频开发的学习过程中,开发一款视频播放器是FFmpeg进阶的最好实战方法。本文将基于 QT 和 FFmpeg 着手实现自定义视频播放器 FFMediaPlayer,作为系列文章的开篇,我们先来整体了解项目的设计思路、架构与配置。 一、软件设计五大原则​ …...

panda机械臂的正逆运动学分析与仿真

文章目录 前言Panda机械臂的DH参数法建模正运动学逆运动学误差函数雅可比矩阵高斯-牛顿法(Gauss-Newton) 参考代码获取 前言 机械臂的位置运动学分析是机器人控制与轨迹规划的核心基础,其研究内容主要分为正运动学(Forward Kinem…...

网络切片:给用户体验做“私人定制”的秘密武器

网络切片:给用户体验做“私人定制”的秘密武器 咱们平时用手机上网、看视频、玩游戏,网络体验好不好,一半都靠运营商给的网络质量。可你有没有想过,为什么同一张网络,有的人能流畅刷视频,有的人却卡得要命?这其实就是网络资源分配的问题——不同应用、不同用户的需求差异…...

HarmonyOS NEXT~鸿蒙应用上架指南:HarmonyOS应用发布全流程解析

HarmonyOS NEXT~鸿蒙应用上架指南:HarmonyOS应用发布全流程解析 引言 随着华为鸿蒙操作系统(HarmonyOS)生态的快速发展,越来越多的开发者希望将自己的应用上架到鸿蒙应用市场。本文将详细介绍鸿蒙应用上架的全流程,帮助开发者顺…...

大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景 1.2 研究目的与意义 二、腰椎间盘突出症概述 2.1 定义与病因 2.2 症状与诊断方法 2.3 治疗方法概述 三、大模型技术原理与应用基础 3.1 大模型的基本原理 3.2 大模型在医疗领域的应用现状 3.3 用于腰椎间盘突出症预测的可行性分析 四、…...

【漫话机器学习系列】264.内距(又称四分位差)Interquartile Range

深入理解内距(Interquartile Range,IQR)——数据分析中的异常值利器 在日常的数据分析中,我们经常需要识别和处理异常值(Outliers),而内距(Interquartile Range,简称 IQR…...

高并发内存池|定长内存池的设计

二、定长内存池的设计 设计一个定长的内存池,这个内存池的定长在于,当剩余空间使用完毕后,总是开辟相同长度的新空间来使用。我们会使用到一个指针来切割划分大空间为小空间。大空间是内存池向系统申请的内存大小,而小空间是程序…...

STM32外设DA实战-DAC + DMA 输出正弦波

STM32外设DA实战-DAC DMA 输出正弦波模板 一,方法思路二,CubeMX配置三,代码实现1,生成正弦波查找表2,代码实现 一,方法思路 DAC 的一个常见应用是产生任意波形,比如平滑的正弦波。如果让 CPU …...

【React Fiber 架构详解】

React Fiber 架构详解 React Fiber 是 React 16 引入的核心协调算法重构,旨在解决传统同步渲染的性能瓶颈,提升用户体验。其核心在于将渲染任务拆解为可中断、优先级可控的增量单元,并通过链表数据结构优化调度流程。以下是其核心原理与工作机制的详细解析: 一、Fiber 的起…...

UDP的单播组播与广播

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、基于IP的传输层协议,它提供了简单的、不可靠的数据报服务。UDP支持三种主要的通信方式:单播、组播和广播。 1. UDP 单播(Unicast)…...

上集:一个前端的血泪复仇记 —— 静态部署的胜利

“我只是想部署一个小项目,结果干翻了Spring Security、Next.js 和 AI —— 三个加起来至少值我两天命。” 话说有一天,我朋友搭了一个小系统,前后端分离,说大不大,说小不小。后端Spring Boot 3.4.5,前端Ne…...

网络流量分析 | Zeek(上)

介绍 Zeek 是一个开源且商用的网络监控和流量分析工具,许多的运维人员将 Zeek 作为网络安全监控器(Network Security Monitor,NSM),以支持可疑或恶意活动的调查。在安全领域之外,Zeek 还可被用于各种流量分…...

Unity3D仿星露谷物语开发44之收集农作物

1、目标 在土地中挖掘后,洒下种子后逐渐成长,然后使用篮子收集成熟后的农作物,工具栏中也会相应地增加该农作物。 2、修改CropStandard的参数 Assets -> Prefabs -> Crop下的CropStandard,修改其Box Collider 2D的Size(Y…...

AUTOSAR图解==>AUTOSAR_SRS_WatchdogDriver

AUTOSAR 看门狗驱动 (Watchdog Driver) 详解 AUTOSAR基础软件模块之看门狗驱动技术分析 目录 概述 1.1 看门狗驱动的作用 1.2 适用范围架构设计 2.1 总体架构 2.2 内部结构 2.3 接口设计功能实现 3.1 初始化和模式切换 3.2 状态管理 3.3 外部看门狗支持配置参数 4.1 核心配置项…...

Fidder基本操作

1.抓取https请求 Fidder默认不能抓取https请求,我们必须通过相应的设置才能抓取https请求 1.选择tools下的option 2.选择https选项,并且勾选下面的选项 3.点击Actions导出信任证书到桌面(expert root certificate to desktop) 4.在浏览器中添加对应的证…...

在线教育本地化分发:代理IP实现区域访问控制与内容适配

在在线教育本地化分发场景中,代理IP通过地理精准识别、动态内容适配与合规访问控制,成为突破区域限制、提升用户体验的核心技术工具。以下是基于2025年技术实践的解决方案: 一、区域访问控制的核心机制 地理IP库匹配与白名单策略 通过代理IP的…...

JAVA的常见API文档(上)

游戏打包 注意API文档中的方法不需要记忆!! 了解之后如果需要可以查询API文档 对Math的方法总结: 运用刚学的Math方法加快代码的运行效率 可以减少循环次数 找规律: 发现因子有规律: 必定一个大于平方根,…...

【数据结构】_二叉树

1.二叉树链式结构的实现 1.1 前置说明 在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树&#x…...

ALIENTEK精英STM32F103开发板 实验0测试程序详解

#include "sys.h" #include "usart.h" #include "delay.h" //ALIENTEK精英STM32F103开发板 实验0 //新建工程 实验 //技术支持:www.openedv.com //广州市星翼电子科技有限公司 int main(void) { u8 t0; //见注释1 St…...

LeetCode 33. 搜索旋转排序数组:二分查找的边界艺术

文章目录 问题描述解决思路代码实现关键点解析1. 为什么用 nums[left] < nums[mid]&#xff1f;2. 示例分析案例 1&#xff1a;数组 [3, 1]&#xff0c;目标值 1案例 2&#xff1a;数组 [5]&#xff0c;目标值 5 边界条件处理1. 单元素数组2. 完全有序数组3. 严格递增与重复…...

Rust 学习笔记:关于 HashMap 的练习题

Rust 学习笔记&#xff1a;关于 HashMap 的练习题 Rust 学习笔记&#xff1a;关于 HashMap 的练习题以下代码能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;以下代码能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f; Rust 学习笔记&#xff1a;关于 …...

(头歌作业)—6.1 葡萄酒评论分析报告(project)

第1关&#xff1a;葡萄酒评论分析报告——国家列表和平均分 任务描述 本关任务&#xff1a;编写程序&#xff0c;多维度分析葡萄酒数据。 相关知识 葡萄酒评论分析报告描述 winemag-data.csv 文件 winemag-data.csv 包含 编号、国家、描述、评分、价格、省份 等 6列 和12974…...

下集:一条打包到底的静态部署之路

说完坑&#xff0c;再来讲正经操作。 这次我决定写得明明白白&#xff0c;清清楚楚&#xff0c;把那条“Spring Boot 扛着 Next.js 上线”的路子掰碎了揉细了告诉你。 无废话、无迷信、无AI幻觉。 第一步&#xff1a;Next.js 静态导出 项目根目录下的 next.config.js 要写得…...

多商户商城系统源码解析:开发直播电商APP的技术底层实战详解

随着直播电商的火爆&#xff0c;越来越多的创业者和企业都在寻求打造自己的多商户商城系统&#xff0c;以实现“人、货、场”三者的深度融合。然而&#xff0c;从一个简单的电商平台到一个功能完善的直播电商APP&#xff0c;其技术底层架构和实现过程并非一蹴而就。本文将从架构…...

每日Prompt:生成自拍照

提示词 帮我生成一张图片&#xff1a;图片风格为「人像摄影」&#xff0c;请你画一张及其平凡无奇的iPhone对镜自拍照&#xff0c;主角是穿着JK风格cos服的可爱女孩&#xff0c;在自己精心布置的可按风格的房间内的落地镜前用后置摄像头随手一拍的快照。照片开启了闪光灯&…...

LeetCode 热题 100_寻找重复数(100_287_中等_C++)(技巧)(暴力解法;哈希集合;二分查找)

LeetCode 热题 100_寻找重复数&#xff08;100_287_中等_C&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;暴力解法&#xff09;&#xff1a;思路二&#xff08;哈希集合&#xff09;&#xff1a;思路三&am…...

多模态学习(三)—— ROPE位置编码:从理论到实践

ROPE位置编码&#xff1a;从理论到LLaMA的实践 一、前言 ROPE&#xff08;Rotary Positional Embedding&#xff0c;旋转位置编码&#xff09;是一种通过旋转矩阵将位置信息融入Token Embedding的编码方法。相比传统Transformer的绝对位置编码&#xff0c;ROPE能更灵活地建模…...

Redis——过期删除策略和内存

过期删除策略 Redis可以对key设置过期时间&#xff0c;因此需要有相应的机制将已过期的键值对删除 设置了过期时间的key会存放在过期字典中&#xff0c;可以用presist命令取消key过期时间 过期字典存储在redisDb结构中&#xff1a; typedef struct redisDb {dict *dict; …...

Selenium无法定位元素的几种解决方案详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、frame/iframe表单嵌套 WebDriver只能在一个页面上对元素识别与定位&#xff0c;对于frame/iframe表单内嵌的页面元素无法直接定位。 解决方法&#xff1a; …...

开源项目实战学习之YOLO11:12.3 ultralytics-models-sam-encoders.py源码分析

👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-encoders.pyblocks.py: 定义模型中的各…...

Bitmap原理及Hive去重方式对比

1. 什么是 Bitmap&#xff1f; Bitmap&#xff08;位图&#xff09;是一种用位&#xff08;bit&#xff09;来表示数据集合的数据结构。每个位代表一个元素是否存在&#xff0c;比如&#xff1a; 一个长度为N的bitmap&#xff0c;每一位对应一个元素的状态&#xff08;0或1&a…...

力扣-比特位计数(统计一个数二进制下1的个数)

下面是题面 1.用c的内置函数__builtin_popcount&#xff08;&#xff09; 语法&#xff1a;__builtin_popcount&#xff08;int x&#xff09;&#xff0c;函数会返回一个二进制下x所含的1的个数 2.直接数位枚举 这是最慢也是暴力做法&#xff0c;写法也很简单 用一个while循环…...

开源项目实战学习之YOLO11:12.2 ultralytics-models-sam-decoders.py源码分析

👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-decoders.pyblocks.py: 定义模型中的各…...

Python训练营打卡Day28

浙大疏锦行 DAY 28 类的定义和方法 知识点回顾&#xff1a; 1.类的定义 2.pass占位语句 3.类的初始化方法 4.类的普通方法 5.类的继承&#xff1a;属性的继承、方法的继承 作业 题目1&#xff1a;定义圆&#xff08;Circle&#xff09;类 要求&#xff1a; 1.包含属性&#x…...

【前端基础】HTML元素隐藏的四个方法(display设置为none、visibikity设置为hidden、rgba设置颜色、opacity设置透明度)

HTML元素隐藏的四个方法 1、display设置为none 元素不显示出来。不占位置&#xff0c;也没有任何空间。就不存在一样。 2、visibility设置为hidden 默认&#xff1a;visible。元素可见设置为hidden&#xff1a;元素不可见&#xff0c;但是会占据这个元素应该占用的空间。 3、…...

STM32中的DMA

DMA介绍 什么是DMA? DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于内存…...

小型气象站应用之鱼塘养殖方案

概述 "看天吃饭"&#xff0c;在农村经常听到这句话&#xff0c;鱼塘也不例外。天气的急剧变化&#xff0c;或连续的不利天气都有可能造成鱼类"浮头"&#xff0c;甚至"翻肚子"&#xff0c;更甚至"翻塘"&#xff0c;一年白忙活了。 鱼塘…...

Makefile变量冲突与包含关系解析

Nuttx makefile每层独立&#xff0c;除非显示的通过include的方式包含。 Makefile调试技巧 打印变量 $(info CSRCS$(CSRCS))查看变量赋值过程 make --debugv在 Makefile 中&#xff0c;变量的作用域和可见性取决于 包含关系&#xff08;include&#xff09; 和 递归调用&…...

2025/517学习

对离群值怎么操作。这个就是拟合操作的。用更弯曲的曲线去拟合&#xff0c;如常见函数log 多元回归和单元回归 如题&#xff0c;如果我有多个自变量&#xff0c;来对一个因变量进行OLS回归&#xff0c;有没有operator可以做到&#xff1f;(ts_regression似乎只支持一个…...

浅谈前端架构设计与工程化

引言 在当今快速发展的Web开发领域&#xff0c;前端已经从简单的页面展示演变为复杂的应用程序开发。随着项目规模的扩大和团队协作的需求增加&#xff0c;良好的前端架构设计和工程化实践变得至关重要。本文将探讨如何构建可维护、可扩展的前端架构&#xff0c;并介绍现代前端…...

JMeter 教程:编写 POST 请求脚本访问百度

目录 ✅ 教程目的 &#x1f6e0;️ 环境要求 &#x1f4c4; 实操步骤 第一步&#xff1a;启动 JMeter 第二步&#xff1a;添加测试计划和线程组 1.右键左侧 Test Plan&#xff08;测试计划&#xff09; 2.选择 Add → Threads (Users) → Thread Group&#xff08;线程组…...

Typescript学习教程,从入门到精通,TypeScript 函数语法知识点及案例代码(5)

TypeScript 函数语法知识点及案例代码 TypeScript 提供了丰富的函数语法特性&#xff0c;使得函数定义更加灵活和强大。以下将详细介绍 TypeScript 中函数的相关语法&#xff0c;包括函数定义、可选参数、默认参数、剩余参数、重载函数、递归函数、匿名函数、箭头函数以及回调…...