在上一篇文中,我們已經透過 OCR 技術,將圖片中的文字成功擷取出來。然而,光有「文字」還不夠,因為原始文字通常凌亂、難以閱讀。這時候,就能借助 OpenAI GPT 來進行進一步的處理與結構化。(不過,如果要非常精確的話,可能還是得在GPT整理完以後,再用如正則表示法的方式自己篩選文字。)
系統中的callGPT4o
函式,負責把 OCR 得到的文字交給 GPT 4o 模型,並請它依照 prompt 的指示整理成特定格式的文字。本系統撰寫 prompt 時,使用了** few shot prompting **的方式給予模型更多內容, 讓模型產出更符合需求的回應。
首先,同樣地,我們把密鑰儲存在另一份檔案。
// app.py
GPT_APIKey = os.getenv("GPT_APIKey")
GPT_endpoint = os.getenv("GPT_endpoint")
GPT_deployment = os.getenv("GPT_deployment")
接著,串接 Azure OpenAI 的 API,這部分和串接 AI Vision API時一樣,Azure OpenAI 也有官方文件可以參考。
// app.py
from openai import AzureOpenAI
def callGPT4o(ocrText):
client = AzureOpenAI(
azure_endpoint=GPT_endpoint,
api_version="XXXXXXX", //輸入自己使用的版本
api_key=GPT_APIKey
)
// Prompt 的內容
content = f"""
請幫我依據以下項目整理...
1.商品名稱或品名
2.材質或材料
...
10.警告
....(給了幾個範例)....
###
文字檔:{ocr_text}
"""
chunk = client.chat.completions.create(
model=GPT_deployment,
messages=[
//可以賦予模型角色
{"role": "system", "content": "你是一個OOOOO..."},
{"role": "user", "content": content}
//設定回復的字數限制
], max_tokens=500
)
return chunk.choices[0].message.content
同樣地,系統需要一個讓使用者能呼叫 GPT 的「入口」-- Flask 路由/gpt
。
這段程式碼的功能包含:
1.接收使用者上傳的 OCR 文字檔。
2.呼叫 callGPT4o
,運用 AI 執行文字處理。
3.回傳整理後的標示檢查結果。
在程式碼中一樣要記得加入錯誤提醒,方便除錯!
// app.py
@app.route('/gpt', methods=['POST'])
def gpt():
session = db.Session()
try:
# 接收「前端」發送的資料
ocrText = request.files['ocrText'].read().decode('utf-8')
# 處理「前端」接受到的資料(呼叫 OpenAI GPT 功能)
labelInspection = callGPT4o(ocrText)
# 將處理後的資料在送回「前端」
return jsonify({
'labelInspection': labelInspection
})
except KeyError as e:
# 處理缺少的dictionary中key值
return f"KeyError: {e} not found in form data", 400
透過 Azure OpenAI 的輔助,減少了以往需要設立不同條件來做文字清洗的時間,大幅提升系統開發效率。