大模型应用的未来一定是Agent,这一点已经成为行业不争的共识。但如何快速深入学习Agent,却仍没有一个很好的路径。
Agent的关键点在于“环境”,正如huggingface给出的一个定义:
智能体是一个系统,它利用人工智能模型与环境交互,以实现用户定义的目标。它结合推理、规划和动作执行(通常通过外部工具)来完成任务。
图 1 理解环境是Agent应用的关键
目前大部分的Agent基础教程,都是常见的查天气、操作浏览器、写个PPT等老套件,这样电脑上想象出来的场景,让人很难深入理解Agent“环境”的作用,正如一些研究人员所说的,“GPT'读遍'了互联网,却从未喝过一口红酒、摔过一只杯子”。而最真实的“环境”,恰恰是地球online,使用机器人/狗、无人机/车学习Agent无疑是最好的,但对学习入门Agent而言,成本又有点高了。
而模拟仿真系统,则构建了连接“虚拟”和"现实"的桥梁,在很大程度上解决了上面两个问题。一方面,典型的如Nvidia的 Cosmos 世界模型,在各类设备动力学特性、环境天气等方面都能做到“仿真如真”,以解决“环境”的真实性问题。而另一方面,仿真系统也是一个软件,和大部分3A游戏配置要求差不多,成本基本也不是问题。
我们就使用了微软的Airsim无人机模拟仿真系统,基于UE设计,其无人机控制等都支持虚实结合,也就是在仿真系统中设计的各类算法,可以无缝迁移到真实无人机中。当然,目前还有CARLA 无人车模拟,ISAAC机器人模拟等。相对于车简单的2自由度,以及机器人的20多个,6个自由度的无人机,显然更适合作为Agent学习的载体。
图2 AirSim无人机模拟仿真系统
另一方面,"低空经济"作为一个全新的经济模式,正在快速发展。现在学习“大模型+无人机”,就相当于1760年学习"蒸汽机+火车",或者1870年学习“内燃机驱动的汽车应用开发”。
可以说,基于无人机模拟学习大模型,既可以深度了解Agent,又能在下一个经济浪潮中占得先机,一举两得。这种背景下,作为一个无人机团队,本着Do and share精神,我们就结合一些项目实践和SOTA论文结果,做了《大模型驱动的智能无人机应用开发》课程。考虑到火山方舟平台的稳定性好、生态丰富,特别在多模态和Function Call方面实测的优异表现,课程大模型使用的大部分都是方舟平台的。课程内容框架如下所示:
图 3 大模型+无人机 Agent学习框架
课程属于Agent应用基础类,仅需略懂Python就能学习。教程代码和资料已全部开源,具体见文末链接。
2.1 提示词工程:豆包语言大模型应用
动图 1 基础提示词应用
提示词工程是大模型应用的基础,目前绝大多数大模型的应用,都是基于提示词模版等技术开发的。
在无人机领域的应用,可以想象为,像教一个大学生那样去教大模型,学飞无人机,流程也是一样的:
首先告诉学生/大模型,他的工作职责:
"""
你是一名助手,正在帮助我使用AirSim无人机模拟器。
当我要求你做某事时,你应该给我使用AirSim完成任务所需的Python代码,然后解释该代码的作用。
您只能使用我为您定义的函数。
您可以使用math和numpy等库中的简单Python函数。
"""
这就是提示词工程中的system/系统消息。
然后呢,告诉学生,无人机飞行的基本知识:
"""
以下是您可以用来命令无人机的一些功能。
aw.takeoff() - 起飞无人机。
aw.land() - 无人机着陆。
aw.get_drone_position() - 以与 XYZ 坐标相对应的 3 个浮点数的列表形式返回无人机的当前位置。
aw.fly_to([x, y, z]) - 将无人机飞到指定的位置,该位置由对应于 X、Y、Z 坐标的三个参数列表指定。这里X,Y,Z是世界坐标系的坐标。下同
aw.set_yaw(yaw) - 将无人机的偏航设置为指定值(以度为单位)。
aw.get_yaw() - 返回无人机当前的偏航角(以度为单位)。
aw.get_position(object_name):采用字符串作为输入,指示感兴趣对象的名称,并返回 3 个浮点数的列表,指示其 X、Y、Z 坐标。
"""
至此,学习水平一般的"大模型”呢,就能写出代码控制无人机起飞、降落了,如上面动图1所示。
而水平NB的大学生/大模型,因为知识面丰富,学习能力强,仅根据前面这些知识点,就能完成风力发电机检测任务了,如动图2所示:
动图 2 复杂提示词指令
我们实测方舟的豆包大语言模型生成无人机代码效果是最好的。此外,方舟平台还提供兼容OpenAI的API,大家也可以自行切换方舟中的DeepSeek等大模型使用测试。
2.2 视觉感知:豆包多模态大模型应用
动图3 视觉理解
当大模型拥有了基本的无人机飞行知识后,如果能够进一步的“眼观六路”,就能形成自己的OPPA(Observation--Perception--Planning--Action)循环。也就是有了自主感知,就能自主决策。
这里使用的也是方舟的豆包多模态大模型,对无人机的应用而言,只是教会了其一个新的技能:
"""
watch() :获得摄像头看到的主要目标列表
"""
有了这个能力,无人机大模型的应用,就能完成
“我渴了,请帮我找一些喝的”
这样的任务。具体如动态3所示。
进一步的,用多模态大模型进行图片理解后,而如果需要对目标干点啥,好比飞过去,丢个石头过去等,则需要获得目标的位置,这个就是无人机常用的目标检测功能,俗称画框/Box。
图4 DINO万物识别
这里使用的为GroundingDINO识别大模型,和Yolo V5等经典识别大模型不同在于,这些图片识别大模型为“开域”识别,就是预训练的时候,已经能够识别几十万种常见目标,而且具备一定的推理能力,如识别"路灯下面的黄色小汽车"。在应用时,就无需再训练,给出任意目标描述提示词,就能给出对应的BOX框。
作为自定义大模型部署,火山云的GPU服务器,不管是稳定性,还是价格方面,也非常有优势,建议可以使用V100等较为便宜的型号,即可满足需求。
2.3 Agent框架:SmolAgent+豆包
动图4 Agent框架
Agent框架可以认为是提示词工程的一种更规范的应用,其把无人机的各种能力函数采样了更为标准化的封装,如:
"""
@tool
def hello(your_name: str) -> str:
"""
返回三体人给你的第一句话
Args:
your_name: 你的名字
**
Returns:
str: 返回的消息
"""
word = "Hello World, " + "Hello " + your_name
return word
"""
然后提供各类调用方式。我们使用的为huggingface开源的SmolAgent框架,支持目前最火的MCP(Model Context Protocol,模型上下文协议)调用,以及CodeAgent方式调用。目前国内几个主流大模型平台,SmolAgent默认仅支持方舟/豆包大模型。
因为涉及硬件,需要更高的效率,我们直接使用了CodeAgent方式,也就是直接生成python代码执行的模式。
2.4 视觉语言导航:豆包语音识别/合成模型
动图 5 自主感知决策
人机协同,和无人机直接语音交互,应该会是无人机大模型应用的典型模式。
这里也是使用了方舟中的的语音识别大模型和语音合成大模型,新增了这两个能力后,就可以像跟你的同事一样,愉快的和无人机进行交谈,合作完成任务了。
2.5 无尽的任务:方舟知识库/微调应用
课程也提供了更多接近于真实环境的复杂应用场景,作为课程的开放式任务。
由于Agent应用需要感知环境-->自主决策-->输出行为指令这几个环节,其对大模型推理、感知等能力要求远高于一般的文档生成等应用场景。目前各种大模型处理这些复杂任务时,都不是那么得心应手,特别是大模型的幻觉会导致指令的一致性问题,以及错误的累积等问题。
目前技术条件下,知识库和模型微调仍是解决这些问题的有效手段,只需要按照方舟定义的格式,给出指令提示词和对应的执行动作数据即可。在方舟平台上基本可以做到0代码实现知识库和模型微调应用,大幅提升Agent的应用效果。而在大家比较关心的数据安全问题上,方舟也是各个平台中做的最好的。
图5 方舟模型微调
本课程代码资料全开源。
github地址为:https://github.com/maris205/airsim_agent
B站有讲解视频,大部分也都是免费的,搜索“无人机大模型”,前面几个都是。
图6 B站讲解视频
致谢:感谢火山云的代金券。