函数调用实现小米汽车智能语音助手

news2024/12/30 2:24:26

上周小米汽车发布,其中有一个特色功能就是智能语音,小爱同学整合了语音大模型,实现智能座舱体验。

雷老板的PPT也演示了,一些口语化的对话就能触发各种指令,无论是开空调、播放音乐,还是找手机、识别前方汽车,丝滑流畅。

其实这个就是语言大模型中的函数调用能力,ChatGPT老早就已经能力支持了,只是很多小伙伴们没有发觉,或者看到冗长的技术文档就觉得是很复杂的功能。

本期文章就聊聊如何简单、快速地使用语言大模型实现一个小米汽车同款的智能语音助手。

语音输入

语言转文字有很多成熟的解决方案,openai的wisper-1模型,或者讯飞听见,甚至是手机电脑自带的语音识别,识别语音的准确度都是很高的。

函数调用

ChatGPT大模型是现在市面上训练地最充分,也是国外的大模型中对中文支持最友好的一个。基于工作难度和响应速度考虑,gpt-3.5-turbo模型已经够用了。

系统预设

当然,为了让语言大模型能够准确地了解我们的使用场景,可以适当地添加系统预设,例如:

{
  "role": "system",
  "content": "你是一辆汽车内置的智能语言系统“小爱同学”,为乘客提供智能的语言交互服务,输出指令集。"
}

函数定义

然后就是指令集的定义,可以参考openai官方文档

https://platform.openai.com/docs/guides/function-calling

使用json-schema定义函数,语言大模型会根据语境输出如何调用函数。这里给大家提供一个json-schema数据的编辑工具

https://texttools.cn/json-schema/

我们可以简单定义一些车内的设备操作和程序指令,例如:

[
  {
    "name": "instruction_set",
    "description": "指令集",
    "parameters": {
      "type": "object",
      "title": "指令集",
      "properties": {
        "控制空调": {
          "type": "object",
          "title": "",
          "properties": {
            "opeartion": {
              "type": "string",
              "title": "",
              "enum": [
                "开启,关闭,调高温度,调低温度,调大风速,调低风速"
              ]
            }
          }
        },
        "控制音乐": {
          "type": "object",
          "title": "",
          "properties": {
            "opeartion": {
              "type": "string",
              "title": "",
              "enum": [
                "播放,暂停,大声,小声"
              ]
            }
          }
        },
        "执行程序": {
          "type": "object",
          "title": "",
          "properties": {
            "program": {
              "type": "array",
              "title": "",
              "items": {
                "type": "string",
                "title": "程序名称",
                "enum": [
                  "获取当前位置",
                  "识别前方车辆",
                  "识别左方建筑",
                  "识别右方建筑",
                  "推荐附近美食",
                  "定位手机"
                ]
              }
            }
          }
        }
      }
    }
  }
]

这里为了直观直接使用了中文的key,强迫症程序猿请忽略

语言输入

然后我们就可以模拟一下在车内的时候跟车载语音助手的互动,可以在一句话中包含了多个信息,现在的语言大模型是可以轻松地理解对话内容。

例如我们可以说:

"我有点热,车里太安静了,左边那个建筑是什么,前面那辆车是什么车"

接口调用

然后请求接口 

可以看到返回结果

{
  "控制空调": {
    "opeartion": "调低温度"
  },
  "控制音乐": {
    "opeartion": "播放"
  },
  "执行程序": {
    "program": ["识别左方建筑", "识别前方车辆"]
  }
}

返回的指令集包括了:

  • 空调调低温度

  • 播放音乐

  • 执行程序 识别左方建筑

  • 执行程序 识别前方车辆

这个指令集是严格按照我们预设的结构生成的,拿到这个指令集之后,就可以识别并执行对应的程序,还可以在预设这些场景输出的回答内容,例如“已调低空调温度”等。

贴一下详细的curl,执行的时候只要将 THIS_IS_YOUR_APIKEY 替换为你的apikey即可。

