视频链接: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。
这里面就包含了论文中提到的完整的Pipeline,咱们一步步看。
这一步在PromptCraft-Robotics\chatgpt_airsim\airsim_wrapper.py文件中实现。
源码如下图:
这一步就是将原来控制机器人的底层库封装成一个个高级函数,以便后续供ChatGPT写代码使用。
代码中 self.client 是一个 AirSim 的实例,这是微软的一个模拟器库,你只需要知道这是个底层库就可以了,平时要模拟一个场景时都是直接调用它的接口来实现的。
这一步就是构建Prompt了。源码中提供了两个Prompt:
(1)系统Prompt
YouareanassistanthelpingmewiththeAirSimsimulatorfordrones.
WhenIaskyoutodosomething,youaresupposedtogivemePythoncodethatisneededtoachievethattaskusingAirSimandthenanexplanationofwhatthatcodedoes.
YouareonlyallowedtousethefunctionsIhavedefinedforyou.
Youarenottouseanyotherhypotheticalfunctionsthatyouthinkmightexist.
YoucanusesimplePythonfunctionsfromlibrariessuchasmathandnumpy.(2)关于接口信息的Prompt
这里面提供了很多接口信息和关于接口作用的描述,同时给几个示例、限制等,从而让ChatGPT知道接口的用法。
有了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等待人的指令,让人参与其中,下达命令,修正路径等都可以通过这里传递。
上面的主循环中,最后会自动执行代码:exec(extract_python_code(response)),这里生成的代码就是ChatGPT根据提示词中的接口来生成的代码,所以最后会调用到AirSim的底层库中,从而实现自动模拟。
大体学完了,论文和源码的总体思路就是前面说的那个Pipeline,即:
(1)定义一个高级机器人函数库,让ChatGPT使用。
(2)为ChatGPT构建一个Prompt,让ChatGPT知道接口的用法。
(3)用户参与,可以提一些意见或指令,以使结果更可控。
(4)最后自动执行代码。
其中最重要的,还是Prompt的构建。如何用简洁清晰的语言描述接口,让ChatGPT知道接口的用法。
另外,不知道大家有没有发现,它这里的实现完全就是直来直去的,它里面是在Prompt中直接给的接口和接口描述,Prompt给到大模型,大模型生成可执行代码。而没有用到像Function Calling,Agent智能体等方式和架构。
这里有没有可能将封装的接口当作一个一个的工具,让ChatGPT来决策调用?这样这个系统就变成了一个Agent系统。大家觉得有必要吗?
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |