
这项由德国慕尼黑工业大学自主车辆系统教席、慕尼黑机器人与机器智能研究所,以及伦敦大学学院联合开展的研究,已被2026年IEEE国际智能机器人与系统大会(IROS 2026)接收发表。论文编号为arXiv:2607.14387,有兴趣深入了解的读者可通过该编号在arXiv平台查询完整原文。
自动驾驶汽车上路之前,工程师们需要对它进行海量的"模拟考试"。这些考试不能只在真实道路上做,因为真实道路上很难刻意制造出"闯红灯的行人"或"突然失控的前车"这类危险场景,而且成本极高、风险极大。于是,工程师们转向了虚拟仿真:在电脑里搭建一个虚拟城市,让虚拟汽车在里面跑各种各样的险境,以此来检验自动驾驶系统是否足够可靠。
然而,这里有一个长期困扰研究者的难题:这些"模拟考试剧本"是用一种特殊的编程语言写成的,工程师得一行行手写代码才能描述"在十字路口,一辆卡车突然从左侧闯入"这样的场景。随着法规要求越来越复杂——光是联合国的车辆法规就有几百条——手工编写这些剧本既费时又费力,根本无法覆盖所有需要测试的情况。
这个困境催生了一个自然而然的设想:能不能让AI大语言模型直接"读懂"法规条文,然后自动帮我们写出测试代码?研究团队围绕这个设想开发出了Chat2Scenic系统,这是第一个将"迭代式检索增强生成"思路用于自动驾驶场景脚本生成的完整框架,并在123个真实监管规范场景构成的公开基准上,将代码编译成功率从此前最好方法的30%大幅提升至76%以上。
一、自动驾驶测试为何像在写"剧本"
要理解这项研究解决的问题,可以把自动驾驶测试想象成一场大型话剧的排练。话剧导演(工程师)需要给演员(虚拟汽车)准备详细的剧本:什么时候进场、走哪条路线、遇到什么道具(行人、障碍物、红绿灯)、剧情如何发展、在什么条件下结束这场戏。这份剧本必须用仿真软件能"看懂"的格式写成,也就是一种叫做"领域特定语言"(Domain Specific Language,简称DSL)的专用编程语言。
其中最常用的一种DSL叫做Scenic,它可以和CARLA这款开源自动驾驶仿真平台配合使用。用Scenic写出的一段代码,可以描述"在一个有四条车道的十字路口,一辆林肯MKZ沿直线行驶,同时一辆垃圾车静止在行车道中央,天气为晴天,场景在自动驾驶车辆行驶超过50米后结束"。这段代码一旦运行,CARLA就会在虚拟城市里真实呈现出这个画面。
问题在于,法规文本用的是自然语言,比如"当前方有静止障碍物时,车辆应能在规定距离内完成紧急变道"。把这句话翻译成几十行Scenic代码,对人类工程师来说就已经很费脑筋,对AI来说更是挑战重重:AI必须理解场景的语义、掌握Scenic的语法规则、还要确保生成出来的代码能真正跑起来而不报错。
在这项研究之前,学术界主要有两种思路来应对这个挑战,但两种思路都有各自的硬伤。第一种叫"检索拼装":先把大量已有的Scenic代码片段存进数据库,遇到新场景需求时,AI从数据库里找相似的片段拼在一起。这种方式就像用现成的乐高积木拼房子,拼出来的东西通常能用,但如果遇到数据库里没有的形状,就完全束手无策。第二种叫"直接生成":让AI从头到尾一口气写出完整的Scenic程序。这种方式创造力强,但就像让一个人一口气背诵一篇从未见过的几百字文章,出错率极高,生成出来的代码往往因为语法问题根本跑不起来。
Chat2Scenic的核心创新,正是找到了一条绕开这两条路各自死角的第三条道路。
二、三个核心模块:像流水线一样协作的"剧本工厂"
Chat2Scenic的工作方式,可以用一家专业剧本工厂来类比。这家工厂有三个车间:前台接待室负责听清楚客户的需求、资料查阅室负责找到相关的专业资料、生产车间负责一个零件一个零件地组装剧本。
**前台接待室:互动模块**
当用户用自然语言输入一段场景描述,比如"前车突然向左变道以躲避一辆静止的摩托车,导致自动驾驶跟车处于高度紧急状态"时,互动模块首先登场。这个模块基于Gradio框架搭建了一个聊天机器人界面,用户可以像和人聊天一样描述场景,甚至可以在AI理解有偏差时进一步修正和追加说明。
更关键的是,互动模块内置了一个"解读员"。这个解读员会把用户的自然语言描述分解成四类结构化信息:空间关系(路的形状、各个车辆的相对位置)、自动驾驶主车的行为参数、其他参与者的信息(比如那辆静止的摩托车)、以及限制条件(比如场景什么时候结束)。这四类信息合起来,加上地图、天气、车辆型号等全局配置,就构成了一张完整的"场景需求清单"。
这张清单的每一个条目都被压缩成一句简洁的描述,比如"一辆摩托车静止在车道中央作为障碍物"。这句话随后会被送到资料查阅室去匹配相关素材。整个解读过程还支持多轮对话——用户发现AI理解有误时,可以直接追加说明,系统会记住整个对话历史,无需重新开始。
**资料查阅室:RAG模块**
RAG是"检索增强生成"(Retrieval-Augmented Generation)的缩写,简单说就是在AI生成答案之前,先让它查一查相关资料,避免凭空乱编。Chat2Scenic的资料查阅室里存放着两类档案。
第一类是代码片段数据库。研究团队把官方Scenic示例代码拆解成一个个独立的小零件,每个零件对应一类场景元素——比如"车辆直行"、"行人穿越马路"、"车辆在路口转弯"等等。每个零件都配有一句自然语言说明,用向量嵌入(一种让AI理解语义的技术)的方式存储,方便后续根据语义相似度快速检索。
第二类是文档数据库,里面存放着Scenic的官方语法文档,以及联合国车辆法规R152、R157、R171等真实监管规范。这些文档被切割成语义完整的段落块,同时支持两种检索方式:一种是基于关键词精确匹配的BM25检索(类似于搜索引擎的关键词搜索),另一种是基于语义相似度的向量检索。两种检索结果通过一种叫做"互惠排名融合"的算法合并排序,确保既能找到精确的API定义,也能捕捉到语义相关的背景知识。
这种"双检索器架构"的好处在于:当AI准备写某个代码片段时,它既能看到"别人是怎么写类似代码的"(代码片段),也能查阅"这个功能的官方说明是什么"(文档),两者结合大大降低了生成出语法错误代码的概率。
**生产车间:生成模块**
有了需求清单和参考资料,生产车间就开始按顺序逐块组装剧本。这个"逐块组装"正是Chat2Scenic区别于以往方法的最关键特点。
工厂不是让AI一口气写完整个剧本,而是把整个剧本拆成几个标准零件,按照严格的依赖顺序逐个生成:先生成全局配置(地图、天气、车辆型号),再生成空间关系代码,然后是主车行为代码,接着是每一个场景参与者的代码,最后是限制条件代码。每生成完一个零件,就把它加入"已生成代码"的上下文,作为下一个零件生成时的参考。
这就像流水线上的工人:做车门的工人先量好车身的尺寸,确保车门装得上去;装发动机的工人参考了车底盘的规格,确保发动机能塞进去。每一步都参考前一步的成果,最终组装出来的整车各零件之间天然兼容,不会出现"车门装不上去"这种问题。相比之下,直接生成整个剧本就像让一个工人同时记住所有零件的规格,一次性焊接完成,出错的概率自然高得多。
三、四种"提示技巧":教AI说专业语言的四套教材
生产车间里的每个AI生成步骤,都使用了四种精心设计的"提示工程"技巧,可以把它们理解为教AI完成任务时用到的四套配套教材。
第一套叫"情境提示"(Contextual Prompting)。在发给AI的指令里,直接塞入Scenic语言的语法规则、类型层次体系(比如"道路网络元素→线性元素→道路/车道"这样的分类树)和可用的操作符。这就像给刚接手新工作的员工一份详尽的岗位手册,让他在完成任务时随时查阅。
第二套叫"思维链"(Chain of Thought)。要求AI在生成代码之前,先按照规定的步骤思考一遍。比如生成主车行为代码时,AI必须依次完成"理解需求→检查上下文→选择车辆类型→定义参数→定义行为→实例化→验证"这七个思考步骤,然后再输出代码。这就像让工人在动手之前先在脑子里过一遍施工图纸,减少返工。
第三套叫"少样本学习"(In-Context Learning)。在指令里提供若干示例,包括正确写法的范例和常见错误的对照示例。AI通过观察这些例子,理解什么叫"对"、什么叫"错"。研究者特别设计了包含错误修正的"负面示例",帮助AI主动规避已知的坑。
第四套叫"检索增强少样本学习"(Retrieval-Augmented In-Context Learning)。这套教材是动态的:每次生成时,系统会根据当前任务的具体描述,实时从数据库里捞取最相关的代码片段(最多三个)作为示例,同时检索最相关的文档段落作为背景说明。与固定的示例集相比,动态检索的好处在于示例始终和眼前的任务最相关,并且数据库可以持续扩充,让整个系统随时间推移越来越聪明。
实验结果清晰地揭示了这四套教材叠加的效果。从完全没有任何提示技巧的零样本基线出发,代码编译成功率是0%——AI完全不知道怎么写Scenic代码。加入情境提示后,成功率升到12.2%。再加入少样本学习,跳升至47.15%。进一步叠加思维链,达到54.47%。最终四种技巧全部叠加(但去掉文档检索,因为文档检索反而增加耗时但不提升成功率),编译成功率达到76.42%,整体框架准确率为58.17%。
四、用123个真实法规场景来"阅卷"
为了客观衡量Chat2Scenic的表现,研究团队专门搭建了一套评测基准,这在这个领域此前是空白的。
这套基准收录了123个真实场景描述,来源涵盖三个方向。其一是CARLA自动驾驶挑战赛的24个官方测试场景,覆盖无信号灯路口通行、紧急变道等典型危险情况。其二是美国国家公路交通安全管理局(NHTSA)的47个事故分析场景,其中16个来自真实碰撞数据,31个来自碰撞前的预警情境,包括行人横穿多车道这类高危场景。其三是联合国车辆法规中的52个测试场景,涉及R152(紧急制动辅助)、R157(自动变道系统)和R171(驾驶员警示系统)三部法规,场景复杂度最高,描述往往包含大量技术细节和约束条件。
这123个场景分布极为多样:有纯车辆交互场景,有涉及行人和骑行者的脆弱道路使用者场景,有需要响应交通信号的场景,有不同天气时段的场景,还有描述复杂动态行为的场景。如此丰富的覆盖面,确保评测结果不会是在某类简单场景上的"偏科"表现。
评测使用了两层指标体系。框架性能层面,研究团队统计了代码编译成功率(生成的代码能否真正在CARLA里跑起来不报错)、每个场景的平均生成时间,以及消耗的平均词元数量(衡量AI的"思考量"和经济成本)。场景生成质量层面,由人工评测员对成功编译的场景逐层打分,评分维度包括道路几何是否正确、交通设施是否到位、时间天气是否符合描述、动态物体行为是否准确、环境条件是否匹配,最终汇总成一个"场景质量分"。框架准确率则等于编译成功率乘以场景质量分,是衡量端到端整体水平的综合指标。
五、大比武:哪款AI最擅长写自动驾驶剧本
研究团队在同一套基准上测试了十余款大语言模型和两套此前的最优方法,结果呈现出几个鲜明的规律。
先看开源模型的表现。Qwen3-Coder:30B、Qwen3:30B和Gemma3:27B三款模型的编译成功率均为0%,几乎完全无法生成可运行的Scenic代码。GPT-OSS:20B和Mistral-Small3.2:24B略好,但成功率也只有不到2%。开源模型的集体失利,主要归因于参数规模相对较小、预训练数据覆盖的Scenic代码量有限,以及在多种复杂提示技巧交织使用时,跟随指令的能力不足。
商业模型的表现则参差不齐。DeepSeek-V3.2的两种模式(聊天版12.2%,推理版14.63%)、Qwen系列各版本(从1.63%到15.44%不等)均远低于Gemini-3系列。Gemini-3-Pro达到60.16%,而Gemini-3-Flash以76.42%的编译成功率和58.17%的框架准确率拔得头筹,成为Chat2Scenic框架的最优搭档。
一个出人意料的发现是:Gemini-3-Flash(非思维增强版)的表现优于Gemini-3-Pro。研究者给出的解释是:带有深度内部推理能力的"思维模型",在面对包含多种外部提示结构的复杂指令时,内外两套思考机制之间容易相互干扰,反而降低效率;而专门针对指令跟随优化的Flash版本,能更稳定地执行结构化提示模板,从而发挥出更强的整体性能。
再看与两套"前辈方法"的横向对比。ChatScene采用检索拼装方式,从CARLA挑战赛的现有代码库里检索片段进行拼接,在Gemini-3-Flash的加持下编译成功率为30.08%,框架准确率11.03%。NL2Scenic采用检索式完整脚本生成,编译成功率仅16.26%,框架准确率10.86%。Chat2Scenic的76.42%编译成功率,分别是这两套方法的2.5倍和4.7倍,框架准确率则分别是5.3倍和5.4倍。
ChatScene略优于NL2Scenic的原因也在情理之中:ChatScene用的是真实可运行的代码片段拼在一起,只要片段本身没问题,拼装结果通常能编译;而NL2Scenic要让AI一口气生成完整程序,对于复杂场景描述,任何一处语法疏漏都会导致整个程序崩溃。Chat2Scenic的逐块迭代生成策略,则从根本上化解了这两种方式各自的软肋。
至于响应时间的代价,Chat2Scenic平均每个场景需要约222秒。相比ChatScene的10秒和NL2Scenic的43秒,确实慢了许多。不过研究者指出,自动驾驶测试场景的生成属于离线工作——工程师不需要实时等待,花三四分钟换来可靠的测试代码,这笔账在实际工程中完全划算。
六、三幅真实画面:系统生成的场景长什么样
论文中展示了三个成功生成并在CARLA中运行的典型场景,从鸟瞰视角、第一人称视角和第三人称视角多角度展示了虚拟场景的视觉效果。
第一个场景来自CARLA挑战赛的描述,呈现的是自动驾驶主车需要通过一个无信号灯路口,与其他车辆协商通行权的情境,遵循"先到先过"的规则。从生成的视频画面可以看到,虚拟城市路口的细节相当真实,车辆的相对位置和运动轨迹与描述完全吻合。
第二个场景来自联合国R171法规,描述的是主车跟随前车行驶,前车突然向旁边车道偏移以躲避车道中央静止的摩托车或重型卡车。生成的场景在时间步进画面中清晰展示了前车的偏移轨迹和静止障碍物的位置,完全符合法规测试的意图。
第三个场景来自NHTSA事故数据,描述行人在无人察觉的情况下横穿多车道道路,驾驶员当时的注意力分散在其他车辆和交通控制设施上。这类涉及脆弱道路使用者的场景,正是自动驾驶系统最难应对的危险情况之一,也是测试中最重要的覆盖点。
---
说到底,Chat2Scenic干的事情,是在自动驾驶验证这个领域打通了一条此前走不通的捷径。工程师不再需要逐行手写仿真测试代码,也不再受限于数据库里现有的有限场景;只需要用普通语言描述一个场景,甚至直接粘贴一段法规原文,系统就能自动生成可以真正运行的测试剧本。76%的编译成功率意味着大约每生成四个场景,只有一个需要人工干预修复,这在工程实践中已经足够有用。
当然,这条路还没走到尽头。目前系统还只能处理文字描述,如果能让工程师直接上传一张手绘的路口草图、或者一段真实事故的行车记录仪视频,系统自动据此生成测试场景,那将会更直接、更直观。另外,现在生成的场景在运行一遍之后就结束了,未来如果能让仿真结果实时反馈给生成系统——比如"这个场景里主车根本没有机会触发紧急制动,请调整参数使场景更具挑战性"——就能形成一个自我进化的闭环,让测试覆盖越来越全面、越来越有针对性。
这项研究提醒我们,大语言模型不只是写文章、聊天的工具,当它和专业领域的结构化知识、迭代反馈机制结合在一起时,可以成为工程师手中真正好用的专业工具。对自动驾驶行业来说,更高效地覆盖测试边界,最终意味着路上的每一辆自动驾驶汽车更安全、更可靠。
---
Q&A
Q1:Chat2Scenic生成的Scenic代码能直接用于真实自动驾驶系统的测试吗?
A:Chat2Scenic生成的Scenic代码适用于CARLA仿真平台中的虚拟测试,生成的场景是在电脑里运行的虚拟仿真剧本,而非控制真实道路上的汽车。工程师可以用这些虚拟场景来验证自动驾驶算法的行为,但从仿真结果到真实道路部署之间还需要额外的验证步骤。
Q2:Chat2Scenic为什么选择逐块生成而不是一口气生成完整代码?
A:一次性生成完整Scenic程序时,大语言模型需要同时兼顾所有组件之间的语法兼容性,任何一处疏漏都会导致整个程序报错无法运行。Chat2Scenic的逐块迭代方式让每个代码片段在生成时能参考已有的上下文,确保各部分天然兼容,这是编译成功率从16%跳升至76%的核心原因。
Q3:开源大语言模型能不能在Chat2Scenic框架里达到和Gemini相近的效果?
A:根据论文的测试结果股票配资免费平台,目前测试的开源模型(包括Qwen3:30B、Gemma3:27B等)编译成功率几乎为零,主要原因是参数规模和预训练数据的差距,以及在处理多种提示技巧交织的复杂指令时指令跟随能力不足。未来随着开源模型能力持续提升,这一差距有望缩小。
富华优配提示:文章来自网络,不代表本站观点。