curl --request POST \
  --url https://api.smarttxt.net/v1/chat/completions \
  --header 'Authorization: Bearer THIS_IS_YOUR_APIKEY' \
  --header 'Content-Type: application/json' \
  --header 'content-type: application/json' \
  --data '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "system",
      "content": "你是一辆汽车内置的智能语言系统“小爱同学”,为乘客提供智能的语言交互服务,输出指令集。"
    },
    {
      "role": "user",
      "content": "我有点热,车里太安静了,左边那个建筑是什么,前面那辆车是什么车"
    }
  ],
  "functions": [{"name":"instruction_set","description":"指令集","parameters":{"type":"object","title":"指令集","properties":{"控制空调":{"type":"object","title":"","properties":{"opeartion":{"type":"string","title":"","enum":["开启,关闭,调高温度,调低温度,调大风速,调低风速"]}}},"控制音乐":{"type":"object","title":"","properties":{"opeartion":{"type":"string","title":"","enum":["播放,暂停,大声,小声"]}}},"执行程序":{"type":"object","title":"","properties":{"program":{"type":"array","title":"","items":{"type":"string","title":"程序名称","enum":["获取当前位置","识别前方车辆","识别左方建筑","识别右方建筑","推荐附近美食","定位手机"]}}}}}}}]
}'

点击获取apikey

到此,我们就已经实现了智能语音助手中最关键的“对话转指令”的能力。但是我们这个功能依赖的是线上的服务,为了保证离线时系统的可用性,我们还可以和小米汽车一样在本地部署一个大模型。

ps:有需要本地部署大模型可以联系站长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vulnhub pWnOS v2.0通关

知识点总结: 1.通过模块来寻找漏洞 2.msf查找漏洞 3.通过网站源代码,查看模块信息 环境准备 攻击机:kali2023 靶机:pWnOS v2.0 安装地址:pWnOS: 2.0 (Pre-Release) ~ VulnHub 在安装网址中看到,该靶…

axios 封装 http 请求详解

前言 Axios 是一个基于 Promise 的 HTTP 库,它的概念及使用方法本文不过多赘述,请参考:axios传送门 本文重点讲述下在项目中是如何利用 axios 封装 http 请求。 一、预设全局变量 在 /const/preset.js 中配置预先设置一些全局变量 window.…

【Qt 学习笔记】Qt 背景介绍

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt 背景介绍 文章编号:Qt 学习笔记 / 01 文章目录 Qt 背景…

vue 条件渲染、列表循环渲染、事件绑定 初探第三天

