ユーザーの注意事項
813字程度約3分
2024-11-15
ユーザーへの指示は何ですか?
しかけると、开关灯、唱首歌、跳个舞。 使用には上記のシチュエーションとシチュエーションintentionの構成が必要です。
オープンプラットフォームでされるコマンドを使用する
オープン プラットフォームのアニメーションを を使用して直接フォームできます。簡単なSETUPでローカルデバイスのターミナルまたはリモートデバイスのターミナルの制御がすべてです。 高电平 と 低电平。状況、状況の可能性、構図の可能性を熟知している。グループみ込みコマンドをそのまま使用できます。 オープンプラットフォームがみ込まれています: 音量调到xx% 、大点声、小点声、退下吧、帮我写一首歌、主题我不想去上班。(以开放平台指令配置页面信息为准)
み込みコマンド
自己分割した本は同じ本に書かれています。
コマンド構成 intention。病気を開いた人は、病気の構成について必要な指示を書く必要があります。
今のグループは最高だよ。
| コマンド | 機能 |
|---|---|
__sleep__ | スリープステータスに入る |
__play_music__ | オーディオの生 (16k/24kのみをサポート) |
__io_high__ | ハードウェアピンをハイレベル出力します。 |
__io_low__ | ハードウェアピンをローレベル出力します。 |
const espAi = require("esp-ai");
const config = {
gen_client_config: ()=>({
// ...
/**
* 意图表:当用户唤醒 小明同学 后,小明同学可以做下面的任务
*/
intention: [
// 休眠
{
// 关键词
key: ["退下吧", "退下"],
// 内置的睡眠指令
instruct: "__sleep__",
message: "我先退下了,有需要再叫我。",
// 配置开放平台 api_key 后字符串类型的指令会进行NLP推理。
api_key: "xxx",
},
// 高电平指令
{
key: ["帮我开灯"],
instruct: "__io_high__", // 向客户端发送的指令
message: "开啦!",
pin: 21, // 控制的引脚
// 配置开放平台 api_key 后字符串类型的指令会进行NLP推理。
api_key: "xxx",
},
// 低电平指令
{
key: ["帮我关灯"],
instruct: "__io_low__", // 向客户端发送的指令
message: "关啦!",
pin: 21, // 控制的引脚
// 配置开放平台 api_key 后字符串类型的指令会进行NLP推理。
api_key: "xxx",
},
// 音频播放
{
/**
* 正则匹配
* 如:播放音乐最后的倔强
* 返回匹配的字符串为匹配成功
*/
key: async (text = "", llm_historys) => {
const regex = /^(播放音乐)(.*)$/;
const match = text.match(regex);
if (match) {
const songName = match[2];
console.log("音乐名称:", songName);
return songName;
} else {
return false;
}
},
// 向客户端发送的指令
instruct: "__play_music__",
message: "好的!",
/**
* 用于返回音频地址和播放进度
* 目前只支持 mp3、wav 格式
* @param {String} name 是歌曲名称
* @return {number} seek 进度: (以秒为单位)
* @return {message} 找不到数据时的TTS
*/
music_server: async (name, { user_config, signal, sendToClient }) => {
// 信号确认函数
// 每一个异步操作后都应该判断信号是否终止,终止后不应该继续逻辑
const checkCancellation = () => signal && signal.aborted;
return {
url:"https://xiaomingio.top/music.mp3",
seek: 0,
message: message
};
},
/**
* 当音频结束后的回调
* @param {object} arg.break_second 停止时的进度,单位秒。也就是用户播放了到了多少秒(seek+play_time)
* @param {object} arg.play_time 实际播放音频的时间,单位秒。
* @param {object} arg.seek 音频开始播放时间,其实也就是 music_server 函数中返回的 seek 值
* @param {object} arg.start_time 开始播放音频的 Unix 毫秒数时间戳
* @param {object} arg.end_time 结束播放音频的 Unix 毫秒数时间戳
* @param {object} arg.event 结束原因: "user_break" 用户打断 | play_end 播放完毕 | foo 未知事件
*/
on_end: (arg) => {
// 请求业务服务器保存进度信息 ...
console.log(arg);
}
},
],
})
};
const espAiIns = espAi(config);カスタムディレクティブ
グループみ込みディレクティブがビジネスに適さない機会は、カスタムディレクティブを使ってほぼ何でも行うことができます。
次のように、サーバー上でコマンドを設定します。コマンドワードは 开灯/打开灯 です。 ユーザーがこれら 2 つの単発を语うと、クライアントは device_open_001 コマンドを受け取りました。
ノデジ
const config = {
gen_client_config: async (){
return {
intention: [
{
key: ["开灯", "打开灯"],
// 向设备发送一个字符串,客户端使用 onEvent 监听
instruct: "device_open_001",
message: "好的"
},
]
}
}
}Arduino
void on_command(const String& command_id, const String& data) {
if (command_id == "device_open_001") {
digitalWrite(led_pin, LOW);
}
}
void setup() {
Serial.begin(115200);
pinMode(led_pin, OUTPUT);
esp_ai.begin({ ... });
// 用户指令监听
esp_ai.onEvent(on_command);
}
