當前位置:
首頁 > 知識 > 如何用 Python 打造一個聊天機器人?

如何用 Python 打造一個聊天機器人?


點擊上方

Python開發

」,選擇「置頂公眾號」


關鍵時刻,第一時間送達!



聊天機器人(Bot) 是一種像 Slack 一樣的實用的互動聊天服務方式。如果你之前從來沒有建立過聊天機器人,那麼這篇文章提供了一個簡單的入門指南,告訴你如何用 Python 結合 Slack API 建立你第一個聊天機器人。


我們通過搭建你的開發環境, 獲得一個 Slack API 的聊天機器人令牌,並用 Pyhon 開發一個簡單聊天機器人。


我們所需的工具


我們的聊天機器人我們將它稱作為「StarterBot」,它需要 Python 和 Slack API。要運行我們的 Python 代碼,我們需要:




  • Python 2 或者 Python 3



  • pip 和 virtualenv 來處理 Python 應用程序依賴關係



  • 一個可以訪問 API 的免費 Slack 賬號,或者你可以註冊一個 Slack Developer Hangout team。



  • 通過 Slack 團隊建立的官方 Python Slack 客戶端代碼庫



  • Slack API 測試令牌


當你在本教程中進行構建時,Slack API 文檔 是很有用的。


本教程中所有的代碼都放在 slack-starterbot 公共庫里,並以 MIT 許可證開源。


搭建我們的環境


我們現在已經知道我們的項目需要什麼樣的工具,因此讓我們來搭建我們所的開發環境吧。首先到終端上(或者 Windows 上的命令提示符)並且切換到你想要存儲這個項目的目錄。在那個目錄里,創建一個新的 virtualenv 以便和其他的 Python 項目相隔離我們的應用程序依賴關係。



激活 virtualenv:




你的提示符現在應該看起來如截圖:




已經激活的starterbot的virtualenv的命令提示符這個官方的 slack 客戶端 API 幫助庫是由 Slack 建立的,它可以通過 Slack 通道發送和接收消息。通過這個pip 命令安裝 slackclient 庫:



當 pip 命令完成時,你應該看到類似這樣的輸出,並返回提示符。




在已經激活的virtualenv用pip安裝slackclient的輸出我們也需要為我們的Slack項目獲得一個訪問令牌,以便我們的聊天機器人可以用它來連接到Slack API。


Slack 實時消息傳遞(RTM)API


Slack 允許程序通過一個 Web API 來訪問他們的消息傳遞通道。去這個 Slack Web API 頁面 註冊建立你自己的 Slack 項目。你也可以登錄一個你擁有管理許可權的已有賬號。




使用 Web API頁面的右上角登錄按鈕登錄後你會到達 聊天機器人用戶頁面。




定製聊天機器人用戶頁面給你的聊天機器人起名為「starterbot」然後點擊 「Add bot integration」 按鈕。




添加一個bot integration 並起名為「starterbot」這個頁面將重新載入,你將看到一個新生成的訪問令牌。你還可以將標誌改成你自己設計的。例如我給的這個「Full Stack Python」標誌。





為你的新 Slack 聊天機器人複製和粘貼訪問令牌在頁面底部點擊「Save Integration」按鈕。你的聊天機器人現在已經準備好連接 Slack API。


Python 開發人員的一個常見的做法是以環境變數輸出秘密令牌。輸出的Slack令牌名字為SLACK_BOT_TOKEN:



好了,我們現在得到了將這個 Slack API 用作聊天機器人的授權。


我們建立聊天機器人還需要更多信息:我們的聊天機器人的 ID。接下來我們將會寫一個簡短的腳本,從 Slack API 獲得該 ID。


獲得我們聊天機器人的 ID


這是最後寫一些 Python 代碼的時候了! 我們編寫一個簡短的 Python 腳本獲得 StarterBot 的 ID 來熱身一下。這個 ID 基於 Slack 項目而不同。


我們需要該ID,當解析從Slack RTM上發給StarterBot的消息時,它用於對我們的應用驗明正身。我們的腳本也會測試我們SLACK_BOT_TOKEN環境變數是否設置正確。


