如何用 Python 打造個人 AI 助理?從需求規劃到實作完整步驟

Published on: | Last updated:

今天要來聊聊一個我自己搞了幾個月的小東西——一個專屬我自己的 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 這種等級的模型,對於文件摘要、程式碼生成這種任務,已經非常夠用了,而且速度超快,幾乎是即時回應。

在本地端用 Python 跑 Mistral-7B 模型
在本地端用 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 幫我整理成幾個重點。整個過程不到一分鐘,我就「看完」了一場一小時的演講。超實用!

用 Gradio 打造的摘要工具介面
用 Gradio 打造的摘要工具介面

這真的改變了我吸收資訊的方式。很多時候我只是想知道那場演講的核心觀點,而不是要看講者怎麼喝水、怎麼開玩笑。這工具幫我過濾掉 90% 的雜訊。

一些我沒想到的限制和鳥事

當然,這個過程也不是一帆風順。說真的,它離完美的「助理」還差得遠。首先,它其實很笨。它的「記憶」是假的,只是靠著把最近的對話 embedding 之後存起來做相似度搜尋,有時候還是會忘記我們三分鐘前才講過的事。這跟真正的上下文理解差很多。

再來,語音辨識在安靜的環境下還行,但旁邊只要有點電視聲或人聲,辨識出來的指令就亂七八糟。我本來還想在開車的時候用,後來發現根本行不通。結果還是乖乖用打字的。

還有啊,最大的問題是「維護」。串接的 API 三不五時就可能改版,或是憑證過期,到時候就得回頭去修 code。它不像買來的商業軟體,有人會幫你弄到好。這東西是你自己生的,你就得自己養。

所以,不要期待它能像電影演的那樣。但把它當成一個「超級強化版的腳本工具」,那它絕對能讓你驚艷。它不會幫你思考,但它能把你從思考前的那些準備工作、和思考後的那些收尾工作中解放出來。


總結一下,這個小專案教會我最重要的事是:與其追求一個無所不能的 AI,不如打造一個真正能解決「你」的問題的系統。從最小的痛點開始,用一個週末的時間動手試試看。你可能會發現,省下來的時間跟心力,遠比你想像的要多。

說到這個,如果你只能讓你的人生中一件重複性的事情自動化,你會選什麼?是每天回覆那些煩人的 email,還是整理開會後亂七八糟的筆記?在下面留言分享一下你的想法吧!

Related to this topic:

Comments

  1. profile
    Guest 2025-10-22 Reply
    說到AI流程自動化,我老實講心裡有點毛毛的,你們也會嗎?什麼API整天一直連接,有時真的看得頭很痛,搞不懂到底是變方便還是自己找麻煩。有時候我就在想,真的有這麼必須嗎?如果有人直接丟給我一個簡單的例子,像是那種一鍵啟動、五分鐘就能試完的小工具,不用教學文那種長篇大論,我才比較會想玩玩看啦。要是真的省到時間、事情跑起來順,我才會相信啊。現在都是一直講「很厲害」,但…感覺光連線設定就快瘋掉了。你們有人試過哪些真的好用又不太複雜的嗎?
  2. profile
    Guest 2025-09-27 Reply
    嘿,這看起來超酷的個人 AI 助手開發指南!我很好奇,你是怎麼想到要整合這麼多實用的工具和 API?感覺就像在打造自己的科技夢想,能分享一下靈感來源嗎?