ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;border-left: none;padding: 1em;border-radius: 8px;color: rgba(0, 0, 0, 0.5);background: rgb(247, 247, 247);margin: 0px 8px 2em;"> ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 2em auto 1em;padding-right: 1em;padding-left: 1em;border-bottom: 2px solid rgb(15, 76, 129);color: rgb(63, 63, 63);">1. 源码解读ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">源码位置:ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;overflow-x: auto;border-radius: 8px;padding: 1em;margin: 10px 8px;">gitclonehttps://github.com/microsoft/PromptCraft-Robotics.gitingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">其最终实现的效果示例:右侧输入自然语言,左侧就可以按照指令控制机器人行动,例如说起飞,无人机就会起飞,无需编程。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;color: rgb(63, 63, 63);"> ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;border-left: none;padding: 1em;border-radius: 8px;color: rgba(0, 0, 0, 0.5);background: rgb(247, 247, 247);margin: 2em 8px;">视频链接:https://www.youtube.com/watch?v=iE5tZ6_ZYE8 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 1.2em;font-weight: bold;display: table;margin: 4em auto 2em;padding-right: 0.2em;padding-left: 0.2em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);">1.1 源码简介ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">下面我们从源码的角度看下论文中实现的步骤:也就是前面提到的那个Pipeline,我认为这是将ChatGPT应用于各行业的一个很好的思路。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;margin: 1.5em 8px;letter-spacing: 0.1em;color: rgb(63, 63, 63);">源码目录结构如下: 一共两个目录,一个是chatgpt_airsim,一个是examples。 先说 examples 目录,里面是一些场景的Prompt和执行结果,如果你有什么使用场景,可以去里面找有没有相似的案例,借鉴其中的Prompt,可以快速的优化自己的应用。 接下来重点说下 chatgpt_airsim 目录,这里面提供了一个具体的案例:利用ChatGPT实现用自然语言对无人机的控制,并通过AirSim模拟器进行仿真。相关视频可以参考:https://www.youtube.com/watch?v=iE5tZ6_ZYE8。 1.2 自然语言控制无人机的具体实现这里面就包含了论文中提到的完整的Pipeline,咱们一步步看。 1.2.1 定义一个高级机器人函数库这一步在PromptCraft-Robotics\chatgpt_airsim\airsim_wrapper.py文件中实现。 源码如下图:  这一步就是将原来控制机器人的底层库封装成一个个高级函数,以便后续供ChatGPT写代码使用。 代码中 self.client 是一个 AirSim 的实例,这是微软的一个模拟器库,你只需要知道这是个底层库就可以了,平时要模拟一个场景时都是直接调用它的接口来实现的。
1.2.2 为ChatGPT构建一个Prompt这一步就是构建Prompt了。源码中提供了两个Prompt: (1)系统Prompt YouareanassistanthelpingmewiththeAirSimsimulatorfordrones. WhenIaskyoutodosomething,youaresupposedtogivemePythoncodethatisneededtoachievethattaskusingAirSimandthenanexplanationofwhatthatcodedoes. YouareonlyallowedtousethefunctionsIhavedefinedforyou. Youarenottouseanyotherhypotheticalfunctionsthatyouthinkmightexist. YoucanusesimplePythonfunctionsfromlibrariessuchasmathandnumpy.
(2)关于接口信息的Prompt 这里面提供了很多接口信息和关于接口作用的描述,同时给几个示例、限制等,从而让ChatGPT知道接口的用法。  1.2.3 用户参与有了Prompt,接下来就可以运行起来了。 看下运行的主循环: whileTrue: question=input(colors.YELLOW+"AirSim>"+colors.ENDC)
ifquestion=="!quit"orquestion=="!exit": break
ifquestion=="!clear": os.system("cls") continue
response=ask(question)
print(f"\n{response}\n")
code=extract_python_code(response) ifcodeisnotNone: print("PleasewaitwhileIrunthecodeinAirSim...") exec(extract_python_code(response)) print("Done!\n")
在每次循环中,都有一个input等待人的指令,让人参与其中,下达命令,修正路径等都可以通过这里传递。 1.2.4 最终代码的执行上面的主循环中,最后会自动执行代码:exec(extract_python_code(response)),这里生成的代码就是ChatGPT根据提示词中的接口来生成的代码,所以最后会调用到AirSim的底层库中,从而实现自动模拟。 2. 思路总结 - 大模型在机器人中的应用大体学完了,论文和源码的总体思路就是前面说的那个Pipeline,即: (1)定义一个高级机器人函数库,让ChatGPT使用。 (2)为ChatGPT构建一个Prompt,让ChatGPT知道接口的用法。 (3)用户参与,可以提一些意见或指令,以使结果更可控。 (4)最后自动执行代码。 其中最重要的,还是Prompt的构建。如何用简洁清晰的语言描述接口,让ChatGPT知道接口的用法。 另外,不知道大家有没有发现,它这里的实现完全就是直来直去的,它里面是在Prompt中直接给的接口和接口描述,Prompt给到大模型,大模型生成可执行代码。而没有用到像Function Calling,Agent智能体等方式和架构。 这里有没有可能将封装的接口当作一个一个的工具,让ChatGPT来决策调用?这样这个系统就变成了一个Agent系统。大家觉得有必要吗?
|