問題庫
“問題庫”是為程式客戶準備的。這些“問題”可以類型不同,如 “是/否?”、“選擇第幾個?”等等。問題可能帶有變數參數,在向客戶詢問時,以參數值替代問題中的文字內容。不同的參數值構成不同的問題。
對問題的回答,全部自動記錄下來。如果有幾個規則詢問同樣的問題,客戶只需回答一次。推理引擎重啟時,這些回答全部清除。
“問題”可以附帶些評審意見等資訊。這是事先預備的,並有變數參數配合。根據客戶的回答,自動顯示這些附帶資訊。
KQB 檔案
這些問題,在 .kqb 檔案中定義。問題庫的名稱,是副檔名為 .kqb 的檔案名稱。問題庫名稱必須是合法的 Python 標識符。
在你建立 knowledge_engine.engine 對象時,.kqb 檔案自動編譯並裝入記憶體。
.kqb 檔案中的資訊,全部是需要向客戶詢問的問題,以及對回答的檢驗,和要顯示的評審資訊。
.kqb 檔案指定哪個參數包含問題的答案。在提出詢問之前,除了答案,其他參數必須約束成具體值。
樣本
你寫了個汽車故障診斷程式,可以用到名叫 user_question 的問題庫,其中的問題像是這樣:
engine_starts($ans) Can you start the engine? --- $ans = ynmileage($ans) How many miles are on the car? --- $ans = integer(1-999999) 200000- ! Wow, that's a lot of miles!noise_from($location, $ans) Do you hear a noise from $location? --- $ans = yn
這些問題,貌似下列規則中的事實:
user_question.engine_starts(True)user_question.mileage($mileage)user_question.noise_from('under the hood', False)向客戶詢問
Pyke 有兩個模組,負責向你程式的使用者提問:
你可以自己寫個模組,向客戶詢問。參看 Pyke 使用者指南中的樣本。
Pyke 回答問題時,要尋找 ask_module (“回覆模組”)屬性:
- question_base (“問題庫”)對象
- knowledge_engine.engine(“知識庫推理機”)對象
下面是設定 ask_module 屬性的樣本:
>>> from pyke import knowledge_engine>>> from pyke import ask_wx>>> engine = knowledge_engine.engine(__file__)>>> engine.ask_module = ask_wx