探索和表征大型语言模型在嵌入式系统开发和调试中的应用

news2025/1/7 22:58:58

这篇论文的标题是《Exploring and Characterizing Large Language Models for Embedded System Development and Debugging》,作者是来自华盛顿大学的研究团队。论文主要探讨了大型语言模型(LLMs)在嵌入式系统开发和调试方面的应用潜力。以下是对论文主要内容的详细整理:

1. 引言 (Introduction)

  • 论文指出,尽管LLMs在代码生成方面取得了显著进展,但它们在嵌入式系统开发中的能力尚未得到充分研究。
  • 嵌入式系统开发需要跨领域的硬件和软件知识,具有复杂性和不确定性。

d59851cef1e745028dd6ee0ed6a7d641.png

2. 相关工作 (Related Work)

  • 论文回顾了LLMs在不同领域的应用,包括健康、医学、教育、金融等,并讨论了LLMs在代码生成和嵌入式系统领域的应用情况。

 

3. 物理测试平台 (Physical Testbenches)

  • 为了评估LLMs在硬件在回路(Hardware-In-the-Loop, HIL)嵌入式系统开发任务中的性能,作者实现了一个端到端的物理验证和自动化测试流程。
  • 通过传感器-执行器对进行物理评估,比较了GPT-3.5、PaLM 2和GPT-4三个模型在450次实验中的表现。

418858d9b58d43c59e3b16b52efc2ce3.png

006d775d82804e4fa494151d3d57f227.png

Prompt: Write me a program for the Arduino Uno that interfaces with an LSM6DSO over I2C using only the Wire library. In my hardware implementation, the SDO/SA0 pin of the LSM6DSO is connected to GND (ground).
Print the acceleration readings in gs every 100ms over Serial at baud rate 9600. Example serial output: A_X = -0.426 \ n A_Y = -0.023 \ n A_Z = 0.913 \ n

4. LLMs在嵌入式系统开发中的能力 (Capabilities of LLMs for Embedded Systems)

  • 论文详细分析了LLMs在理解硬件规格、生成代码、提供硬件调试建议等方面的能力。
  • 通过实验,发现GPT-4在某些情况下能够生成完全正确的程序,但在处理复杂任务时,即使是最先进的模型也存在局限性。

7db2bf29d77f4908b65fa76e2761a1cd.png

Prompt: We are trying to design a battery-operated environmental sensor built around a nRF52832 and an  HDC2010 that transmits temperature measurements using Bluetooth advertising packets to a receiver. We will  use this data to monitor the change in ambient temperature inside a building over a month. This code already  reads the sensor and transmits data correctly. Please suggest the specific parts of this code we could modify to
maximize battery life: **program**
 
bf5e528357fd496484f8d8dc8809d56f.png

5. LLMs在嵌入式系统开发中的局限性 (Limitations of LLMs for Embedded Systems Development)

  • 论文讨论了LLMs在任务理解、生成错误信息(hallucinations)、未经提示的行为(unprompted behavior)、版本和库错误等方面的局限性。

 

6. 基于AI的嵌入式开发工作流程 (AI Based Embedded Development Workflow)

  • 作者提出了一个集成LLMs到嵌入式系统开发的建议工作流程,包括提供详细的提示、调试编译错误、程序和行为观察、描述不正确的行为等步骤。

6.1 提供详细的提示 (Providing Detailed Prompts)

  • 强调了为LLMs提供充分上下文的提示工程的重要性,这有助于生成有用的代码。
  • 提示应包括硬件和软件的相关细节,如示例代码片段、特定库和芯片版本。
  • 对比了好坏两种提示方式,好的提示提供了完整的任务范围和期望的实现细节。
Bad prompt: “Make the LED blink and print hello world.”
Better prompt: “I have an Arduino Uno with an LED attached to Pin 13. I want to print the message “Hello World” to serial at baud rate 9600 and blink the LED on and off every second. First explain how to approach the task and then provide a program to accomplish it.”
 

6.2 调试编译错误 (Debugging Compilation Errors)

  • 验证生成代码的第一步是尝试编译它,编译错误可以用来捕捉常见的错误。
  • 讨论了LLMs在接收到编译错误信息时能够自动纠正错误的能力。
Prompt: “When I try to compile this code, I get the following error: ***copied error here***”

6.3 程序和行为观察 (Program and Behavior Observation)

  • 在代码编译和上传无误后,下一步是测试代码本身的行为。
  • 对于简单任务,可以通过视觉验证,但对于更复杂的嵌入式系统,可能需要人工参与进行综合测试和验证。

6.4 描述不正确的行为 (Describing Incorrect Behavior)

  • 提供了关于如何向LLMs描述系统行为不正确的指导,特别是当需要修复代码时。
  • 通过提供系统行为与预期不符的详细描述,可以提高LLMs识别错误来源的能力。
Better prompt: “This code compiles and runs and the Arduino prints messages, but these messages have  incorrect zero values for the A_X, A_Y, and A_Z acceleration channels instead of acceleration readings. The current output we are getting is: A_X = 0, A_Y = 0, A_Z = 0”

