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

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

雷老板的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.mzph.cn/news/787524.shtml

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

相关文章

strlen与sizeof区别

1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是取字节运算符(关键字),strlen是函数。 3.sizeof可以用类型做参数,strlen只能…

PyTorch学习之:深入理解神经网络

使用torch.nn模块构建网络架构 在PyTorch中,torch.nn模块是构建神经网络的核心。使用这个模块,你可以轻松地定义网络层、激活函数、损失函数等。以下是使用torch.nn构建一个简单神经网络架构的步骤: 步骤1: 定义网络结构 首先,…

STC8H8K64U 学习笔记 - 与上位机通信

与上位机通信 在天问中编程,通过分支判断来接收 PyQt 的传递的信号,进而控制单片机的点灯操作。 环境说明 该内容仅针对我自己学习的开发板做的笔记,在实际开发中需要针对目标电路板的原理图进行针对性研究。 芯片:STC8H8K64U烧录…

C++ 让类只在堆或栈上分配

1. 让类只在栈上或堆上分配内存 在C中,类的对象建立分为两种: 一种是静态建立,如A a; 另一种是动态建立,如A* ptrnew A;这两种方式是有区别的。 1、静态建立类对象:是由编译器为对象在栈空间…

掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)

在Go语言中,类型转换指的是将一个数据类型的值转换为另一个数据类型的过程。Go语言中的类型转换通常用于将一种数据类型转换为另一种数据类型,以满足特定操作或需求。 类型转换的基本语法 在Go语言中,类型转换的基本语法为: ne…

Redis Stack 安装部署

参考:Run Redis Stack on Docker | Redis Redis-stack 初体验_redis stack-CSDN博客 【docker】运行redis_docker run redis-stack-server requirepass-CSDN博客 Redis Stack 是一组软件套件,它主要由三部分组成。 一个是 Redis Stack Server&#x…

艺术点亮新乡村--博罗县“村ART“乡村艺术创作大赛圆满落幕

三月的博罗大地春意盎然,处处洋溢着勃勃生机。在这万物复苏、欣欣向荣的美好时节,一场由农民自编自演、自导自绘的乡村文化盛宴在古朴幽静的徐田村徐徐拉开帷幕。由博罗县委宣传部倾情指导,县文联、文广旅体局、文明办通力合作,泰康保险集团鼎力承办的"村ART"乡村艺术…

AI技术创业:探索无限商机与创新之路

AI技术创业在当前数字化时代呈现出蓬勃发展的态势,为创业者提供了广阔的机会和无限的可能性。随着AI技术的不断进步和应用领域的拓展,从智能家居到自动驾驶,从医疗健康到金融服务,几乎每一个行业都在积极拥抱AI,寻求创…

多功能知识付费源码下载-实现流量互导多渠道变现(带详细安装教程)

资源变现类产品的许多优势,并剔除了那些无关紧要的元素,使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 支持:视频、音频、图文、文档、会员、社群、用户发布、创作分成、任务裂变、流量主、在线…

MySQL DBA 需要了解一下 InnoDB Online DDL 算法更新

在 MySQL 8.0.12 中,我们引入了一种新的 DDL 算法,该算法在更改表的定义时不会阻塞表。第一个即时操作是在表格末尾添加一列,这是来自腾讯游戏的贡献。 然后在 MySQL 8.0.29 中,我们添加了在表中任意位置添加(或删除&…

14种建模语言(UML)图形

前言 UML 中有四种关系:依赖、关联、泛化和实现。这四种关系是 UML 模型中可以包含的基本关系事物。这里介绍14种UML图形:类图,对象图,包图,构件图,组合结构图,部署图,制品图,用例图…

sql之每日五题day02--多表联查/聚合函数/多值判断/函数

sql之每日五题day01--多表联查/聚合函数 where和group by同时出现分别查看&结果不去重--union allunion all细节别名case when多值判断数据处理函数 where和group by同时出现 SQL24 统计每个用户的平均刷题数 仅查看山东大学的用户在不同难度下的每个用户的平均答题题目数…

DNDC模型对所有处理的土壤温度和湿度模拟效果良好,但有时土壤湿度模拟存在偏差

使用 DNDC 模型评估加拿大多样化作物轮作系统对产量和 N2O 排放的影响 原名:Assessing the impacts of diversified crop rotation systems on yields and nitrous oxide emissions in Canada using the DNDC model 译名:使用 DNDC 模型评估加拿大多样…

爬虫逆向实战(39)-某某兔装修网登陆(RSA)

一、数据接口分析 主页地址:某某兔装修网 1、抓包 通过抓包可以发现登陆是表单提交 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块,可以发现有一个val和password的加密参数 请求头是否加密? 无响应是否加密…

vue 实现自定义分页打印 window.print

首先这里是我自定义了打印界面才实现的效果,如果不用自定义界面实现,应该是一样的吧。具体可能需要自己去试试看 我的需求是界面有两个表格,点击全部打印,我需要把第一表格在打印是第1页,第二个表格是第二页 如图&…

大宋咨询(深圳舆情监控)政府舆情调查介绍

公众舆论调查旨在收集和分析普通大众对各种主题和问题的观点、态度和意见,它可以帮助政府部门了解公众的意见和情绪,为政策制定和决策提供参考。这些调查旨在了解人群的集体情绪和偏好,并提供公众舆论的见解。 公众舆论调查可以涵盖广泛的主…

SmartChart的部署以及可能遇见的报错解决方案

简介 数据可视化是一种将数据转化为图形的技术,可以帮助人们更好地理解和分析数据。但是,传统的数据可视化开发往往需要编写大量的代码,或者使用复杂的拖拽工具,不仅耗时耗力,而且难以实现个性化的需求。有没有一种更…

pytorch中的while for 循环 导出onnx的问题

问题: for执行次数不跟据输入而改变。 解决方案: torch.jit.script 例如: class LoopAdd(torch.nn.Module):def __init__(self):super().__init__()def forward(self, x):h xfor i in range(x.size(0)):h h 1return h input_1 torch…

Sora是什么 Sora怎么使用OpenAI最新文字转视频AI模型Sora,一句子生成60秒超逼画面

1. 背景介绍 随着人工智能技术的不断发展,自然语言处理(NLP)和计算机视觉(CV)技术已经取得了显著的进步。近年来,将文本转换为视频的技术逐渐成为研究的热点。OpenAI最新推出的文字转视频AI模型Sora&#…