2016-12-29 61 views
0

我一直在玩bot框架,並使用基於Azure函數的LUIS引擎創建了一個新的bot。我目前的主要代碼是在CSX文件中,但我很快就跑到了不覺得這是正確的事情。使用Azure函數構建bot部署

所以我試圖找到一些關於如何最好地構造這些類型的項目的最佳實踐。目前我看到以下三件事在我看來需要分開:

  1. 鏈接到LUIS意圖的代碼。這應該很簡單,只包含代碼以從意圖和實體獲取正確的參數。
  2. 邏輯驗證和東西。例如:我的用戶輸入一段時間,我想檢查輸入的時間段是否有效(開始日期發生在結束日期之前)。
  3. 意圖通常應該做些什麼,所以我們需要有觸發這個動作的代碼。步驟1和步驟2的結果用於確定需要完成的工作以及使用哪些參數。似乎有意義將此抽象爲另一個函數(每個動作)?

我在找的是一些關於如何設置a)工作和b)可用的體系結構的實際經驗。可用的我的意思是:當然可以爲每個小東西創建微服務,但是如何處理維護,源代碼控制,更新以及所有這些東西。我非常明白,可能沒有一個正確的答案,但是指向正確方向的東西對於開始將會非常有幫助。

回答

1

這是一個相當廣泛的問題。我會盡可能地盡力掩護。所以首先我會強烈建議你通過C# documentation。 CSX和你的CS類應該基本沒有區別。如果事情感覺太困難或者您需要IDE體驗,您可以隨時創建一個Visual Studio項目,其中包含您將擁有的所有邏輯;然後在鏈接類的函數中使用編譯後的二進制程序集。

  • 對於您的LUIS問題,已經有LUISDialog類。它負責調用LUIS,識別實體,意圖等。你只需要實現很好的屬性方法。看一個例子here
  • 對於驗證和輸入,我建議您查看FormFlow。它有很多東西要求包括驗證。
  • 如果您對顯式流量管理感興趣,您希望從一個步驟中獲得結果並將其鏈接到下一個步驟。 SDK已經有Dialog Chains

我認爲框架本身爲您提供了基本構建模塊,然後將它留給您的想象,就像任何良好的框架應該。組織代碼的方式過於主觀。我的意見可能與您可能不符,並且在這裏沒有像MVC或MVVM這樣的固定模式。我通常會嘗試將我的代碼分成兩部分。

  • 業務邏輯層。從撥打電話到您的數據庫,到您的驗證,到支付網關等等的一切。去這裏住在這裏。這部分應該是可測試的,任何人都可以通過類和接口重用。您可以在這裏應用各種體系結構/設計模式。想法是這個層是你的應用程序的實用接口。
  • 通信層。這將專門處理對話框,FormFlows,Intents等。並將要調用的數據標準化爲業務邏輯。這部分主要處理用戶輸入,並處理所有的交互邏輯。

現在真正的大項目的情況下,我可能會建立nugets這些層和重複使用它作爲您的CSX導入的包。在這種情況下,CSX部分真的很像路由器,它可以通過模擬器和測試工具爲您提供可調試性和本地可測試性,並且只需將更改推送到packages.json即可輕鬆部署。

+0

理解並同意。對於我認爲的構建塊,我有一個很好的想法。雖然我同意你關於框架的聲明,而不強制任何結構或體系結構,但如何建立一個系統而不會像其他人已經犯過的錯誤一樣有最佳實踐是很好的。但是,感謝這個信息,非常有用! – Jasper