6.5 额外技巧 (Additional Tips)

  • 指出GPT在处理数字和计算时常常遇到困难,建议手动修复这些错误。
  • 强调了在当前状态下,应将GPT-4和其他模型视为辅助人类编程的工具,而不是一次性解决方案。
  • 如果用户知道如何修复错误,应手动进行修复,例如,如果模型提供的程序错误地闪烁了错误的引脚,手动更新引脚号会更有效。

1)保持上下文更新 (Keep the Context Up-to-date)

  • 在生成代码后,如果用户对代码进行了修改,应将新版本作为提示的一部分复制回去,以便在生成额外代码时为模型提供上下文。

2)明确变更 (Be Explicit About Changes)

  • 当请求模型更改特定部分的代码时,应明确指出需要更改的内容和保持不变的内容。

3)任务分解 (Break down tasks)

  • 建议将大型任务分解为模块化的小功能,单独开发,然后集成到一个完整的程序中。

4)重新开始 (Restarting)

  • 如果模型多次尝试修复问题失败,最好重新开始一个新的聊天。这有助于模型重新获得对原始目标的参考。

5) 明确变更 (Be Explicit About Changes)

  • 在请求模型进行更改时,应明确指出需要更改的内容,以避免模型进行未经请求的修改。

7. 用户研究 (User Study)

  • 通过15名不同经验水平的参与者进行的用户研究,评估了提出的工作流程指南,并调查了LLMs在硬件调试中的辅助能力。
  • 用户研究结果表明,LLMs能够显著提高用户在嵌入式系统开发中的生产力和成功率。

8. 讨论和结论 (Discussion and Conclusion)

  • 论文总结了LLMs在嵌入式系统开发中的潜力,并提出了未来工作的方向,包括改进提示工程、利用硬件在环测试平台、开发基于LLM的自主代理等。

附录 (Appendix)

  • 提供了一个虚构的环境传感器IC的寄存器映射表,用于展示GPT-4如何基于提供的寄存器表生成伪代码。

论文的核心贡献是开发了一个开源的硬件在环框架,用于系统地评估和理解LLMs在嵌入式系统开发和调试中的能力与局限,并提出了一个集成LLMs的软件开发工作流程。通过实验和用户研究,论文展示了LLMs在提高开发效率、降低入门门槛以及提供特定问题调试建议方面的潜力。同时,论文也强调了负责任地开发这些强大工具的重要性,以确保构建安全和可靠的嵌入式系统。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050187.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端技巧——复杂表格在html当中的实现

应用场景 有时候我们的表格比较复杂,表头可能到处割裂,我们还需要写代码去完成这个样式,所以学会在原生html处理复杂的表格还是比较重要的。 下面我们来看这一张图: 我们可以看到有些表头项的规格不太一样,有1*1 2*…

【深入理解SpringCloud微服务】Spring-Cloud-OpenFeign源码解析(下)——LoadBalancerFeignClient详解

【深入理解SpringCloud微服务】Spring-Cloud-OpenFeign源码解析(下)——LoadBalancerFeignClient详解 RxJava简单介绍RxJava示例Observable与Subscriber相关方法介绍Observable.create(OnSubscribe)Observable#just(T value)Observable#concatMap(Func1&…

实战OpenCV之图像显示

基础入门 OpenCV提供的功能非常多,图像显示是最基础也是最直观的一部分。它让我们能够直观地看到算法处理后的效果,对于调试和验证都至关重要。在OpenCV中,图像显示主要依赖于以下四个关键的数据结构和函数。 1、Mat类。这是OpenCV中最基本的…

文心快码(Baidu Comate)快速创建数据可视化图表

给你分享一个免费的编码助手——文心快码 Baidu Comate!百度文心大模型,46%采纳率,百度30%的代码都是它写的!AI这个大腿,你确定不抱一下?快来安装使用吧,送京东卡! https://dwz.cn/3…

高校疫情防控web系统pf

TOC springboot365高校疫情防控web系统pf 第1章 绪论 1.1 课题背景 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。所以各行…

平移矩阵、点绕轴的旋转矩阵、平面直角坐标系旋转矩阵、点绕向量旋转公式(罗德里格斯旋转公式)

平移矩阵 点绕轴的旋转矩阵 平面直角坐标系旋转矩阵 点绕向量旋转公式(罗德里格斯旋转公式) 代码 #include "myPoint.h" #include <cmath> myPoint::myPoint() {m_x m_y m_z 0; }myPoint::myPoint(double x, double y, double z):m_x(x),m_y(y),m_z(z) { }…

探索tailwindcss多主题切换

现在的多主题切换基本上都是用的 css 变量的形式, 而tailwindcss也支持 css 变量定义主题的方式 至于为什么用 tailwindcss变量, 还是因为 tailwind 写类名提示比较方便, 也不需要再在css或者style中去一个个var的形式去写变量了 这里我在assets/style/theme文件夹中创建了三个…

