今天要來聊聊一個我自己搞了幾個月的小東西——一個專屬我自己的 AI 助理。不是那種電影裡會跟你對話、還會控制全家大小家電的 Jarvis,想太多了。我這個版本…嗯…比較樸實無華,但說真的,它每天都確實在幫我省下不少時間。
老實說,每次聽到有人說「我要打造自己的 Jarvis!」我就覺得有點…嗯,不切實際。不是說不行,但那需要超多錢跟一個頂尖團隊。不過呢,如果你跟我一樣,只是想解決一些每天都會遇到的、煩死人的重複工作,那你只需要 Python、一些 API,還有一點點的好奇心就夠了。
這整個專案的出發點很簡單,就是我受夠了某些事。對,這就是自動化的黃金法則:不要問「AI 能做什麼?」,而是問「我每天被什麼鳥事搞到快瘋了?」
所以,我到底討厭做什麼?
我花了一點時間列下來,發現我的抓狂清單大概長這樣:
- 一直重複寫那些內容差不多的 email,什麼 follow-up 啊、會議通知啊…超煩。
- 把會議上亂七八糟的筆記,複製貼上到 Notion 或其他地方整理。
- Google 一些我明明已經查過十幾次的 Python 基本語法問題… 真的金魚腦。
- 把我那堆「稍後觀看」清單裡的 YouTube 影片跟文件做摘要。那個清單根本就是數位垃圾抽屜,從來沒看完過。
於是,我就決定從零開始,用 Python 寫一個小助理來處理這些事。沒錯,就從這些最不起眼、但最耗費心神的小事開始。
重點一句話
你根本不需要什麼鋼鐵人助理,你只需要一個能幫你少做點鳥事的 Python 小工具。
怎麼做:把自然語言變成電腦看得懂的指令
整個助理的核心,就是一個「指令解析器」。簡單講,就是讓它聽得懂人話。我不想寫一大堆 if-else 判斷式,那樣維護起來會想死。你知道的,就是那種 `if "email" in command and "John" in command:` 這種又醜又沒彈性的寫法。
所以呢,我的作法是靠 GPT-4o-mini 這個模型來幫我翻譯。例如我對助理說:「寄一封 follow-up email 給 John,問他報告的事」,GPT-4o-mini 會把這句話轉成一個結構化的 JSON:
{
"action": "send_email",
"recipient": "John",
"subject": "Follow-up on report",
"body": "..."
}
這一步真的超關鍵。它讓我的助理有了一點「理解」能力,我不用像在跟機器人講話一樣,需要下非常精確的指令。這邊的 Python 程式碼大概是這樣,用 OpenAI 的 library 其實很簡單:
import openai
# 記得換成你自己的 API key 啊
openai.api_key = "sk-..."
def parse_command_to_json(user_input):
system_prompt = """
你是一個指令解析助理。請將使用者的自然語言指令,轉換成結構化的 JSON 格式。
例如:
- "寄信給 David,主旨是專案更新" -> {"action": "send_email", "recipient": "David", "subject": "專案更新"}
- "把這段文字摘要一下" -> {"action": "summarize_text", "text": "這段文字..."}
- "幫我預約明天下午三點跟老闆開會" -> {"action": "schedule_meeting", "time": "tomorrow 3pm", "attendee": "老闆"}
"""
response = openai.ChatCompletion.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
],
temperature=0.1 # 溫度設低一點,讓它乖乖照格式輸出
)
# 這邊當然還要做一些錯誤處理,但概念就是這樣
return response['choices'][0]['message']['content']
拿到這個 JSON 之後,我的主程式就可以根據 `action` 的值,去呼叫對應的函式,比如 `send_email()` 或 `schedule_meeting()`。整個邏輯就變得很乾淨。
串接真實世界的工具,不然都是空談
一個只會「思考」的 AI 助理,說真的,一點用都沒有。它必須能「做事」。所以下一步就是把它跟我每天在用的工具串起來。
- Email: 用 Gmail API 來收發信。
- 行事曆: 用 Google Calendar API 來安排會議。
- 筆記和任務: 用 Notion API 來新增待辦事項或儲存筆記。
串接 API 的過程,老實說,有點煩。你得去 Google Cloud 或 Notion 開發者後台申請憑證、處理 OAuth 2.0 驗證…等等。國外的官方文件都寫得很官腔,常常繞來繞去。我自己是覺得,有時候直接看像是台灣 iT邦幫忙 上面一些大神寫的教學文章,或是對岸 CSDN 的分享,反而更快理解整個流程。他們會用更口語的方式,告訴你哪個步驟是個坑,哪個參數要特別注意,這點比冷冰冰的官方文件好多了。
一旦串好,一切就值得了。我現在只要說一句話,信就寄出去了,完全不用切換視窗、登入 Gmail、點「撰寫郵件」…那些打斷思路的動作通通消失。
雲端 vs. 本地,我全都要!加入離線功能
雖然雲端 AI 很強大,但有兩個問題:第一,要錢;第二,網路斷了就變智障。而且有時候我只是想處理一些本地端的檔案,或是問個簡單的程式問題,還要繞一圈把資料傳到雲端,感覺又慢又沒隱私。
這就是本地端 LLM(Local LLM)派上用場的時候了。我用了 `llama-cpp-python` 這個函式庫,讓我們可以直接在自己的電腦上跑模型。像 Mistral-7B 這種等級的模型,對於文件摘要、程式碼生成這種任務,已經非常夠用了,而且速度超快,幾乎是即時回應。
你看,程式碼也沒多複雜:
from llama_cpp import Llama
# 先去 Hugging Face 下載 GGUF 格式的模型檔案
# 這邊的路徑要換成你自己的
llm = Llama(model_path="./models/mistral-7b-instruct-v0.2.Q4_K_M.gguf")
# 直接把問題丟給它
response = llm(
"請用繁體中文摘要以下會議紀錄:...",
max_tokens=512,
stop=["\n"], # 讓它講完一句話就停
echo=False
)
print(response["choices"][0]["text"])
這樣我就有了一個混合系統:需要理解複雜指令的時候,呼叫雲端的 GPT-4o-mini;需要快速、私密的在本機處理資料時,就切換到本地的 Mistral-7B。我自己是覺得,這種混合模式才是個人 AI 助理最實用的型態。
雲端 LLM vs. 本地 LLM,到底該用哪個?
很多人可能會卡在這邊,不知道該怎麼選。我整理了一個簡單的比較表,分享一下我的看法。
| 比較項目 | 雲端 LLM (例如 GPT-4o-mini) | 本地端 LLM (例如 Mistral-7B) |
|---|---|---|
| 能力上限 | 超強,特別是邏輯推理和理解複雜語意。根本是博士等級。 | 還不錯,但比較像個聰明的大學生。摘要、翻譯、寫點 code 沒問題,但太複雜的就不行了。 |
| 速度 | 看網路狀況和 API 負載。有時候會卡一下,大概一兩秒吧。 | 如果你的硬體還可以(有張不錯的顯卡),速度就是「瞬間」。打完字答案就出來了。 |
| 成本 | 用多少算多少。雖然 GPT-4o-mini 蠻便宜的,但一直用還是會累積。是持續性的開銷。 | 一次性的硬體成本。模型本身免費下載,之後跑再多次也不用錢。電費?嗯…算了吧。 |
| 隱私 | 資料要送出去。雖然大公司都說會保護隱私,但…你知道的,心裡總是有點毛毛的。 | 100% 安全。所有東西都在你自己的電腦裡,斷網也能跑,絕對不會外洩。 |
| 設定難度 | 超級簡單。申請個 API key,`pip install openai`,搞定。 | 稍微麻煩一點。要自己下載模型、安裝對應的函式庫,有時候還會碰到環境相依性的問題。 |
解放「稍後觀看」地獄
說到我最喜歡的功能,絕對是 YouTube 影片摘要。我的「稍後觀看」清單長到像史詩一樣,但根本沒時間看。
所以我寫了一個小工具,用 `youtube_transcript_api` 這個套件把影片的字幕抓下來,然後直接丟給 AI 幫我整理成幾個重點。整個過程不到一分鐘,我就「看完」了一場一小時的演講。超實用!
這真的改變了我吸收資訊的方式。很多時候我只是想知道那場演講的核心觀點,而不是要看講者怎麼喝水、怎麼開玩笑。這工具幫我過濾掉 90% 的雜訊。
一些我沒想到的限制和鳥事
當然,這個過程也不是一帆風順。說真的,它離完美的「助理」還差得遠。首先,它其實很笨。它的「記憶」是假的,只是靠著把最近的對話 embedding 之後存起來做相似度搜尋,有時候還是會忘記我們三分鐘前才講過的事。這跟真正的上下文理解差很多。
再來,語音辨識在安靜的環境下還行,但旁邊只要有點電視聲或人聲,辨識出來的指令就亂七八糟。我本來還想在開車的時候用,後來發現根本行不通。結果還是乖乖用打字的。
還有啊,最大的問題是「維護」。串接的 API 三不五時就可能改版,或是憑證過期,到時候就得回頭去修 code。它不像買來的商業軟體,有人會幫你弄到好。這東西是你自己生的,你就得自己養。
所以,不要期待它能像電影演的那樣。但把它當成一個「超級強化版的腳本工具」,那它絕對能讓你驚艷。它不會幫你思考,但它能把你從思考前的那些準備工作、和思考後的那些收尾工作中解放出來。
總結一下,這個小專案教會我最重要的事是:與其追求一個無所不能的 AI,不如打造一個真正能解決「你」的問題的系統。從最小的痛點開始,用一個週末的時間動手試試看。你可能會發現,省下來的時間跟心力,遠比你想像的要多。
說到這個,如果你只能讓你的人生中一件重複性的事情自動化,你會選什麼?是每天回覆那些煩人的 email,還是整理開會後亂七八糟的筆記?在下面留言分享一下你的想法吧!
