LLM*:路径规划的大型语言模型增强增量启发式搜索
路径规划是机器人技术和自主导航中的一个基本科学问题,需要从起点到目的地推导出有效的路线,同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性,但随着状态空间的增长,计算和内存效率会严重降低。相反,大型语言模型 (LLMs) 通过上下文理解在更广泛的环境分析中表现出色,提供对环境的全局洞察。然而,它们在详细的空间和时间推理方面存在不足,通常会导致无效或低效的路线。在这项工作中,我们提出了LLM*,一种新的基于 LLM路线规划方法,它协同地结合了 A* 的精确寻路能力与 LLMs。这种混合方法旨在提高时间和空间复杂性方面的寻路效率,同时保持路径有效性的完整性,尤其是在大规模场景中。通过整合两种方法的优势,LLM* 解决了传统算法的计算和内存限制,而不会影响有效寻路所需的有效性。
图 1: 寻路过程中 LLM。LLM* 利用 LLMs作为路径点来指导搜索过程,显著减少了访问状态的数量,从而导致操作和存储使用量低于 A*
路径规划是确定从初始点到目的地点的路径的计算过程,该路径符合特定标准,例如避开障碍物、最小化行驶距离或时间以及满足其他约束 LaValle (2006);Hart et al. (1968b);Karaman 和 Frazzoli (2011)。这个问题在多个领域都至关重要,例如机器人、自动驾驶汽车导航、工业自动化和虚拟环境导航,因为它直接影响操作系统的效率、安全性和可行性Thrun et al. (2005);Karaman 和 Frazzoli (2011);Fiorini 和 Shiller (1998);Fox 等 人 (1997)。
现有的路径规划算法能够有效地完成规划任务并确保其路径的有效性。然而,随着环境和地图的扩大,像 A* 及其变体这样的算法 Hart et al. (1968b);Korf 等 人(2001 年);Harabor 和 Grastien (2011);Jansen 和 Buro (2007) 遇到了计算和内存需求的指数级增长。发生这种情况是因为寻路过程可能会变得次优(参见图 1),在这种情况下,算法可能会花费不必要的精力来探索不太相关的区域,从而导致随着地图大小的扩大,时间复杂度呈指数级增加。
与此同时,大型语言模型(LLMs)在各种规划任务中取得了显着的里程碑 Naveed 等 人(2023 年);Yin 等 人(2023 年);Chen 等 人 (2023a);Shinn 等 人(2024 年);Dou 等 人 (2024)。这些模型展示了对长期上下文输入进行处理和推理的能力,以提供有价值的全局见解,以反映他们对环境的理解,例如识别障碍、代理和目标的相对位置。但是,他们难以完成复杂的长期规划和复杂的空间推理任务,例如基于格网的路径规划。LLMs 通常会生成无效或未接地的路径,导致路径不完整或发生冲突,表明它们在处理详细空间复杂性的能力方面存在差距 Aghzal et al. (2023)。
在这项工作中,我们提出了 LLM*,一种新的基于 LLM 的路线规划方法,它将传统的 A* 算法与来自大型语言模型的全局洞察力协同起来。如图 1 所示。1,这种混合方法利用LLM 生成的航点来指导路径搜索过程,从而显著降低计算和内存成本。此外,通过将 A* 的标准 L2 基于距离的启发式方法与从这些航点派生的新启发式值集成,LLM* 解决了 LLM,从而确保输出路径的有效性。
我们在各种环境中进行了广泛的实验,以比较 A* 和 LLM* (将 LLAMA3 与少数镜头提示集成)的性能。如图 3 所示,A* 在计算操作和存储需求方面呈指数级增长,环境规模呈线性增加。相比之下,LLM* 显示出近乎线性的增长模式,表明具有卓越的可扩展性。这表明 LLM* 在计算和内存方面都明显更高,使其更适合更大的环境。此外,我们的主要实验结果(如表 1 所示)表明,LLM* 不仅在可扩展性方面表现出色,而且在基线计算和内存效率方面也优于 A*。LLM* 与 A* 相比,操作和存储比率显著降低,平均需要的操作和存储不到 A* 寻路过程所需操作和存储的一半左右,从而为大规模路径规划提供了强大而高效的解决方案。
阿拉伯数字相关工作
路径规划中的传统算法。
Pathfinding 在人工智能、机器人技术和计算机图形学中一直发挥着关键作用,开发了许多算法来应对各种挑战。在基础方法中,由 Hart、Nilsson 和 Raphael 于 1968 年引入的 A* 算法因其使用启发式方法来估计从当前节点到目标节点的成本而脱颖而出,平衡了贪婪的最佳优先搜索与均匀成本搜索以实现有效的寻路Hart et al. (1968a)。同样,1984 年提出的 Pearl 最佳优先搜索 (BFS) 根据启发式值对节点进行优先级排序,但由于它专注于最有前途的节点 Pearl (1984) ,因此可能导致路径更长。
A* 的扩展旨在提高其效率和适应性。Korf 于 1985 年提出的迭代深化 A* (IDA*) 将深度优先搜索与 A* 的启发式方法相结合,创造了一种内存高效的方法 Korf (1985)。Korf 还在 1990 年推出了实时学习 A* (LRTA*),将实时学习与动态更新启发式值相结合,从而提高了在不断变化的环境中的性能 Korf (1990)。Russell 于 1992 年提出的简化内存有界 A* (SMA*) 通过选择性地忘记不太有希望的路径来解决内存限制问题,使其适用于资源有限的应用程序 Russell (1992)。
进一步的增强包括 Stentz 1994 年的动态 A* (D*),它随着环境的变化重新计算路径,证明在未知或不断发展的地形中导航有效 Stentz (1994)。Koenig 等人于 2004 年推出的终身规划 A* (LPA*) 在动态和大规模环境中逐步更新路径 Koenig 等 人 (2004)。Harabor 和 Grastien 于 2011 年提出的跳跃点搜索 (JPS) 通过识别关键的“跳跃点”来优化基于网格的地图的 A*,从而减少扩展节点的数量Harabor 和 Grastien (2011)。Nash 等人于 2007 年提出的 Theta* 允许在节点之间进行视线检查,从而产生更直接的路径 Nash 等 人 (2007)。
分层方法,例如 Holte 等人 1996 年的分层 A* (HA*),通过抽象层次结构将大型寻路问题分解为较小的子问题,从而降低了计算复杂性 Holte 等 人 (1996)。Botea 等人于 2004 年推出的分层路径查找 A* (HPA*) 改进了抽象级别之间的过渡,以实现高效的大地图路径查找 Botea 等 人(2004 年)。
专业方法也有很大贡献。Demyen 和 Buro 于 2006 年提出的基于三角测量的寻路 (TRA*) 使用三角测量来导航多边形环境,适用于非基于网格的设置 Demyen 和 Buro (2006)。Koch 于 2011 年推出的特定于网格的分层路径查找 (GHPA*) 通过集成分层和特定于网格的优化来优化网格映射寻路 Koch (2011)。
路径规划中的大型语言模型。
大型语言模型 (LLMs) 最近在自然语言处理任务和其他领域取得了显著的成功 Naveed et al. (2023)。Shridhar 等 人 (2020b);Song 等 人(2023 年);Shah 等 人(2023 年)探讨了高级规划中的 LLMs,强调了长期规划和空间推理方面的挑战 Aghzal 等 人(2023 年)。我们的研究重点转移到连续环境,与基于网格的地图相比,它提供了更逼真的设置。连续空间更符合现实世界的条件,为人类交互提供更自然的界面,并允许更高的空间推理精度。
LLMs 在空间推理方面表现出不同的熟练程度 Ilharco et al. (2020);帕特尔和帕夫利克 (2021);Bubeck 等 人(2023 年);Abdou 等 人(2021 年);Yang et al. (2023b) 在空间推理和规划方面面临局限性 Agrawal (2023);Xie et al. (2023);Wu 等 人(2023 年)。我们引入了连续环境中路径规划的基准,集成了空间和时间推理。之前的基准 Côté 等 人(2019 年);Shridhar 等 人(2020a);Ruis 等 人(2020 年);Wu et al. (2021) 经常忽视时间规划方面。我们的研究进一步评估了机器人运动和路径规划环境中的 LLMs解决了端到端规划中的局限性 Liu et al. (2023);Chen 等 人 (2023b);Xie et al. (2023);Silver 等 人(2022 年)。
了解高级别和低级别规划之间的相互作用至关重要 Latif (2024);Yang 等 人(2023a);Ding 等 人(2024 年);周 et al. (2024)。高级规划涉及战略目标,而低级规划侧重于详细的任务执行。我们的研究探讨了 LLMs 在纠正低级规划错误方面的适应性,确保动态条件下的弹性。
相关文章:
LLM*:路径规划的大型语言模型增强增量启发式搜索
路径规划是机器人技术和自主导航中的一个基本科学问题,需要从起点到目的地推导出有效的路线,同时避开障碍物。A* 及其变体等传统算法能够确保路径有效性,但随着状态空间的增长,计算和内存效率会严重降低。相反,大型语言…...
UE5 MakeSlateBrush 节点的作用
在 Unreal Engine 5 (UE5) 中,MakeSlateBrush 节点是用于 创建或设置一个 Slate Brush 的节点。Slate 是 Unreal Engine 中的 UI 框架,用于构建编辑器界面以及游戏中的用户界面(UI)。Slate Brush 是 Slate UI 中的一种资源类型&am…...
机载视频流回传+编解码方案
无线网络,低带宽场景。不能直接转发ROS raw image(10MB/s),而要压缩(编码)后再传输。可以用rtsp的udp传输或者直接传输话题,压缩方法有theora(ROS image_transport默认支持ÿ…...
小程序 - 婚礼邀请函
小程序页面和样式练习 - 婚礼邀请函小程序开发笔记 目录 婚礼邀请函 准备工作 加载静态资源 项目初始化 标签栏的配置 各页面导航栏标题配置 全局导航栏样式配置 公共样式的编写 项目内容 邀请函页面内容 邀请函页面样式 照片页面内容 照片墙页面样式 美好时光页…...
命令行使用ssh隧道连接远程mysql
本地电脑A 跳板机B 主机2.2.2.2 用户名 B ssh端口号22 登录密码bbb 远程mysql C 地址 3.3.3.3 端口号3306 用户名C 密码ccc A需要通过跳板机B才能访问C; navicat中配置ssh可以实现在A电脑上访问C 如何实现本地代码中访问C呢? # 假设本地使…...
深度学习:完整的模型训练流程
深度学习:完整的模型训练流程 为了确保我们提供一个彻底和清晰的指导,让我们深入分析在model.py和train.py文件中定义的模型训练和验证流程。以下部分将详细讨论模型结构的定义、数据的加载与预处理、训练参数的配置、训练与测试循环,以及模…...
【数据结构】ArrayList与顺序表
ArrayList与顺序表 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 杨辉三角5.2 简单的洗牌算法 6. ArrayList的问题及思考 【本节目标】 线性表顺序表ArrayLis…...
如何使用 python 中 pandas 进行数据分析?
使用Python中的pandas进行数据分析主要有以下几个步骤: 导入pandas库和数据文件 首先需要导入pandas库和数据文件,可以使用pandas的read_csv()函数读取CSV格式的数据文件,并将其存储为DataFrame格式。 pythonCopy code import pandas as p…...
WordPress文章目录插件,LuckyWP Table of Contents自动生成文章插件
文章带目录不能帮助用户快速获取信息,也能让页面内容更具条例,更加符合搜索引擎收录规范。今天给大家推荐一款免费好用的WordPress文章目录插件LuckyWP Table of Contents。LuckyWP Table of Contents 是一个WordPress插件,它允许你在博客帖…...
Qwen2.5-7B大模型微调记录
Qwen2.5-7B大模型微调记录 研究需要,需要搞一个大模型出来,没有太多的时间自己训练,准备用现成的开源大模型,然后结合研究方向进行微调 前前后后折腾大半个月,总算做完了第一个微调的大模型,模型基于阿里…...
TCP三次握手和四次挥手
三次握手:表示这客户与服务器之间的连接确定。 第一次:由客户端发出连接请求到服务器,服务器收到后可以确定客户的发送与自身的接收没问题 第二次:再由服务器回话个客户,让客户知道自己的发送与接收没问题,这时服务器还不知自己的…...
[Maven]3.5.3配置
MAVEN本地仓库配置: 1.conf 2.settings.xml 3.找到本地仓库配置目录 4.填写路径 5.镜像仓库...
68000汇编实战01-编程基础
文章目录 简介产生背景应用领域 语言学习EASy68K帮助文档IDE使用 编程语言commentslabels开始标签指令标签位置标签 opcode 操作码常用操作码数据传送算术运算逻辑运算控制流分支跳转地址跳转子程序跳转 位操作比较堆栈操作 IO操作码其他操作码 directives 指令DC指令EQU 指令S…...
常见的概念 及 分布式系统的演变过程
文章目录 一. 概念解释1. 应用(Application)/ 系统(System)2. 模块(Module)/ 组件(Component)3. 分布式(Distributed)4. 集群(Cluster)…...
torch.is_nonzero(input)
torch.is_nonzero(input) input: 输入张量 若输入是 不等于零的单元素张量 则返回True,否则返回False 不等于零的单元素张量:torch.tensor([0.]) 或 torch.tensor([0]) 或 torch.tensor([False])单元素张量: 只有一个数 的张量 import torch print(t…...
爬虫开发(5)如何写一个CSDN热门榜爬虫小程序
笔者 綦枫Maple 的其他作品,欢迎点击查阅哦~: 📚Jmeter性能测试大全:Jmeter性能测试大全系列教程!持续更新中! 📚UI自动化测试系列: SeleniumJava自动化测试系列教程❤ 📚…...
Rust 组织管理
Rust 组织管理 Rust 是一种系统编程语言,以其安全性、并发性和性能而闻名。随着 Rust 社区的不断壮大,有效的组织管理变得至关重要。本文将探讨 Rust 社区的组织结构、项目管理、社区参与和未来发展方向。 Rust 社区的组织结构 Rust 社区采用了一种去中心化的组织结构。核…...
谈谈微服务的常用组件
由于微服务给系统开发带来了一些问题和挑战,如服务调用的复杂性、分布式事务的处理、服务的动态管理等,为了更好地解决这些问题和挑战,各种微服务治理的组件应运而生,充当微服务架构的基石和支撑,常用组件如下表&#…...
Android11.0默认壁纸缩放
获取壁纸缩放值的代码 //in com.android.server.wm.WallpaperController private final float mMaxWallpaperScale; //construct method WallpaperController(WindowManagerService service, DisplayContent displayContent) {......mMaxWallpaperScale service.mContext.ge…...
git 本地同步远端分支
一、关联远程仓库 本地仓库关联远端仓库 git remote add origin https://github.com/user/repository.git 二、获取远程分支信息 获取远程仓库的最新分支信息 git fetch origin 三、创建或切换到本地分支以跟踪远程分支 1. 创建分支 创建分支并关联到远端分支 git bra…...
数字IC后端设计实现之分段长clock tree经典案例
最近发现很多读者问到分段长clock tree的做法,小编今天给大家分享几个SoC芯片中复杂时钟结构设计的分段长clock tree的应用案例。希望对各位的学习和工作有所助益。 数字后端设计实现之时钟树综合实践篇 数字IC后端实现专家都具备哪些技能?(…...
矩阵重新排列——rot90函数
通过 r o t 90 rot90 rot90函数可以将矩阵进行旋转 用法: r o t 90 ( a , k ) rot90(a,k) rot90(a,k)将矩阵 a a a按逆时针方向旋转 k 9 0 ∘ k\times90^\circ k90∘...
深入解析音视频流媒体SIP协议交互过程
一、引言 在音视频流媒体传输过程中,SIP(Session Initiation Protocol)协议发挥着举足轻重的作用。本文将详细全面地介绍音视频流媒体传输中的SIP协议,包括其基本概念、交互过程、关键信令以及应用场景 二、SIP协议基本概念 1.…...
【C++】深入解析 cin 和 cout:理解区分输入输出流运算符
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯cin 和 cout 简介💯cin >> 与 cout << 的流运算符💯理解流运算符方向的四种方法1. 符号方向对应数据流动的方向2. 形象比喻3. 记住公式…...
java介绍
Java是一种广泛应用的高级编程语言,具有以下特点和应用场景: 语言特性 简单易学 Java语法相对简洁,去除了一些复杂的指针操作等,使得程序员能够更专注于业务逻辑的实现。例如,Java使用自动内存管理(垃圾回…...
1-深度学习干货总结(持续更新)
机器学习核心组件 可以用来学习的数据(data); 如何转换数据的模型(model); 一个目标函数(objective function),用来量化模型的有效性; 调整模型参数以优化…...
《C++搭建神经网络基石:开启智能编程新征程》
在人工智能的璀璨星空中,神经网络无疑是最为耀眼的星座之一。而 C以其卓越的性能和高效的执行效率,成为构建神经网络模型的有力武器。今天,就让我们一同探索如何使用 C构建一个基础的神经网络模型,踏上智能编程的奇妙旅程。 一、…...
小程序 - 本地生活
小程序页面和样式练习 - 本地生活小程序开发笔记 目录 本地生活 准备工作 加载图片素材 页面开发 页面样式开发 功能实现截图 总结 本地生活 本地生活”微信小程序是一个介绍本地美食、装修、工作等信息的微信小程序,该微信小程序的首页包含轮播图区域和九宫…...
docker的joinsunsoft/docker.ui修改密码【未解决】
docker的joinsunsoft/docker.ui修改密码 前言 这个挺遗憾的,个人能力不足。想修改密码是不可能了。 因为,系统的密码加密规则不知道。 目前了解到的内容是: 地址是:https://hub.docker.com/r/joinsunsoft/docker.ui服务是用go语…...
pyspark实现基于协同过滤的电影推荐系统
最近在学一门大数据的课,课程要求很开放,任意做一个大数据相关的项目即可,不知道为什么我就想到推荐算法,一直到着手要做之前还没有新的更好的来代替,那就这个吧。 推荐算法 推荐算法的发展由来已久,但和…...
【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)
更新 0.0.1(2024/11/26): 1.解决了内建蓝牙无法识别、“steamVR 蓝牙不可用” 的解决方案 2.解决了 tracker 虽然建立了连接但是在 steamVR 界面上看不到的问题 3.解决了 VIVE 基站1.0 无法被蓝牙识别 && 无法被 steamVR 搜索到 &…...
C++11
C11 C11简介一.列表初始化{ }initializer_list 二.一些关键字三.右值引用和移动语义(重要)完美转发移动构造和移动赋值重载 四.小知识类成员变量初始化 五.可变参数模板六.lambda表达式(又称匿名函数)(重要)…...
MySQL - 表的增删查改
文章目录 1.新增1.1语法1.2单行插入1.3多行插入1.4插入后更新1.5替换 2.查找2.1语法2.2使用 3.修改3.1语法3.2使用 4.删除4.1语法4.2使用4.3截断表 5.插入查询结果5.1语法5.2使用 1.新增 1.1语法 INSERT [INTO] table_name [(column1, column2, ...)] VALUES (value1, value2…...
Vue3 调用子组件的方法和变量
1. 通过 ref 调用子组件的方法和变量 Vue 3 引入了 ref,你可以通过 ref 获取子组件实例,并调用其方法或访问其数据。 例子 子组件 (Child.vue) <template><div><p>{{ message }}</p><button click"updateMessage&qu…...
蓝桥杯嵌入式再学习(4)led的点亮
led的点亮的话先在cubemx里点一下配置 以下是对应的代码...
CentOS7安装nvm
CentOS7安装nvm 在 CentOS 7 上安装 NVM(Node Version Manager)可以通过以下步骤进行。NVM 是一个用于管理多个 Node.js 版本的工具,允许你在不同的项目中使用不同的 Node.js 版本。 步骤 1:更新系统 首先,确保你的…...
2024年工信部大数据分析师证书报考条件是怎样的?有什么用
大数据分析师,乃是这样一类专业人才,他们凭借着先进且高效的数据分析技术以及各类实用工具,对规模庞大、纷繁复杂的海量数据展开全面而细致的清洗、处理、分析以及解读工作。其工作的核心目标在于为企业的决策制定提供有力依据,推…...
天锐绿盾加密软件与Ping32联合打造企业级安全保护系统,确保敏感数据防泄密与加密管理
随着信息技术的飞速发展,企业在日常经营过程中产生和处理的大量敏感数据,面临着越来越复杂的安全威胁。尤其是在金融、医疗、法律等领域,数据泄漏不仅会造成企业巨大的经济损失,还可能破坏企业的信誉和客户信任。因此,…...
代码随想录算法训练营第六十天|Day60 图论
Bellman_ford 队列优化算法(又名SPFA) https://www.programmercarl.com/kamacoder/0094.%E5%9F%8E%E5%B8%82%E9%97%B4%E8%B4%A7%E7%89%A9%E8%BF%90%E8%BE%93I-SPFA.html 本题我们来系统讲解 Bellman_ford 队列优化算法 ,也叫SPFA算法…...
Web登录页面设计
记录第一个前端界面,暑假期间写的,用了Lottie动画和canvas标签做动画,登录和注册也连接了数据库。 图片是从网上找的,如有侵权私信我删除,谢谢啦~...
Rust标准库中集合类型用法详解
文章目录 Vec<T> 动态数组创建动态数组增加删除元素访问元素遍历Vec控制容量修改元素元素排序 HashMap<K, V>哈希表创建 HashMap插入和更新元素访问元素删除元素遍历HashMap使用默认值 HashSet<T>哈希集合创建 HashSet插入和删除元素查找元素遍历HashSet使用…...
软件测试面试之数据库部分
1.取第 4 到5 条记录 --按ID从小到大,查询第到第条数据 select top4 *from(select top5 * from qicheorder by ID asc ) as TA order by ID desc--按ID从小到大,查询第到第条数据 select top 2*from(select top 4 *from qicheorder by ID asc )as TA o…...
Gitee markdown 使用方法(持续更新)
IPKISS 获取仿真器件的名称 引言正文标题换行第一种------在行末尾手动键入两个空格第二种------额外换行一次,即两行中间留一个空行 缩进与反缩进代码块行内代码添加图片添加超链接 加粗,倾斜,加粗倾斜 引言 有些保密性的文件或者教程&…...
水库大坝安全监测之量水堰计应用
量水堰计是水库大坝安全监测系统中的一种关键设备,主要用于测量水库水位、流量等水力参数。以下是量水堰计在水库大坝安全监测中的应用及注意事项: 一、量水堰计的工作原理 量水堰计是一种专门用于测量水流流量的仪器,其工作原理主要基于水流…...
Mouser EDI 需求分析
为了提高供应链的自动化水平,贸泽电子(Mouser Electronics)使用EDI技术更好地管理与其全球合作伙伴之间的业务数据往来。对接Mouser EDI,对于企业而言,需要在本地部署EDI软件,建立与Mouser之间的EDI连接通道…...
51单片机快速入门之中断的应用 2024/11/23 串口中断
51单片机快速入门之中断的应用 基本函数: void T0(void) interrupt 1 using 1 { 这里放入中断后需要做的操作 } void T0(void): 这是一个函数声明,表明函数 T0 不接受任何参数,并且不返回任何值。 interrupt 1: 这是关键字和参…...
电脑显示器拔插DVI线后副屏不显示
问题:台式机副屏显示器插拔DVI线后副屏无法检测到,不显示 其他现象:电脑设备管理器“显示适配器”中只有独显,未显示集显。 尝试方法: 1、 重新插拔并拧紧DVI线、更换DVI线、将DVI线替换为VGA线、调换DVI线及VGA线两…...
git分支管理:release分支内容重置为master
背景:公司项目存在release和master分支,一直是release合并到master分支;由于历史总总原因导致release和master分支内容相差很大。某个夜晚,leader悄悄改了master分支的内容(不走合并流程),然后通…...
python之poetry 安装、创建项目、修改源、创建虚拟环境等操作
CentOs7.5下安装python3,修改源,创建虚拟环境 python 虚拟环境的搭建 使用pyenv 管理多个版本的python 安装 pyenv curl https://pyenv.run | bash pyenv install 3.10 pyenv local 3.10 # 当前项目激活Python3.10 pyenv global 3.10 # 当前全部激活P…...
一个高度可扩展的 Golang ORM 库【GORM】
GORM 是一个功能强大的 Golang 对象关系映射(ORM)库,它提供了简洁的接口和全面的功能,帮助开发者更方便地操作数据库。 1. 完整的 ORM 功能 • 支持常见的关系模型: • Has One(一对一) • …...