智能与生产力、生产关系的关系

机器学习和自主系统是推动新质生产力和新质生产关系形成的关键技术。它们与这两个概念之间的关系可以从以下几个方面进行分析&#xff1a; 一、机器学习与新质生产力 提升效率和精准度&#xff1a;机器学习通过对大量数据进行分析&#xff0c;能够提供精准的预测和决策支持。这…

MyBatis(初阶)

1.什么是MyBtis MyBatis是持久层框架&#xff0c;⽤于简化JDBC的开发。 2.准备工作 2.1 创建⼯程 数据库: 2.2 配置数据库连接字符串 以application.yml⽂件为例: 2.3 写持久层代码 Data public class UserInfo {private Integer id;private String username;private Stri…

YOLOv10训练,适合小白训练,新手YOLOv10训练自己数据集教程!超简单,超详细!!

YOLOv10训练&#xff0c;适合小白训练&#xff0c;新手YOLOv10训练自己数据集教程&#xff01;超简单&#xff0c;超详细&#xff01;&#xff01; AI学术叫叫兽在这&#xff01;家人们&#xff0c;给我遥遥领先&#xff01;&#xff01;&#xff01; 方法一&#xff1a;云服务…

如何打造一款爆款手游?

现在开发一款游戏太简单了&#xff0c;各种源码满地飞&#xff0c;大家拿过来随便改改有个版号就可以上线运营了&#xff0c; 但是这种的游戏品质一般都不会怎么样&#xff0c;留存的周期也是比较短的&#xff0c;更别说让玩家持续消费了&#xff0c;想要打造一款火热的游戏我们…

Android Media Framework(十八)ACodec - Ⅵ

ACodec之所以复杂&#xff0c;主要是因为状态太多。在上一篇文章中&#xff0c;我们学习了在ExecutingState下对buffer的处理。ExecutingState可能会切换到OutputPortSettingsChangedState、FlushingState&#xff0c;或者当组件被释放时&#xff0c;进入UninitializedState。接…

泛微云桥前台文件上传漏洞-202408

漏洞简介 2024 年 8 月份新出漏洞&#xff0c;泛微云桥任意文件上传漏洞&#xff0c;详情如图所示。 环境搭建 1、下载漏洞环境。 https://wx.weaver.com.cn/download 2、运行install64.bat&#xff0c;安装环境。 3、安装成功界面。 未安装补丁&#xff0c;系统不能使用…

Java方法01:什么是方法

本节视频链接&#xff1a;Java方法01&#xff1a;什么是方法&#xff1f;_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p45&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的‌方法‌是一段执行特定任务的代码片段&#xff0c;‌它是程序的基本构…

Keepalived:不只是心跳检测,更是高可用性的秘密武器

keepalived博客(Keepalived&#xff1a;不只是心跳检测&#xff0c;更是高可用性的秘密武器) 文章目录 keepalived博客(**Keepalived&#xff1a;不只是心跳检测&#xff0c;更是高可用性的秘密武器**)keepalived介绍概述工作原理核心模块应用场景配置与安装总结 keepalived基本…

工 厂设计模式

简单工厂模式 基本介绍 1) 简单工厂模式是属于创建型模式,是工厂模式的一种。 简单工厂模式是由一个工厂对象决定创建出哪一 种产品类 的实例。简单工厂模式是工厂模式家族中最简单实用的模式 2) 简单工厂模式:定义了一个创建对象的类,由这个类来 封装实例化对象的行为 (代…

从零开始学cv-6:图像的灰度变换

文章目录 一&#xff0c;简介&#xff1a;二、图像的线性变换三、分段线性变换四&#xff0c;非线性变换4.1 对数变换4.2 Gamma变换 五&#xff0c;效果: 一&#xff0c;简介&#xff1a; 图像灰度变换涉及对图像中每个像素的灰度值执行数学运算&#xff0c;进而调整图像的视觉…

Python基础和变量使用

1. 基础了解 1.1 运行方式 Python有多种运行方式&#xff0c;以下是几种常见的执行Python代码的方法&#xff1a; 交互式解释器&#xff1a; 打开终端或命令提示符&#xff0c;输入python或python3&#xff08;取决于你的系统配置&#xff09;&#xff0c;即可进入Python交互…

HelpLook AI 知识库:为企业提供高效智能的知识管理解决方案

“管理就是把复杂的问题简单化&#xff0c;混乱的事情规范化。” 在当今竞争激烈的商业环境中&#xff0c;企业面临着快速变化的市场需求和日益复杂的业务流程。为了保持竞争力并提升运营效率&#xff0c;选择一款合适的知识管理系统至关重要。在众多选项中&#xff0c;HelpLoo…

day05--Vue

一、Vue入门 1.1入门案例 1.在页面中引入vue.js框架 2.定义vue对象 let app new Vue({ el:"#vue作用域的div标签id", data:{ //所有数据模型 }&#xff0c; methods:{ //页面中所有触发的js方法 }&#xff0c; created(){ //页面初始化&#xff0c;准备调用方法 } …