Odoo On-Premise、OpenAI API、FastAPI
想像一下,您正在本機的 Odoo 18 環境中開發新功能。某天主管提出一個新點子:讓 Odoo 像裝了 AI 大腦一樣聰明! 也許是在客服模組中加入 GPT-5 聊天機器人,自動回答客戶問題;或者在文件管理中使用 AI 自動摘要合約內容,減輕員工負擔。面對這樣的需求,我們該如何下手,將 OpenAI 的強大 GPT-5 模型與 Odoo 系統串連起來呢?
別擔心,本篇文章將以輕鬆的情境帶您一步步完成環境建置:從搭好 Odoo 本地開發環境開始,準備好 OpenAI API 金鑰,架設一個簡單的 FastAPI 後端服務作為橋樑,實現 Odoo 調用 GPT-5 的基本流程。透過這個過程,您不僅能熟悉 Odoo on-premise 環境的設定,也能了解如何讓 ERP 系統擁有智慧對話與分析的「超能力」!
首先,確保我們擁有一個在地端(On-Premise)的 Odoo 開發環境。與雲端 SaaS 相比,本地環境讓您對程式碼和套件有完全掌控,可自由安裝第三方函式庫(例如 OpenAI SDK)並部署自訂模組。以下是建置步驟:
postgres
。但 Odoo 禁止以 postgres
的身份連接,所以就要創建一個新的 PostgreSQL 使用者。 sudo -u postgres createuser -d -R -S $USER
createdb $USER
18.0
分支)或在官方網站下載壓縮檔。將原始碼放在開發目錄中(如 odoo18/
)。git clone https://github.com/odoo/odoo.git
venv
uv
pyenv
💡 Gary’s Pro Tip|Docker 部署環境
將較於每次設置 Python 虛擬環境,更進階且方便的方式自然是使用 Docker 來部署 Odoo 了,本篇為了先讓剛開始的讀者熟悉流程,先不詳述如何使用 Docker 部署,如果後續篇幅跟時間足夠,我們再來多多著墨。
安裝 Odoo 相依套件:進入 Odoo 原始碼目錄後,使用 pip
安裝所需的套件:
pip install -r requirements.txt
這將根據 requirements.txt
自動安裝 Odoo 運行所需的各項 Python 套件。若在安裝過程中遇到 C 編譯套件缺失,可以按官方文件指引先安裝對應的系統函式庫(例如在 Debian/Ubuntu 上安裝 libldap2-dev
, libpq-dev
等套件)。
規劃目錄結構:為了方便日後維護,我們建議將自訂模組與Odoo 原始碼分開存放。您可以在專案根目錄下建立一個 custom-addons
資料夾,用來放置自己開發的模組程式碼。例如:
odoo-dev/
├── odoo18/ # Odoo 18 原始碼(Community 版)
│ └── addons/ # 官方附加模組集
├── odoo18-custom-addons/ # 自定義開發模組目錄
├── odoo.conf # Odoo 設定檔 (資料庫連線、埠號等)
接著,在 Odoo 的設定檔 odoo.conf
中設定 addons 路徑,將預設 addons 目錄與我們的 odoo18-custom-addons
都加入路徑中。例如:
[options]
addons_path = /path/to/odoo18/addons,/path/to/odoo18-custom-addons
admin_passwd = admin123
db_host = localhost
db_port = 5432
db_user = odoo18
db_password = odoo18
http_port = 8088
透過設定多重 addons_path,Odoo 啟動時會同時載入官方模組和自訂模組。如此一來,可讓我們的開發模組不混雜在原始碼中,版本升級時也比較不會弄亂。
啟動 Odoo 測試:現在,一切依賴都就緒後,就可以透過命令行來啟動 Odoo 服務了。進入 Odoo 原始碼所在的目錄,執行:
python3 odoo-bin -d my_database -r <PG_USER> -w <PG_PASSWORD>
(上述命令中,-d
指定資料庫名稱,-r/-w
為連接資料庫的使用者及密碼。如果一切順利,終端機將出現 Odoo 啟動的日誌訊息。當出現類似 INFO odoo.modules.loading: Modules loaded.
的字樣時,表示伺服器已成功啟動。現在打開瀏覽器,訪問 http://localhost:8088
,您應該可以看到 Odoo 的登入介面。使用預設的 管理員帳號(Email: admin
, 密碼: admin123
)登入剛剛建立的資料庫,即可進入 Odoo 後台進行測試。
💡 Gary’s Pro Tip|善用虛擬環境隔離開發依賴
Odoo 官方建議不要在多個執行實例間共用 Python 套件環境,以避免相依衝突。使用 虛擬環境為每個 Odoo 專案創建獨立的 Python 環境,是一種良好的習慣。這麼做可以確保不同專案間的套件版本互不影響,並讓環境配置更加可控、乾淨。在啟用虛擬環境後再安裝 Odoo 的requirements.txt
,日後部署或團隊協作時也能輕鬆複製同樣的環境設定。
環境架設完成後,接下來我們需要取得 OpenAI 提供的 API 金鑰,以調用 GPT-5 模型服務。API 金鑰就像是通往 OpenAI 雲端服務的密鑰,有了它我們才能發送請求給 GPT 模型並獲取回應。以下是申請與妥善保存 API Key 的建議步驟:
sk-
開頭的一長串英數字)。注意:這個金鑰只會顯示一次,一旦關閉視窗便無法再查看同一組金鑰!因此,請立即複製並妥善保存這串金鑰。OPENAI_API_KEY
的環境變數,將金鑰值設為它的內容。這樣一來,在程式中只需讀取該環境變數,就能取得金鑰而不必將敏感資訊寫死於程式碼。此外,若是團隊協作,統一使用相同的環境變數名稱,也便於大家共享程式碼時不會意外暴露金鑰。對於 Git 專案,請將保存金鑰的檔案(例如 .env
)加入 .gitignore
清單,防止它被提交到版本庫。💡 Gary’s Pro Tip|監控使用與額度
定期查看 OpenAI 儀表板中的使用量統計,確保沒有異常的大量調用。如果發現可疑的用量飆升,金鑰可能已外洩,此時應立即廢除舊金鑰並換新。養成監控習慣,有助於在問題發生時第一時間採取行動。也記得要設置每月最高費用,以免卡被刷爆了。🚑
有了 Odoo 環境與 OpenAI 金鑰,我們便可以著手建立後端整合服務。在本範例中,我們將使用 FastAPI(一個快速、現代的 Python Web 框架)來架設一個簡單的 REST API 服務,負責與 OpenAI GPT-5 溝通。這個 FastAPI 服務將作為中介,接受來自 Odoo 的請求,調用 GPT-5 模型取得 AI 回覆,再將結果返回給 Odoo。
如此一來,我們可以將與 AI 相關的邏輯封裝在獨立服務中,讓 Odoo 本身專注處理 ERP 邏輯,同時也增進安全性(例如不直接在 Odoo 伺服器上暴露 OpenAI 金鑰)。
您可以在與 Odoo 不同的資料夾建立一個新 Python 專案(同樣可以使用虛擬環境)。透過 pip
安裝所需套件:
pip install fastapi uvicorn[standard] openai requests python-dotenv
pip
安裝於 Odoo 環境)。安裝完成後,新建一個 main.py
檔案,編寫 FastAPI 應用程式。例如一個簡單的 AI 查詢接口:
import os
import openai
from fastapi import FastAPI
from pydantic import BaseModel
# 從環境變數載入 OpenAI API Key
openai.api_key = os.getenv("OPENAI_API_KEY") # 確保您已經在系統環境設定了此變數
app = FastAPI()
# 定義請求資料的資料模型
class Query(BaseModel):
prompt: str
# 定義一個 POST 接口來接收來自 Odoo 的 AI 查詢請求
@app.post("/ask")
async def ask_gpt(query: Query):
# 調用 OpenAI GPT-5 API 獲取回答
response = openai.ChatCompletion.create(
model="gpt-5", # 假設 GPT-5 的對話模型名稱
messages=[{"role": "user", "content": query.prompt}]
)
answer = response.choices[0].message.content
# 回傳結果給呼叫方
return {"answer": answer}
這段程式碼相當直觀:我們建立了一個 /ask
的 POST route,接受一個 JSON 物件(包含 prompt
欄位)。當 Odoo 發送問題到這個端點時,FastAPI 會接收到請求,透過 openai.ChatCompletion.create
調用 GPT-5 模型,將使用者的提問內容發送給 OpenAI,並獲得模型生成的回答。取得回答後,伺服器以 JSON 格式返回,其中包含 AI 產生的文字結果。
在程式中,我們使用 os.getenv("OPENAI_API_KEY")
來取得事先設定的環境變數,確保 API Key 不會硬編碼在程式裡。此外,我們利用 OpenAI 提供的 ChatCompletion
介面呼叫 GPT模型;由於是對話形式,我們傳入了一個帶有 "role": "user"
的訊息列表。
簡單起見,這裡每次請求都視作新對話。如果需要保留上下文,您可以擴充讓 Odoo 傳遞 conversation 的 ID,或在 FastAPI 端維持會話狀態(threads),這部分比較進階就先不在這篇細說了。
完成程式後,啟動服務:
uvicorn main:app --reload --port 8000
(上述命令假設 main.py 中建立了 app = FastAPI()
實例,並將服務跑在 8000 port)
啟動後,FastAPI 會在終端顯示啟動日誌,並告知您 API 文件可在 http://localhost:8000/docs
查看。打開該網址,可以看到自動生成的互動式文件,方便您測試接口。您也可以用 curl
或 Postman 工具向 http://localhost:8000/ask
發送 POST 請求,body 帶入 {"prompt": "你的問題"}
來確認 AI 回應是否正常。
接下來,我們要讓 Odoo 去呼叫剛剛建立的 FastAPI 服務,完成 Odoo → FastAPI → OpenAI 的串接閉環。在 Odoo 中呼叫外部 API 與一般 Python 應用中相同——因為 Odoo 本質上是跑在 Python 上,因此可以直接使用 requests
等庫發HTTP請求。舉個例子,假設我們要在 Odoo 點擊一個按鈕,將某段文字發給 GPT-5 求取摘要,我們可以在自訂模組的伺服器動作方法中這樣寫:
import requests
class Document(models.Model):
_name = "my.document"
# ... 定義您的文件模型,例如包含一個 text 字段存放內容
def summarize_with_ai(self):
for record in self:
prompt = f"請幫我摘要以下內容:{record.text}"
try:
resp = requests.post("http://localhost:8000/ask", json={"prompt": prompt}, timeout=60)
result = resp.json()
# 將 AI 回傳的摘要結果存到 Odoo 欄位或傳給前端
record.summary = result.get("answer", "(無法取得摘要結果)")
except Exception as e:
record.summary = f"呼叫AI失敗:{str(e)}"
在上述邏輯中,我們構造一個 prompt
字串,透過 requests.post
發送給本地的 FastAPI /ask
接口,並期待獲得 JSON 回傳。拿到回傳後,我們將 answer
內容提取出來,存入 Odoo 的某個欄位(例如 summary
)。
請求時我們也設定了 timeout=60
秒,以避免 AI 端遲遲無響應導致 Odoo 執行緒卡死。實務上,建議為這類外部呼叫加入適當的錯誤處理和超時設定。
整體來說,現在的架構下使用者在 Odoo 前端點擊按鈕,就會觸發 Odoo 後端的方法呼叫 FastAPI 服務,而 FastAPI 收到請求後再呼叫 OpenAI 完成 AI 計算,最終結果返回至 Odoo。以下以一張序列圖說明這個串接流程:
透過上述架構,我們成功將 Odoo 與 OpenAI GPT-5 串接起來。Odoo 扮演應用層的角色,由使用者觸發業務場景;FastAPI 則扮演中介服務,負責與外部的 AI 模型溝通並進行結果封裝。兩者之間透過標準的 HTTP 請求/回應交互,界線清晰且易於維護。
值得一提的是,這種設計非常靈活:未來如果需要擴充更多 AI 功能,例如除了摘要還想提供翻譯或問答功能,我們可以在 FastAPI 中新增不同的路由邏輯,或部署更多微服務。同時,Odoo 一端也只需調整請求目標即可使用新功能。由於 Odoo on-premise 環境完全在自己掌控中,我們甚至可以將 FastAPI 服務與 Odoo 部署在同一內網,確保通訊安全和效率。
經過以上步驟,我們已展示了從環境建置到基本串接 OpenAI API 與 Odoo 的實作流程。一個具備 AI 呼叫能力的 Odoo 開發環境可為企業內部系統注入了生成式 AI 的能力,開啟了許多令人興奮的可能性。
在接下來的幾天中,會將此環境延伸打造更多 AI 應用:例如整合一個對話式的客服聊天機器人,讓客戶在 Odoo 前端提出問題時由 GPT-5 即時回覆;又或者建立文件摘要引擎,自動濃縮會議紀錄、Email 等文字內容存檔在 Odoo,方便日後快速查閱;甚至可以研發合約審閱助手,掃描上傳至 Odoo 的契約條款並以 AI 協助標註風險重點。這些應用都建立在我們今天完成的環境基礎之上。
透過 Odoo 與 OpenAI 的結合,傳統 ERP 系統將不再只是被動的資料庫,而有機會升級為能理解語言、輔助決策的智慧夥伴。