大家好,我們是 AI . FREE Team - 人工智慧自由團隊,這一次的鐵人賽,自由團隊將從0到1 手把手教各位讀者學會 (1)Python基礎語法 (2)Python Web 網頁開發框架 – Django (3)Python網頁爬蟲 – 周易解夢網 (4)Tensorflow AI語言模型基礎與訓練 – LSTM (5)實際部屬AI解夢模型到Web框架上。
自由團隊的成立宗旨為開發AI/新科技的學習資源,提供各領域的學習者能夠跨域學習資料科學,並透過自主學習發展協槓職涯,結合智能應用到各式領域,無論是文、法、商、管、醫領域的朋友,都可以自由的學習AI技術。
AI . FREE Team 讀者專屬福利 → Python Basics 免費學習資源
今天我們會在 Django 上面 Run 一個 Chatterbot。不過我們並不用從無到有的去撰寫 Chatterbot Project 裡面所有的程式碼,我們會從 Github 上的開源程式碼當中 clone 一份專案到自己的本地端。有時,即便是面對特定的需求,可能先前就已經有人寫出了好用的版本了,所以這個時候我們這些準備要開發面對特定需求的功能的人就可以不用從頭開始撰寫,而是以那些已經造好的輪子做為基底來開發程式。
在今天,我們要取得的輪子,就是來自 Django-ChatterBot 的開源鼻祖 gunthercox 於 Github 的範例專案,這份連結出現在 Chatterbot Documentation 的 Django Integration 上,對於 Documentation 有興趣的話可以點此瞭解更多。
這是 python 世界中針對 AI語言模型 以及 聊天機器人 兩個領域所衍伸的套件,使用此套件之後,我們可以利用被定義好的方法來建立一個機器人,並且用不同的方式去 訓練 我們的聊天機器人。我們今天的主要目標是,將 Github 開源專案 clone 到本地端,然後排除一些相依性的問題之後(ex: Django Version 不同),我們最後會將程式架構在 Server 上 Run 起來。
在這邊,因為會牽涉到套件的下載,所以我會重新建立 PIPENV 虛擬環境,從安裝套件開始說明,不過大家可以使用原本的在開發 DI_project 時用的虛擬環境就好了,這一部分就只需要在原有的虛擬環境做 pipenv install chatterbot
即可,因為 Django 我們已經有安裝過了。
...\PIPENV_ROOT> mkdir chatterbot_virtual_env
...\PIPENV_ROOT> cd chatterbot_virtual_env
...\PIPENV_ROOT\chatterbot_virtual_env> pipenv --three
[====] Creating virtual environment......
...\PIPENV_ROOT\chatterbot_virtual_env> pipenv shell
Launching subshell in virtual environment…
...\PIPENV_ROOT\chatterbot_virtual_env> pipenv install django chatterbot
虛擬環境的套件準備好之後,我們就準備要將前輩的專案放入虛擬環境了,這邊可以有不止一種做法。大家可以先點此,然後就可以看到下面這個頁面: (Note: 還沒有 Github 帳號的人,也可以藉機辦一組喔!)
畫面中的內容,就是我們需要的內容,不過我們看到的內容其實只是整個 Chatterbot 專案的一部分而已,所以我們點擊畫面中左上方的 ChatterBot 連結,就可以看到下面的畫面。
這時候我們點擊右側的綠色 Download 按鈕,就可以看到取得開源專案的幾種方法了。
在這邊我們直接點選 Download ZIP,熟悉 Git 的夥伴也可以直接 git clone https://github.com/gunthercox/ChatterBot.git
。
解壓縮後,我們將裡面的 django_app/ 整個目錄裡面(含目錄)內容 放入已經建立的虛擬環境目錄底下(i.e. 像我就是 chatterbot_virtual_env/ 目錄底下)。(或也可以直接將整包解壓縮出來的內容放進目錄底下,只要再切換路徑至 .../chatterbot_virtual_env/ChatterBot-master/examples/django_app/)
所以在檔案總管,看到的結果就會像是下圖,(大家可以比對一下路徑)
小知識: 大家在上面那張圖可以看到有一個檔案是 requirements.txt,這份檔案通常是用來描述要 run 起此專案的話,我們會需要安裝哪些套件,所以其實在正常流程,我們會利用 pipenv install -r requirements.txt
的方式將目標版本的 Django, Chatterbot 等等安裝起來,但由於我們連續快十天都用了最新的 Django 版本了,所以這邊就不利用 requirements.txt 來下載相關的套件了,等等我們就會嘗試去 run,遇到 bug 就把它排除掉!
我們很快的切進 django_app/ 的路徑,然後
python manage.py runserver
應該馬上就會看 error 產生(ModuleNotFoundError: No module named 'spacy'
),spacy是AI自然語言處理的相關套件,聊天機器人有這個套件的 import 似乎也蠻合理的。所以我們就把它安裝起來,請大家執行
pip install spacy
Note: 我在這邊利用 pipenv install spacy
皆沒有作用,所以就用 pip install
吧。
然後再 run 一次 server
python manage.py runserver
這個時候還是會看到 Error (OSError: [E050] Can't find model 'en'. It doesn't seem to be a shortcut link, a Python package or a valid path to a data directory.
)詳情請參照這個 Solved Issue 連結 以了解更多,這邊的解決辦法是開啟另一個具有 Administrator 權限的 Command Line/ Terminal(Run as Administrator) 並再目標虛擬環境底下(這邊建議大家可以先複製自己當前的路徑,等等就可以直接再新的 Command Line/ Terminal 直接 cd 複製的路徑
,會比較方便)。
Note: 為什麼複製路徑會比較方便呢?
因為就 pipenv 的虛擬環境而言,之前提到它是以路徑作為區分的,所以就我而言,我需要先到...\PIPENV_ROOT\chatterbot_virtual_env
這個路徑底下才能透過 pipenv shell
切入虛擬環境內。
在新的(Administrator權限)Command Line/ Terminal 切入虛擬環境當中之後,下載目標 module。
pipenv shell
python -m spacy download en
會看到最下面成功下載的提示訊息(...You can now load the model via spacy.load('en')
),有看到此訊息就可以把這個 Command Line/ Terminal 關掉了,然後我們回到原本的 Terminal,再 run 一次 server。
python manage.py runserver
接著,會看到我們今天遇到的第三個 Error:
ERRORS:
?: (admin.E408) 'django.contrib.auth.middleware.AuthenticationMiddleware' must be in MIDDLEWARE in order to use the admin application.
?: (admin.E409) 'django.contrib.messages.middleware.MessageMiddleware' must be in MIDDLEWARE in order to use the admin application.
?: (admin.E410) 'django.contrib.sessions.middleware.SessionMiddleware' must be in MIDDLEWARE in order to use the admin application.
根據 Stackoverflow 的這個討論串中,提到 Django 在 2.2.3 版本之後 settings.py 裡面的 MIDDLEWERE_CLASSES
應該就要用 MIDDLEWARE
取代了。所以我們打開 example_app/settings.py 更改大約在第40行的內容,將MIDDLEWERE_CLASSES
改成 MIDDLEWARE
。
MIDDLEWARE = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', Django 1.1 之後 depreciated 了,因此將它註解掉
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
注意: 中間有一行需要註解掉
修改好之後,我們 migrate
Django 專案,會發現有很多內容到現在才 Apply OK。
python manage.py migrate
接著再 Run 一次 Server,這次總算成功 run 起來了。
python manage.py runserver
然後打開瀏覽器,至 http://127.0.0.1:8000/ ,大家將會看到此畫面,接下來是第二階段的除錯了。
接著,Error Message 提示我們 'staticfiles' is not a registered tag library.
根據此討論串,staticfiles
再 Django 3.X 就已經不使用了,我們應該改用static
。所以將
example_app/templates/app.html 以及 example_app/templates/app.html 最上面的 {% load staticfiles %}
改成下面這樣
{% load static %}
接著,我們就可以在 http://127.0.0.1:8000/ 看到成功 render 出來的頁面了。
大家可以嘗試和它聊聊天,不過不用多久就會發現它其實沒那麼聰明(笑),另外,我們輸入進去的訊息,其實就一種 POST Request,詳細 ChatterBot 是如何運作的,我們在明天會好好地探討一下,有機會的話看是不是也能再讓它變得聰明一些。
今天我們主要使用了 Github 上的 Django Chatterbot 開源專案,setup 的過程中遇到了不少 Error Message,還好 Google 上有許多前輩們都有指點出一些方向,有興趣了解更多關於我們今天遇到的那些 Error Message 的話,可以在下方的 Issue入口 中查閱下。
自由團隊 官方網站:https://aifreeblog.herokuapp.com/
自由團隊 Github:https://github.com/AI-FREE-Team/
自由團隊 粉絲專頁:https://www.facebook.com/AI.Free.Team/
自由團隊 IG:https://www.instagram.com/aifreeteam/
自由團隊 Youtube:https://www.youtube.com/channel/UCjw6Kuw3kwM_il39NTBJVTg/
文章同步發布於:自由團隊部落格
(想看更多文章?學習更多AI知識?敬請鎖定自由團隊的頻道!)