一款使用大語言模型來幫忙記帳的 App

程式碼 (已開源,歡迎提交 PR 貢獻): https://github.com/yenslife/VoiceFinance

Inspiration: https://youtu.be/obRTOtKp8OQ?si=LVF5cwqx6Py87Y9Y

ChatGPT 聊天記錄: https://chatgpt.com/share/4580ff26-5ec3-41d7-9951-c78581f64a21

簡介

過往我們要記帳都需要手動將時間、地點、金額、備註等資訊輸入到記帳軟體,這個系統提供了一個介面,讓使用者只要用嘴巴說話,AI 就會自動解析句子內的資訊 (日期、金額、名稱、備註),並加到資料庫中。除了可以在電腦使用,也能在手機、瀏覽器上使用,擴展性非常好。

系統架構

Untitled

採用前後端分離架構,前端使用 Flet 這個以 Flutter 為基礎的 Python 套件來實作,所以是跨平台的,可以在手機端以及 PC 端使用。後端則使用 FastAPI 以及 SQLite3 來存放資料。

這次的模型選擇會以 Llama3 為主。用 Groq 上提供的 API 來使用,如此一來不需要很好的運算資源也可以完整利用大語言模型的力量。語音輸入的辨識則是使用 OpenAI Whisper large-v3。

功能

Untitled

語音輸入

使用 OpenAI whisper-large-v3 並指定為中文。由於大模型的訓練資料中,簡體中文佔了很大的比重,所以需要額外的中文處理,這部分我使用開源的 Python 專案 OpenCC 來解決。

因為可能會有口誤,所以使用 Flet 的 TextField 讓使用者有修改的機會。

LLM 解析

運用 Prompt Engineering 的技巧,將轉換後的文字解析成時間、地點、名稱、金額等資訊,並且以 JSON 格式輸出。為了讓模型可以順利解析,在真正解析之前還會做一次問題分類。

Untitled

graph LR
n1(純文字) --LLM--> n2{是否為記帳問題}
n2--Yes-->n3(進行解析)
n2--Noo-->n4(提示使用者無法解析)
n3--LLM-->n5(分析完成)

截圖 2024-07-11 下午9.51.12.png

資料庫增刪查找 (加入資料庫)

按下下方按鈕即可加入資料庫中,也會跳一個 snackbar 提示使用者加入成功。

資料庫(搜尋刪除編輯)

詳細操作流程可以參考 Demo 影片,但主要提供了以下功能