【CSDN 编者按】ChatGPT 的问世,带来了前所未有的智能应用新方式。如果“AI+AI”,会碰撞出什么样的火花?近日,国外一名 Web 高级工程师 Mate Marschalko 将 ChatGPT 和 Siri 人工智能语言助手进行了结合,万万没想到,一套更为完善的智能家居系统由此诞生了。
原文链接:https://matemarschalko.medium.com/chatgpt-in-an-ios-shortcut-worlds-smartest-homekit-voice-assistant-9a33b780007a
声明:本文为 CSDN 翻译,未经允许,禁止转载。
作者 | Mate Marschalko
译者 | 弯月 责编 | 屠敏
出品 | CSDN(ID:CSDNnews)
自从我尝试了 ChatGPT 和 GPT-3 以后,我觉得 Siri、Alexa、Google Home 等一切智能助手都远不够智能。
我有一个完整的 HomeKit 智能家居系统,其中包含几十盏灯、恒温器、地暖、通风装置、摄像头等家电的控制。所以,我想利用 GPT-3 解析人类发送的命令,然后由 Siri 代为执行,构建出这个世界上最伟大的智能家居系统。
在具体讨论细节之前,先来看看下面的演示。事先说明,智能家居系统给出的响应是可以完全定制的,并不限于演示中的内容。你可以通过语音按照自己想要的方式提出任何请求!
智能家居系统“编程”
GPT-3,尤其是 ChatGPT 之类的语言模型经过了对话训练,因此它们非常擅长理解和响应人类的指令。
如果你曾尝试过与这些机器人聊天,就知道如何轻松地提出问题,并获得各种格式的回复。难点在于,在控制智能家居时,你需要交代清楚具体与哪个组件交互。怎么解决这个问题?
你可以要求 GPT-3 解释和分类你的请求,然后以结构化的数据格式响应请求。
下面是我给 ChatGPT 的提示,通过这些提示实现了成功交流。内容大致如下:
首先,发送到智能家居系统的请求,返回的 JSON 格式的响应可被应用程序代码解释,并执行动作。这些请求应被分类为四大组:
-
-“查询”:获取组件的状态(必须以 JSON 格式响应返回的属性:动作、地点、目标、值、备注、计划时间戳)。
-
“回答”:当请求不涉及智能家居时,根据系统掌握的知识给出最佳答案。(必须以 JSON 格式响应返回的属性:动作、回答)。
-
“澄清”。当动作不明确,需要用户重新组织措辞时,要求用户提出更具体的请求。这类请求会被划分到“问题”动作。(必须以 JSON 格式响应返回的属性:动作、问题)。
有关 JSON 响应的细节:
-
“动作”属性应属于如下请求类别之一:“命令”、“查询”、“回答”、“澄清”。
-
“地点”属性应包含房间名,且为小写。
-
“目标”属性应为“照明”、“恒温器”、“毛巾架”或“地暖”,且为小写。
-
对于查询,“属性”属性应为“温度”或“状态”,且为小写。
-
对于命令,“命令”属性是附加备注,用于结束命令,让用户放心他们的命令已被处理。
-
对于命令,“计划时间戳”属性记录的是未来的时间戳,当用户希望稍后再发送命令时指定。
如果问题涉及个人,智能家居系统必须发挥情感大脑的作用,成为一个更加聪明的AI,且永远不会暴露个人身份。此外,智能家居系统还应提供其他领域的帮助,比如看孩子、自由时间、心理健康等。该系统目前服务的房屋位于英国圣奥尔本斯。当前时间为:2023年1月16日 11:56:31 GMT+0000。
智能家居系统的属性:
-
拥有厨房、客厅、办公室、浴室、卧室、阁楼、门厅、卫生间、花园、前院停车位。
-
能够控制每个房间照明的开关以及光照级别,并查询它们的状态。
-
能够控制每个房间的恒温器,并查询它们的状态。
-
打开浴室的毛巾架以及地热的开关,并查询它们的状态。
-
打开客厅的电视,调节音量。
-
阁楼的通风系统全天候工作,但加速开关可打开或关闭。
-
前院停车位的照明开关。
-
花园的照明开关。
响应为 JSON,不包含任何文本。
英文文本描述如下图所示:
图:训练智能家居系统的技巧
如上所示,我用英语解释了一切。我描述了请求的类型、响应的确切结构,并要求智能家居系统充当情感 AI,即使是涉及个人的问题也能提供建议。我还提供了一些关于时间、地点以及房屋内的设备和房间的详细信息。有了这些,我们就能收到结构完美的响应了。
以上就是“编程”的所有工作!
不同类型的请求
下面,我们通过视频中的几个示例来看看四种类别的请求,以及我们如何处理它们。
当 GPT-3 检测到你希望控制某一部分智能家居时,它就会响应一个“命令”类型的动作。
我们的请求是:
Just noticed that I’m recording this video in the dark in the office.
Can you do something about that?
刚发现我在昏暗的办公室内录制这段视频。你能帮帮忙吗?
我们得到了如下响应:
"action": "command",
"location": "office",
"target": "light",
"value": "on",
"comment": "Turning the light on for you.",
"scheduleTimeStamp": ""
老实说,第一次看到这个响应的时候,我简直不敢相信自己的眼睛,系统的表现竟能如此出色!
这并不是一个直白的请求,比如“关掉办公室的灯”,我们的措辞非常绕,而且很复杂。而它给出的回答完胜 Siri、Alexa 或 Google Home 等。
另外,请注意,智能家居系统发回来的 comment (备注)总有些不同,而且可按照个人要求进行个性化设置。
有了这些信息,我们就知道具体需要做什么,而接下来我们需要通过 Siri 处理这个动作。
你可能还注意到,响应中包含一个空的 scheduleTimeStamp (计划时间戳)。这意味着,该动作需要立即执行,如果是稍后再执行的命令,该字段内就会预填充未来的日期和时间:
I sent my son to bed to read for another 20 minutes. Can you switch of the lights in his room when it’s time to sleep?
我让儿子上床再读 20 分钟的书。你能在他睡觉的时候关掉他房间里的灯吗?
在这种情况下,GPT-3 知道需要关闭卧室的灯,而且还添加了正确的时间戳,即接到我们的请求后 20 分钟:
"action": "command",
"location": "bedroom",
"target": "light",
"value": "off",
"comment": "Switching the lights off in your son's bedroom.",
"scheduleTimeStamp": "Mon Jan 16 2023 12:16:31 GMT+0000"
还有一个有趣的例子,智能家居系统能够代替我决定,应该将卧室的温度设置到多少度:
I’m going to trust you with this one! Set the bedroom to a temperature you think would help me sleep better.
我相信你能做好这个任务!将卧室的温度设置为你认为可以帮助我更好地入眠的温度。
而它根据自己的知识,将卧室温度设置成了舒适的 19 度!
当 GPT-3 检测到你希望读取智能家居的设备状态时,它就会按照“查询”的动作类别返回响应。
请求例子:
I just finished cooking a nice big meal in the kitchen, can you check what’s the temperature there?
我刚刚在厨房里做了一顿丰盛的大餐,你能看看现在那里的温度是多少吗?
我们得到的响应是:
"action" : "query",
"location" : "kitchen",
"target" : "thermostat",
"property" : "temperature"
完美!操作类型变成了查询,因此我们可以获取厨房恒温器的温度了。同样,稍后我们将通过 Siri 执行此操作。
当 GPT-3 检测到你的请求与智能家居无关,只是一个一般性的问题时,它会以“回答”的动作响应请求。
举个例子:
We are going to head out for a short walk into the town center.
Can you recommend a few things to see?
我们打算去镇中心散步。你能推荐一些值得一看的地方吗?
因为我在请求中告诉 GPT-3 智能家居系统的位置是英国圣奥尔本斯,因此它知道如何响应。
"action": "answer",
"answer": "St Albans has a great selection of historical sites and attractions. The St Albans Cathedral is an impressive sight with its Norman architecture. The Verulamium Park is also a great place to visit with its Roman ruins and lovely gardens. For a more modern experience, you can visit the Museum of St Albans or the Alban Arena for a show."
简洁漂亮!同样,我们需要将这个响应发送给 Siri 大声读出来。
最后,如果 GPT-3 无法检测到上述动作中的任何一个,它就会要求你重复问题或重新组织语言。
通过 Siri 处理数据
在 iOS、macOS 或 iPadOS 上,打开快捷方式应用程序,并添加请求的详细信息。
此处有一个技巧,必须运行快捷方式,只需对 Siri 说出快捷方式的名称即可。所以,我们可以将其命名为“Okay Smart Home”。
接下来,通过“Ask for <文本>...”操作,获得用户的响应。如果通过 Siri 启动快捷方式,则需要大声说出来;如果通过单击快捷方式运行应用程序,则需键入输入字段。
下面,我们将请求发送给 OpenAI。为此,你需要注册一个账号,并获取 API 令牌。登录后,你可以通过菜单“View API keys”查看 API 令牌。
如果使用这个 API,每个请求需要支付的费用约为1.4美分,也就是说1美元可以执行 70 多个请求。请记住,这个价格并不便宜,因为我们的请求很长,如果是较短的请求,费用也会按比例减少。
准备好 API 令牌后,我们来填写请求的详细信息:
header部分需要添加以下选项:
从 API 获得响应后,我们需要从 JSON 响应中提取数据。然后将数据分配给一个 JSON 变量,接着提取动作类别:
有了这些信息,我们就可以通过一个 if 语句来检查动作类型:
在得知动作类型为“命令”后,我们再添加一个 if 语句来检查地点、目标以及值等字段,并触发动作,例如打开办公室的灯(Set Office Lights):
在“End If”语句之后,我们还需要显示 GPT-3 发过来的 comment(备注):
“查询”动作的处理也与之类似:
最后,“回答”和“澄清”类型的动作只显示或宣读结果,不做任何处理:
以上,通过一系列的 if else 语句,我们就完成了 Siri 的设置。
感觉如何?只需简单的英文说明,就可以创建自己的智能小助手,是不是很有趣?
但这只是一个例子。想象一下,你可以向 GPT-3 发送各种请求,然后通过 Siri 执行不同的操作,是不是觉得很科幻?
《2022-2023 中国开发者大调查》重磅启动,欢迎扫描下方二维码,参与问卷调研,更有 iPad 等精美大礼等你拿!
☞被 Twitter 解雇三个月,他带着竞品 Spill “杀”回来了!网友:这是什么爽文情节?
☞ChatGPT “克星”出现,OpenAI 重磅发布全新 AI 鉴别工具,网友吐槽:失败率太高啦!
☞网传微软苏州裁员:赔偿N+12个月工资;ChatGPT将上线付费订阅;Win 10数字许可停售 | 极客头条
【CSDN 编者按】ChatGPT 的问世,带来了前所未有的智能应用新方式。如果“AI+AI”,会碰撞出什么样的火花?近日,国外一名 Web 高级工程师 Mate Marschalko 将 ChatGPT 和 Siri 人工智能语言助手进行了结合,万万没想到,一套更为完善的智能家居系统由此诞生了。原文链接:https://matemarschalko.medium.com/chatgpt-in-a...
<h2>备忘录</h2>
<div class="input-container">
<input type="text" placeholder="添加新的备忘录" v-model="newMemo" @keyup.enter="addMemo">
<button @click="addMemo">添加</button>
<ul class="memo-list">
<li v-for="(memo, index) in memoList" :key="index">
<span class="memo-text">{{ memo }}</span>
<button class="delete-btn" @click="deleteMemo(index)">删除</button>
</template>
<script>
export default {
data() {
return {
newMemo: '',
memoList: []
methods: {
addMemo() {
if (this.newMemo.trim() !== '') {
this.memoList.push(this.newMemo.trim())
this.newMemo = ''
deleteMemo(index) {
this.memoList.splice(index, 1)
</script>
<style scoped>
.memo {
max-width: 600px;
margin: 0 auto;
padding: 20px;
font-family: Arial, sans-serif;
text-align: center;
.memo h2 {
font-size: 24px;
font-weight: bold;
margin-bottom: 20px;
.input-container {
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20px;
.input-container input[type=text] {
width: 70%;
padding: 10px;
border: none;
border-radius: 4px;
font-size: 16px;
margin-right: 10px;
.input-container button {
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
padding: 10px;
font-size: 16px;
.memo-list {
list-style: none;
padding: 0;
margin: 0;
.memo-list li {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px;
border-bottom: 1px solid #ddd;
.memo-list li:last-child {
border-bottom: none;
.memo-list li .memo-text {
flex: 1;
text-align: left;
.memo-list li .delete-btn {
background-color: #f44336;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
padding: 10px;
font-size: 16px;
</style>
这个备忘录的界面和
苹果
手机的备忘录类似,你可以在
苹果
手机上参考备忘录的布局和样式设计。