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

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

1. 引言 (Introduction)

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

2. 相关工作 (Related Work)

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

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

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


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在某些情况下能够生成完全正确的程序,但在处理复杂任务时,即使是最先进的模型也存在局限性。


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**

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在提高开发效率、降低入门门槛以及提供特定问题调试建议方面的潜力。同时,论文也强调了负责任地开发这些强大工具的重要性,以确保构建安全和可靠的嵌入式系统。

相关推荐
西西弗Sisyphus2 分钟前
开放世界目标检测 Grounding DINO
人工智能·目标检测·计算机视觉·大模型
抓哇能手20 分钟前
数据库系统概论
数据库·人工智能·sql·mysql·计算机
火云洞红孩儿27 分钟前
基于AI IDE 打造快速化的游戏LUA脚本的生成系统
c++·人工智能·inscode·游戏引擎·lua·游戏开发·脚本系统
风清扬雨1 小时前
【计算机视觉】超简单!傅里叶变换的经典案例
人工智能·计算机视觉
HuggingFace1 小时前
自动评估基准 | 设计你的自动评估任务
人工智能·自动评估
GISer_Jing1 小时前
神经网络初学总结(一)
人工智能·深度学习·神经网络
szxinmai主板定制专家1 小时前
【国产NI替代】基于A7 FPGA+AI的16振动(16bits)终端PCIE数据采集板卡
人工智能·fpga开发
数据分析能量站2 小时前
神经网络-AlexNet
人工智能·深度学习·神经网络
Ven%2 小时前
如何修改pip全局缓存位置和全局安装包存放路径
人工智能·python·深度学习·缓存·自然语言处理·pip