建立一個命名為printbotid.py的新文件,並且填入下面的代碼:




我們的代碼導入SlackClient,並用我們設置的環境變數SLACK_BOT_TOKEN實例化它。 當該腳本通過python命令執行時,我們通過會訪問Slack API列出所有的 Slack 用戶並且獲得匹配一個名字為「satrterbot」的ID。


這個獲得聊天機器人的ID的腳本我們僅需要運行一次。



當它運行為我們提供了聊天機器人的ID時,腳本會列印出簡單的一行輸出。



在你的Slack 項目中用Python腳本列印Slack聊天機器人的ID複製這個腳本列印出的唯一ID。並將該ID作為一個環境變數BOT_ID輸出。



這個腳本僅僅需要運行一次來獲得聊天機器人的ID。 我們現在可以在我們的運行StarterBot的Python應用程序中使用這個ID。


編碼我們的 StarterBot


現在我們擁有了寫我們的StarterBot代碼所需的一切。 創建一個新文件命名為starterbot.py,它包括以下代碼。



對os和SlackClient的導入我們看起來很熟悉,因為我們已經在theprintbotid.py中用過它們了。


通過我們導入的依賴包,我們可以使用它們獲得環境變數值,並實例化Slack客戶端。



該代碼通過我們以輸出的環境變數SLACK_BOT_TOKEN 實例化SlackClient`客戶端。



Slack 客戶端會連接到 Slack RTM API WebSocket,然後當解析來自 firehose 的消息時會不斷循環。如果有任何發給 StarterBot 的消息,那麼一個被稱作 handle_command 的函數會決定做什麼。


接下來添加兩個函數來解析 Slack 的輸出並處理命令。



parse_slack_output 函數從 Slack 接受信息,並且如果它們是發給我們的 StarterBot 時會作出判斷。消息以一個給我們的聊天機器人 ID 的直接命令開始,然後交由我們的代碼處理。目前只是通過 Slack 管道發布一個消息回去告訴用戶去多寫一些 Python 代碼!


這是整個程序組合在一起的樣子 (你也可以 在 GitHub 中查看該文件):




現在我們的代碼已經有了,我們可以通過 python starterbot.py 來運行我們 StarterBot 的代碼了。




當 StarterBot 開始運行而且連接到 API 的輸出通道在 Slack 中創建新通道,並且把 StarterBot 邀請進來,或者把 StarterBot 邀請進一個已經存在的通道中。



在Slack界面創建一個新通道並且邀請 StarterBot現在在你的通道中給 StarterBot 發命令。



在你的Slack通道里給你的 StarterBot 發命令如果你從聊天機器人得到的響應中遇見問題,你可能需要做一個修改。正如上面所寫的這個教程,其中一行AT_BOT = 「<@」 + BOT_ID + 「>:」,在「@starter」(你給你自己的聊天機器人起的名字)後需要一個冒號。從 AT_BOT 字元串後面移除:。Slack 似乎需要在@ 一個人名後加一個冒號,但這好像是有些不協調的。


結束


好吧,你現在已經獲得一個簡易的聊天機器人,你可以在代碼中很多地方加入你想要創建的任何特性。


我們能夠使用 Slack RTM API 和 Python 完成很多功能。看看通過這些文章你還可以學習到什麼:




  • 附加一個持久的關係資料庫 或者 NoSQL 後端 比如 PostgreSQL、MySQL 或者 SQLite ,來保存和檢索用戶數據



  • 添加另外一個與聊天機器人互動的通道,比如 簡訊 或者電話呼叫



  • 集成其它的 web API,比如 GitHub、Twilio 或者 api.ai





  • 原文:fullstackpython.com



  • 譯文:http://linux.cn



  • 譯者:jiajia9linuxer



  • Python開發整理髮布,轉載請聯繫作者獲得授權


【點擊成為Java大神】

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python開發 的精彩文章:

python wsgi 簡介
相見恨晚的 itertools 庫

TAG:Python開發 |