条件渲染 <script>const app Vue.createApp({data(){return {show:true,conditionOne: false,conditionTwo: true,}},template:<div v-if"show"> hello word </div><div v-if"conditionOne"> if </div><div v-else…

[lesson02]C到C++的升级

C到C的升级 C与C的关系 C继承了所有的C特性C在C的基础上提供了更多的语法和特性C的设计目标是运行效率与开发效率的统一 C到C的升级 C更强调语言的实用性 所有的变量都可以在需要使用时再定义 int c 0; for (int i 1; i < 3; i) {for(int j 1; j < 3; j){c i * …

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes&#xff08;k8s&#xff09;&#xff1a;部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…

国资委确定首批起航企业,重点布局人工智能、量子信息等新兴领域

国务院国资委近日按照“四新”&#xff08;新赛道、新技术、新平台、新机制&#xff09;标准&#xff0c;遴选确定了首批启航企业&#xff0c;加快新领域新赛道布局、培育发展新质生产力。 据了解&#xff0c;去年以来&#xff0c;国务院国资委围绕加快培育创新型国有企业&…

hadoop 查询hdfs资源信息的方式

hdfs dfsadmin -report &#xff3b;-live&#xff3d;&#xff3b;-dead&#xff3d;&#xff3b;-decommissioning&#xff3d;

用动态规划求解多段图的最短路径问题

题目描述 对如下图所示的一个5段图&#xff0c;图上的数字代表该段路径的成本。写出求最短路径的计算过程&#xff0c;给出最短路径和距离。 思路分析 创建一个边权数组edgeWeigth&#xff0c;存储顶点和边的信息&#xff0c;用来表示图创建一个cost数组&#xff0c;索引in…

【MySQL系列】使用 ALTER TABLE 语句修改表结构的方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

STM32 DWT数据观察触发器作为延时函数的使用

STM32 DWT数据观察触发器作为延时函数的使用 &#x1f4d1;DWT(Data Watchpoint and Trace数据观察触发器&#xff09;描述 &#x1f4dd;DWT是属于处理器内核单元中的调试组件之一&#xff0c;由四个比较器组成。它们可配置为&#xff1a;硬件监视点或对ETM或PC采样器或数据地…

智慧工厂建设全面指南 从规划到实施

随着工业4.0和工业互联网的发展&#xff0c;智慧工厂已成为制造业的热门话题。智慧工厂通过运用先进的信息技术、自动化技术和人工智能技术&#xff0c;实现生产过程的智能化、数字化和网络化&#xff0c;提高生产效率、降低生产成本、提升产品质量&#xff0c;为企业创造更大的…

【C++第二阶段】文件操作

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 文件操作文件写入流程简单的demo写操作 文件读流程二进制写文件二进制读文件 文件操作 文件写入流程 写文件包括以下几个步骤 1.包含头文件 2.创建流对象 3.打开文件&#xff0…

CSS面试题---基础

1、css选择器及优先级 选择器优先级&#xff1a;内联样式>id选择器>类选择器、属性选择器、伪类选择器>标签选择器、微元素选择器 注意&#xff1a; !important优先级最高&#xff1b; 如果优先级相同&#xff0c;则最后出现的样式生效&#xff1b; 继承得到的样式优先…

商城网站-礼品网站首页html+css+js+说明文档

网页设计与网站建设作业htmlcssjs 预览 说明 单页面&#xff0c;轮播图 获取&#xff1a;https://hpc.baicaitang.cn/2077.html

MyBatis-Plus04(条件构造器)

条件构造器和常用接口 wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装 UpdateWrapper &#xff1a; Update 条件封装 A…

【stm32】USART编码部分--串口数据包

USART串口数据包【源码放在最后】 关于数据包的分类 关于数据包的发送 如果想要发送Hex数据包&#xff0c;定义一个数组填充数据&#xff0c;然后使用串口模块函数SendArray进行发送 如果想要发送文本数据包&#xff0c;写一个字符串然后调用SendString进行发送 对于发送数据…

BEV的多传感器融合方案

多模态融合 早期融合&#xff08;Early Fusion&#xff09;晚期融合&#xff08;Late Fusion&#xff09;深度融合&#xff08;Deep Fusion&#xff09; BEVFusion - MITBEVFusion - 阿里&北大UniTR 感知技术中相机和雷达数据融合方法的概述&#xff0c;这些方法分别是早期…

[原创] MOS管选型

一、选型背景 MOS管是常用元器件之一&#xff0c;学校出来后&#xff0c;很多人都对BJT感兴趣和熟悉&#xff0c;对MOS的熟悉度相对BJT要少一些&#xff0c;即使工作了两三年&#xff0c;对MOS的理解也还是不多&#xff0c;下面通过对MOS管的一些参数解读&#xff0c;加深对MO…

第二届安徽省中小学科技竞赛经验交流会暨NOC省赛解读会在肥顺利举办

阳春三月&#xff0c;喜泰开来。3月30日&#xff0c;第二届安徽省中小学科技竞赛经验交流会暨NOC省赛解读会在合肥顺利举办&#xff01;本次会议由安徽省人工智能学会主办&#xff0c;赛哆哆承办&#xff0c;会议吸引了近两百名来自全省的中小学教师和科技培训教师&#xff0c;…