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

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

雷老板的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:有需要本地部署大模型可以联系站长。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习:面相对象

面向对象 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实…

测试打工仔的5年职场感悟:软件测试还有未来吗?

工作过程 目前坐标广州,从毕业至今五年一直在当前的公司工作着,从部门最开始的十几人团队发展到现在的将近两百号人,几年了没换工作不是因为习惯舒适区,相反这一路过来都是不断的突破,因为团队在快速壮大,…

RK3568驱动指南|第十四篇 单总线-第158章DS18B20编写字符设备驱动框架

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

南达股份携手数环通iPaaS,打造统一的接口集成管理平台

01 客户背景 南达股份成立于2004年,专注农业种植、畜牧养殖、精深加工为一体的生态循环产业发展。以乳制品、特色林果产品和特色食品为主营业务;优选源自帕米尔高原纯净区域的生态物产,精心打造一、二、三产业融合的大健康产业。 南达股份是农…

1区、TOP、CCF推荐,最快16天录用!4月刊源表已更新!

毕业推荐 SSCI • 社科类,分区稳步上升(最快13天录用) IEEE: • 计算机类,1区(TOP),CCF推荐 SCIE • 计算机工程类,CCF推荐(最快16天录用) 2024年4月 SCI/SSCI/EI…

Vue基础配置、组件通信、自定义指令

基础配置 Vue框架已经集成了webpack配置 小注意点 vbase 快速生成vue模板 组件名必须是多词格式(驼峰模式) 具体三种写法: ①小驼峰:abcDef.vue ②大驼峰:AbcDef.vue ③中横线:abc-def.vue 假如文件名不符合多次格式的补救办法: 导出重命名…

回溯算法|90.子集II

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex, vector<bool>& used) {result.push_back(path);for (int i startIndex; i < nums.si…

clickhouse sql使用2

1、多条件选择 multiIf(cond_1, then_1, cond_2, then_2, …, else) select multiIf(true,0,1) 当第一条件不成立看第二条件判断 第一个参数条件参数&#xff0c;第二参数条件成立时走 2、clickhouse 在计算时候长出现NaN和Infinity异常处理 isNaN()和isInfinite()处理

某金融单位微软AD国产化替代方案分享与收获

某金融单位是宁盾长期服务的老客户&#xff0c;一直使用宁盾的2FA双因子认证&#xff08;OTP动态口令&#xff09;及网络准入服务。近日&#xff0c;该公司 IT 经理找到宁盾咨询关于微软 AD&#xff08;活动目录&#xff09;替代事宜。在与客户当面交流后&#xff0c;宁盾将客户…

Runes 生态一周要览 ▣ 2024.3.25-3.31|Runes 协议更新 BTC 减半在即

Runes 生态大事摘要 1、Casey 发布了 Runes 协议文档 RUNES HAVE DOCS&#xff0c;Github 代码库更新到 ord 0.17.0 版本&#xff0c;Casey 表示符文是一个“严肃”的代币协议。 2、Casey 公布了第一个硬编码的创世符文「UNCOMMONGOODS」 3、4月7日香港沙龙&#xff5c;聚焦「…

Linux:入门篇

文章目录 前言1. Linuxd的安装环境2.Linux的简单介绍2.1 新建目录2.2 新建文件 3.指令到底是什么&#xff1f;4.shell命令以及运行原理5.总结 前言 很多人对于Linux的学习总是感觉无法下手&#xff0c;不知道从何开始学习&#xff0c;相信这篇文章将会为你提供一个清晰的思路。…

基于PHP的校园招聘管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的校园招聘管理系统 一 介绍 此校园招聘管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为个人用户&#xff0c;企业和管理员三种。 技术栈&#xff1a;phpmysqlbootstrapphpstudyvscode 二…

实现3D模型无变形的减面渲染方法---模大狮模型网

在进行3D模型渲染时&#xff0c;减面(或降面)是一种常用的优化技术&#xff0c;用于降低模型的复杂度&#xff0c;提高渲染效率。然而&#xff0c;在减面过程中&#xff0c;若不小心可能会引起模型的形变或细节丢失。模大狮将介绍一些方法和技巧&#xff0c;帮助您在减面渲染时…

算法错题本

这里写目录标题 错题本注意数据的耦合性对于无解情况的处理思路一组数据以0为结束标记&#xff0c;如何输入到数组中&#xff0c;并计数多个数据进行比较链表删除重复元素的启发循环体里谨慎写类型定义并初始化&#xff08;一般写上就是错&#xff09;队列中读取队尾元素数组当…

AE——重构数字(Pytorch+mnist)

1、简介 AE&#xff08;自编码器&#xff09;由编码器和解码器组成&#xff0c;编码器将输入数据映射到潜在空间&#xff0c;解码器将潜在表示映射回原始输入空间。AE的训练目标通常是最小化重构误差&#xff0c;即尽可能地重构输入数据&#xff0c;使得解码器输出与原始输入尽…

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

道本科技智慧合规助力企业转型升级

在当今这个快速变化的商业世界里&#xff0c;企业合规管理已经从一项基本的监管要求转变为推动企业持续发展的关键动力。合规不仅是避免法律麻烦的盾牌&#xff0c;它还充当着引领企业向更高效、更可靠和更可持续方向发展的催化剂。而在实现这一目标的过程中&#xff0c;智慧合…

1区SCI,1个月左右录用,1周见刊,各项指标优秀,强推!

毕业推荐 SSCI • 社科类&#xff0c;分区稳步上升&#xff08;最快13天录用&#xff09; IEEE&#xff1a; • 计算机类&#xff0c;1区(TOP)&#xff0c;CCF推荐 SCIE • 计算机工程类&#xff0c;CCF推荐&#xff08;最快16天录用&#xff09; 计算机类 ● 好刊解读 …

websocket 局域网 webrtc 一对一 多对多 视频通话 的示例

基本介绍 WebRTC&#xff08;Web Real-Time Communications&#xff09;是一项实时通讯技术&#xff0c;它允许网络应用或者站点&#xff0c;在不借助中间媒介的情况下&#xff0c;建立浏览器之间点对点&#xff08;Peer-to-Peer&#xff09;的连接&#xff0c;实现视频流和&am…

k8s存储学习 emptyDir 卷

官网描述&#xff1a; 对于定义了emptyDir卷的Pod&#xff0c;在Pod被指派到某节点时此卷会被创建。就像其名称所表示的那样&#xff0c;emptyDir卷最初是空的。尽管Pod中的容器挂载emptyDir卷的路径可能相同也可能不容。但这些容器都可以读写emptyDir卷中相同的文件。当Pod因…