如果歸納下來,使用 GenAI 開發 Odoo 模組最重要的就是 Odoo 架構知識,理解模組的組成,藉由回顧前四天的 GenAI 操作,來一窺當你擁有前面所述及去年鐵人賽的知識後,你該怎麼運用 GenAI 來完成簡單的模組。
2024 鐵人賽 - 30天就算 0 基礎,也能使用 GenAI 創造簡單的 Odoo 模組應用 系列
2023 鐵人賽 - Odoo 魔法學院: 一步一腳印帶你成為客製化大師 系列
重現去年鐵人賽的 Day10 文章,我很清楚描述了,我們要做的模組資訊及 Model 的 Fields,GenAI 很快就產生整個專案,有趣的是,我們並沒有指名忍何 View 的樣式,但 GenAI 有給我們,及基本的 Access Rule 權限。
經過測試,我們馬上發現了幾個問題,沒 init.py,沒 Menu,沒 Security Group,但這幾點是測試完後,經由我所擁有的 Odoo 架構知識 和 Python 基礎知識 才知道的。
在 GenAI 的時代下,如果是不知道 What 的問題,依舊是很難去解決,但是只要知道問題,就可以用 GenAI 很快去解決。
題外話,將這個程式完成後,你依然有可能會卡在找不到模組的窘境,此時依然是只能依靠 Odoo 開發經驗,你除了得正確載入模組以外,還得更新模組列表,並且安裝啟動,且要去啟動開發者模式,將本身的使用者啟動 Library Management User 的權限,回首頁後,重新整理才看得到模組。
接續去年鐵人賽的 Day11 擴充功能,新增檢查 ISBN 的功能,和加入預設搜尋選項,知道要做什麼,其實就完成一大半了。
這次在提問 GenAI 時,你會注意到我特地把之前的 Model 和 View 的程式碼當作前言,接著再開始我的問題,這會是個很重要的一步,在做擴充時,是要延續原有的架構及程式,架上新有的功能,並不是憑空在創造一個新模組,但 Knowhow 點就在於,你到底該把那些當作前言呢? 丟多了,怕 GenAI 會錯意,丟少了,怕 GenAI 產生出不相容的擴充,所以 Odoo 架構知識 是必不可少的。
這次我的提問,你會發現我開始很明確地跟 GenAI 說道我要新增的按鈕會在哪個頁面,以及該按鈕的功能是什麼 (檢查 ISBN 是否合法),產生的結果就更容易預期的,但你會發現有些是否沒必要出現的字 "請用繁體中文",沒錯有時 GenAI 會使用英文回答,這段提問我大概修修改改問了四次,你猜得到是什麼嗎?
沒錯,就是 ISBN 合法,怎樣所合法呢? 數字數目 10 或 13 個是合法? 符合國際編碼標準是合法? 的確,兩個都符合 "合法" 的範疇,這也是我重跑了一兩次的原因,當然,如果跑了幾次都還失敗,我就會補充新的提問上去了。
所以真正好的提問敘述是應該要把,這個功能的邏輯也敘述一下,input/ argument 是什麼,output/ return 是什麼,會造就什麼樣的結果,當然,如果你都敘述完後,那變相的你也像是在腦袋中構思完這個程式該怎麼寫了。
很尷尬的是,程式又出錯了,此時透過錯誤訊息,我們可以很快推斷,是 <group> <filter> 那段出問題了,雖然 Odoo 只會指出是某一片大區域解析出問題,還是透過我人工去測試才得知的,你說我有沒有用 AI,可能是經驗使然,我知道這邊使用他去找問題,並不會比較快,反而是透過我快速的註解掉覺得有問題的部分會比較快一些。
但確認問題後,直接跟 GenAI 指名是哪邊出問題了,對方很快就將其修復了,此時出的問題是 Odoo 的版本不同,View 有做過一些變動,這在 Day23 Odoo List View 也有提及另一個例子,Odoo 17 和 Odoo 18 的 List View 標籤有做變動,所以 GenAI 確實有機會會用到不同版本的 Odoo 知識來產生結果,經過一番嘗試後,如果無果,你就只能回歸古早做法,從文件慢慢地去查及驗證了。
再來是按鈕的位置,由於前一天我也沒有特別標明,所以跟去年寫的就不太一樣,放到 Footer 去了,但也是一個示例的好機會,用 GenAI 很明確地指出 View 的哪一段,改到 Header 去,就很快的完成了。
這也會是很常發生的例子,往往一開始沒指名清楚,功能確認了,但位置可能會修改,抑或是功能修改,透過 GenAI 確實是可以很快做修改,但你得要擷取適當的資訊,才會更容易得到可以運行的結果。