午夜精品人妻久久久-成年美女很黄的网站-在线看片免费人成视久网app-国产精品美女无遮挡一区二区-91精品国产综合久久久久-国产的免费视频又猛又爽又刺激-在线看片免费人成视久网app-久久香蕉国产精品视频-av一区二区三区高清

創(chuàng)建簡單聊天AI機器人

用WebAPI 和 Node.js 創(chuàng)建一個簡單的 AI 聊天機器人
首先,我們要用 Node.js 搭建一個 Web 應(yīng)用框架 。創(chuàng)建你的應(yīng)用目錄 , 就像這樣:
.├── index.js├── public│├── css││└── style.css│└── js│└── script.js└── views└── index.html
然后 , 執(zhí)行下面的命令來初始化你的 Node.js 應(yīng)用:
nbsp;npm init -f
-f 命令表示接受默認(rèn)的配置(你也可以去掉,然后手動配置你的應(yīng)用),這樣會生成一個 .json 文件,包含一些基本信息 。
現(xiàn)在,安裝下面的依賴庫:
nbsp;npm install express socket.io apiai --save
–save 命令將會在 .json 中自動更新依賴 。
我們將要使用庫 , 一個 Node.js 寫的 Web 應(yīng)用服務(wù)框架 , 可以在本地運行服務(wù)器 。為了實現(xiàn)在瀏覽器和服務(wù)器之間實時雙向交流,我們將會使用 .IO 。同時 , 我們將會安裝自然語音處理服務(wù)工具,API.AI用來構(gòu)建一個 AI 聊天機器人 。
.IO 是一個在 Node.js 中輕松使用的庫 。通過在客戶端和服務(wù)端建立連接,只要 WebAPI(語音消息)或者 API.AI API (AI 消息)返回了文本數(shù)據(jù),我們的聊天信息就能在瀏覽器和服務(wù)器之間往返 。
現(xiàn)在,讓我們創(chuàng)建 index.js 文件,并實例化以及監(jiān)聽服務(wù)器:
const express = require('express');const app = express();app.use(express.static(__dirname + '/views')); // htmlapp.use(express.static(__dirname + '/public')); // js, css, imagesconst server = app.listen(5000);app.get('/', (req, res) => {res.sendFile('index.html');});
下一步,我們將使用 WebAPI 集成前端代碼 。
用接口接收語音
WebAPI 有一個主要的控制接口,叫 ,從麥克風(fēng)接收用戶的語音并加以識別 。
創(chuàng)建用戶界面
這個應(yīng)用的 UI 很簡單:一個打開語音識別的按鈕 。打開 index.html,將前端的 ja文件(.js)和 .IO包含進去 。
……
然后,我們在 body 中添加一個按鈕:

