使用生成式AI编写和运行嵌入式代码

Ari Mahpour
|  已创建:五月 15, 2024  |  已更新:July 1, 2024
使用生成式AI编写和运行嵌入式代码

如何构建自定义GPT操作以与您的硬件对话构建AI实验室助手中,我们学习了如何使用生成式AI控制我们的硬件。通过在ChatGPT中使用自定义GPT操作,我们能够赋予ChatGPT不仅能让树莓派上的LED灯闪烁,还能控制实验室仪器并获取数据的能力。这意味着我们可以使用人工智能作为我们的实验室助手,并处理它从我们的仪器中获取的数据。在这篇文章中,我们将更进一步,让生成式AI不仅为我们编写代码,还能在嵌入式目标上执行代码并在此过程中接收反馈。

背景

使用生成式AI编写代码,即使是对于嵌入式系统,也不是什么新鲜事。已经有很多工具在建议或完全从头开始编写代码。最受欢迎的大型语言模型,如ChatGPT、Gemini和Claude,都已经变得相当擅长编写代码(参见Gemini与ChatGPT:谁写的代码更好进行比较)。我已经写了一年多关于ChatGPT生成代码的文章了(参见使用ChatGPT进行自动化测试),并宣称这是如今开发的唯一方式。真正的挑战是将AI纳入你的开发循环中。

代码生成只能带你走这么远,但要验证并确保它有效,当涉及到生成式AI时需要采取不同的方法。ChatGPT的代码解释器提供了一个封装的Python环境,可以在一定程度上运行生成的代码并验证它对你是否有效。我想更进一步,看看我们是否能在嵌入式系统上实现同样的事情。有两种方法可以使用OpenAI的ChatGPT。最常见的方法是创建一个使用OpenAI API的封闭循环应用。它会提示并从大型语言模型(LLM)使用API获取代码,编译它,将其加载到Arduino上,并使用额外的自定义代码来验证生成代码的功能。我决定采取不同的方法,使用GPT操作来使其更像是一种“代码配对体验”。这就是那种体验的样子:

GPT操作示例

图1:GPT操作示例

虽然这个例子可能很简单(即闪烁一个板载LED),但上面的演示总结了一切。我能够给我的自定义GPT清晰的指令,它完全按照我的预期执行了指令。我还能确认它确实上传到了我的设备,并以1秒的频率让LED闪烁。与封闭循环系统相比,使用自定义GPT的好处是我可以在提示符内很容易地进行迭代:

在Arduino草图上进行迭代

图2:在Arduino草图上进行迭代

现在你已经看到了一些例子,让我们来看看这一切是如何工作的。

工作原理

就像我们在其他自定义GPT文章中看到的那样,这个项目的GPT Actions设置或多或少是相同的。Dockerfile、Docker Compose、SSL证书以及仓库的总体结构并没有太大变化。当然,设计代码本身和OpenAPI YAML文件显著不同(这是意料之中的)。

这段代码(与之前的例子相比)最大的变化是我们在Python中引入了一个“子进程”来调用外部程序,在这个案例中是Arduino IDE。我们的OpenAPI YAML文件(openapi.yaml)提供了结构给ChatGPT,告诉它应该传递什么信息以及如何传递。查看YAML文件末尾的“components”部分,你会注意到我们期望返回对象的不同部分:

  

components:

  schemas:

    CodeSnippet:

      type: object

      properties:

        language:

          type: string

        code:

          type: string

        description:

          type: string

          nullable: true

      required:

        - language

        - code

我们请求ChatGPT不仅提供代码,还提供代码的语言和可选的代码描述。我们在app.py中处理这些信息。比起仅仅处理命令,更重要的是,如果处理过程中出现了问题,我们还会返回有意义的HTTP响应。这有助于提供上下文,并与ChatGPT的Web服务器/AI机器人“使用相同的语言”交流。

这个实现虽然有些粗糙,但非常简单:我们将代码片段转储到一个临时的INO文件中,验证和/或上传到Arduino,并删除临时的INO文件。显然,这里有很多可能出错的地方,包括无法克服的安全风险数量。像往常一样,限制你的开发环境非常重要,如果要对外开放,实施所有必要的安全措施以确保环境安全是极其重要的。

仅仅为了好玩,我还实现了一个非常基础的串行读取命令,使我们的自定义GPT Action能够从Arduino串行端口读取数据。这允许我们验证串行端口是否工作,而无需从我们的机器手动检查。一个示例场景可能是,如果你要求ChatGPT从你的智能手机编写并上传代码到你的Arduino。当然,这可以扩展到更正式的get/set类型的串行实现,你发送命令并通过串行读回响应(如在配置硬件在环项目中实现的)。

结论

在这篇文章中,我们展示了AI不仅可以编写代码 - 它还可以通过在实际设备上运行代码来确保代码的有效性。这就像拥有一个不仅为你编写项目,还会测试以确保项目正确的开发者。通过我们使用的示例,你可以看到这将如何改变我们创建和测试项目的方式,使事情变得更快更简单。我们分享了所有的步骤和代码,所以任何感兴趣的人都可以尝试一下,看看AI如何在他们的工作中提供帮助。

了解更多关于这个开创性项目的信息,并加入这场进化,请访问:https://gitlab.com/ai-examples/ai-arduino-code-builder

关于作者

关于作者

Ari 是一位在设计、制造、测试以及集成电气、机械和软件系统方面拥有丰富经验的工程师。他热衷于将设计、验证和测试工程师凝聚成一个高效团队,共同工作。

相关资源

相关的技术文档

返回主页
Thank you, you are now subscribed to updates.