机器人行为自动编排和任务

一、分层 #

人机交互型的从人到机器逐层看是

  • 接受端: 语音识别 & 图像识别 & 压力感知
  • 语义理解: 语言大模型/语义提取模型, 前者专业,后者专精
  • 状态感知:图像识别 & 其他传感器
  • 行为编排: 语言大模型/图数据编排/行为树
  • 动作执行

二、最小系统流程 #

  • 使用者发出命令,接收端接受进行语义理解,获知使用者目的 -> 参数一
  • 当获知目的之后,先对当前状态进行分析(所处环境和当前执行任务状态) -> 参数二
  • 将获取到的两参数都传于任务编排模型后,基于当前状态和命令创建后续流程
  • 最后按步骤执行任务即可

三、所需技术 #

  1. 语音识别:
    1. 本地部署模型可选用阿里Paraformer,地址:https://github.com/modelscope/FunASR/wiki/paraformer, 我这里也有个demo项目: https://github.com/IanVzs/asr 基本和wiki里示例一样
      1. 如果需要tts的话可以用: https://github.com/kuangdd/ttskit, 可以在执行动作的时候“说”出来调试用
    2. 或者调讯飞服务接口,地址:https://www.xfyun.cn/doc/asr/voicedictation/API.html#%E6%8E%A5%E5%8F%A3%E8%B0%83%E7%94%A8%E6%B5%81%E7%A8%8B 以上两个都涵盖了流式和语音文件识别两种方式,准确率都相当高可以满足几乎任何场合使用
  2. 图像识别:
    1. 目标识别可用yolo,或者用飞桨相关模型,不过这两个只能获取到二维信息,要对物体进行准确定位还需要搭配“双目深度估计算法”才可以组装出来三维信息
    2. 当然也可以用多模态大模型替换yolo,但是速度会变慢,其获取到的还是二维数据,可以对视野里的物体进行广泛的识别但是无法做到精准定位:https://community.modelscope.cn/669e26f4962e585a2565ab42.html
  3. 压力感知或其他传感器:
    1. 嵌入式内容, 具体情况具体实现
  4. 大模型prompt工程和微调:
    1. prompt可以满足大多数场景需求,可见: https://www.promptingguide.ai/zh
    2. 微调Lora技术 有需要再看,具体得根据大模型选型,去看相对应大模型的具体微调文档
      1. 汉语类的可选ChatGLM, QWen这些
      2. Mixtral-8x7b 这种混合模型或许更适合你的使用场景

四、优化点 #

在跑通最小系统的单线程流程之后, 就可以就任务中断、处理干扰、大模型效果优化进行对点的提升。 所用方案大体上也就是:

  1. 同步改异步:将最小系统流程中的步骤由1->2->3->4修改为互相独立的1, 2, 3, 4每个任务都基于事件变化进行触发,如拿红球,突然视野中红球全部变为绿球,因外界状态改变就应自主触发第三步编排任务对当前的抓取动作进行中断。
  2. 多任务融合:
    1. 续接1中红绿球所描述的,对抓取红球和取消抓取动作这两个任务进行融合
    2. 或者说原本视野只有一个红球,突然变成两个,就需要对抓取一个红球的任务编排和抓取两个红球的任务编排进行融合
  3. 对大语言模型进行“驯化”,固化大模型输出内容格式,链式思考提升准确度:
    1. 大语言模型经常性胡言乱语或逻辑不准,很正常,需要反复了解把控
    2. 需要对大模型动作做风控

总之,以上工作所涉领域很多,每个领域所要求都偏高,要实现只能是搭积木。这样就使得这个工作更加偏向工程一些,并不怎么偏研究类。语音识别能力现在已经相当高尽管拿来用,不用投入无用时间。 图像这块儿所投入的精力会比较多,尤其是在具体定位某个物体上。

要用传感器的话,那嵌入式相关知识也得掌握。

大模型的作用在这里无非就是比专业的小模型更为通用,可以处理更多意料之外的状况,但是相对应的,还得专门写一个针对它的乱输出的风控。

另一个耗时点就是在任务编排上,需要你自己整理出一些通用、独立不耦合的子任务,交由大模型去搭积木,这就是你和大模型去磨合的过程,会很烦。