為了讓我們的按鈕看起來像 demo 中的那樣,我們需要在源代碼中引用 style.css 文件 。
用 ja捕捉聲音
在 .js 中 , 調(diào)用的實例,WebAPI 的控制接口:
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;const recognition = new SpeechRecognition();
我們同時使用了有前綴和沒有前綴的對象,因為目前支持 API 的前綴屬性 。
同時,我們使用了語法,因為 ES6,const 關(guān)鍵字和箭頭函數(shù)以及API 接口和都在瀏覽器中支持 。
你可以隨意地設(shè)置一些屬性變量來自定義語音識別:
recognition.lang = 'en-US';recognition.interimResults = false;
然后,拿到按鈕的 DOM 引用,監(jiān)聽點擊事件來初始化語音識別:
document.querySelector('button').addEventListener('click', () => {recognition.start();});
一旦開始語音識別,就能用事件將剛剛說的話轉(zhuǎn)成文本:
recognition.addEventListener('result', (e) => {let last = e.results.length - 1;let text = e.results[last][0].transcript;console.log('Confidence: ' + e.results[0][0].confidence);// We will use the Socket.IO here later…});
這將返回對象,你可以在這個對象的數(shù)組中得到文本結(jié)果 。同時,你可以看到上面代碼中返回的轉(zhuǎn)錄 。
現(xiàn)在,是時候使用 .IO 來向服務(wù)端發(fā)送文本了 。
用 .IO 實時交互
你可能會好奇為什么我們不用簡單的 HTTP 或者 AJAX 來代替 。你可以通過 POST 方法向服務(wù)端發(fā)送數(shù)據(jù),但是,通過 .IO,我們使用發(fā)送數(shù)據(jù) , 因為是雙向交流的最佳解決方案,尤其是當(dāng)我們從服務(wù)端向瀏覽器推送事件時 。通過持續(xù)的連接,我們不用重新加載瀏覽器或者頻繁地持續(xù)發(fā)送 AJAX 請求 。
在 .js 中實例化 :
const socket = io();
然后插入你監(jiān)聽的事件代碼:
socket.emit('chat message', text);
現(xiàn)在重新回到 Node.js 代碼,接收這條文本,然后使用 AI 響應(yīng)用戶 。
從 AI 中得到答復(fù)
許多平臺和服務(wù)都能夠讓你在應(yīng)用中用語音-文本自然語言處理來集成 AI 系統(tǒng),包括 IBM 的 ,微軟的 LUIS 和 臉書的 Wit.ai 。為了快速構(gòu)建對話界面,我們將使用 API.AI , 因為它提供了免費的開發(fā)者賬戶,讓我們可以使它的 Web 接口和 Node.js 庫快速地建立一個小型對話系統(tǒng) 。
設(shè)置 API.AI
創(chuàng)建一個賬戶后,你就創(chuàng)建了一個“代理” 。參考文檔指南的第一步 。
接著,點擊左邊菜單的 “Small Talk”,然后開啟啟用服務(wù)選項 。
用 API.AI 界面自定義你的 small-talk 代理 。
點擊菜單中你的代理名字旁邊的齒輪圖標(biāo),回到 “基本設(shè)置” 頁面 , 拿到 API 密鑰 。你將會在 Node.js SDK 中使用“客戶端訪問令牌” 。
使用 API.AI
我們將使用 Node.js SDK 來將我們的 Node.js 應(yīng)用連接到 API.AI ?;氐?index.js,用你的訪問令牌初始化 API.AI:
const apiai = require('apiai')(APIAI_TOKEN);
如果你只想在本地運行,你可以在這里硬編碼你的 API 密鑰 。這里有幾種方式來設(shè)置環(huán)境變量,但我通常使用 .env 文件來聲明變量 。在中的源碼中css如何做一個提交按鈕,我用 . 隱藏了我的證書文件 。但是你可以參考 .env-test 文件看看它是如何設(shè)置的 。
現(xiàn)在我們要用服務(wù)端的 .IO 來接收瀏覽器的數(shù)據(jù) 。
一旦建立連接收到消息css如何做一個提交按鈕,使用 API.AI 的接口來響應(yīng)用戶:
io.on('connection', function(socket) {socket.on('chat message', (text) => {// Get a reply from API.AIlet apiaiReq = apiai.textRequest(text, {sessionId: APIAI_SESSION_ID});apiaiReq.on('response', (response) => {let aiText = response.result.fulfillment.speech;socket.emit('bot reply', aiText); // Send the result back to the browser!});apiaiReq.on('error', (error) => {console.log(error);});apiaiReq.end();});});當(dāng) API.AI 返回結(jié)果后,用 Socket.IO 的 socket.emit() 方法發(fā)送到客戶端 。
用接口讓 AI 發(fā)出聲音
回到 .js,用 WebAPI 的控制器接口創(chuàng)建一個合成聲音的函數(shù) 。這個函數(shù)接收一個字符串參數(shù),讓瀏覽器讀出文本:
function synthVoice(text) {const synth = window.speechSynthesis;const utterance = new SpeechSynthesisUtterance();utterance.text = text;synth.speak(utterance);}
上面的代碼首先創(chuàng)建了一個 . 這個 API 接入點,你可能會注意到這次是沒有前綴屬性的 , 這個 API 比更廣泛地被支持,所有的瀏覽器都棄用了的前綴 。
接著創(chuàng)建了一個 ance() ,然后設(shè)置要被合成聲音的文本 。你可以設(shè)置其他的屬性 , 比如 voice,來選擇瀏覽器和操作系統(tǒng)支持的聲音類型 。最終調(diào)用 .speak() 來發(fā)出聲音 。
現(xiàn)在再次用 .IO 來獲得服務(wù)端響應(yīng),一旦消息收到了,就調(diào)用上面的函數(shù) 。
socket.on('bot reply', function(replyText) {synthVoice(replyText);});
讓我們來試試我們的 AI 機器人吧!
【創(chuàng)建簡單聊天AI機器人】本文到此結(jié)束,希望對大家有所幫助 。