第一階段:土法煉鋼(Custom Python Bot)
現階段的想法很簡單,最近龍蝦很夯,我也想自製一下。但初期,先讓自己可以透過其他方式與電腦溝通。因此我們(這邊用我們表示「我」和AI)在一開始嘗試用了最麻煩的方式:手寫 Python 腳本。
- 作法:直接對接 LM Studio API,並透過 DuckDuckGo/Selenium 寫爬蟲去抓網頁。
- 遇到的困難:
- IP 被鎖:爬蟲經常被 Google 擋下來。
- 模型限制:本機跑的小模型 (8B 參數) 有時候不夠聰明,會忘記呼叫搜尋工具。
- 維護困難:為了處理各種網頁格式,程式碼越寫越複雜。
# local_bot.py (已棄用)async def handle_message(update, context): # 1. 先問 AI 需不需要搜尋 messages = [{"role": "system", "content": "If you need data, start reply with 'SEARCH: <query>'"}] reply = client.chat.completions.create(..., messages=messages) # 2. 如果 AI 說要搜尋,我們就自己去爬蟲 if reply.startswith("SEARCH:"): query = reply.replace("SEARCH:", "") # 使用 DuckDuckGo 爬蟲 results = DDGS().text(query, backend="html") # 3. 把爬到的資料塞回給 AI,再問一次 messages.append({"role": "user", "content": f"Search Results: {results}"}) final_reply = client.chat.completions.create(..., messages=messages)
這種寫法雖然可行,但非常脆弱,模型如果自主性高一點就會失敗,自動回覆他不清楚。
第二階段:導入 MCP 協定 (Native Search)
為了讓 LM Studio 能原生上網,我們試過 Model Context Protocol (MCP)。 當時的設定如下,這讓模型知道它有「搜尋」這個工具:
{ "mcpServers": { "local-search": { "command": "/opt/homebrew/bin/python3.12", "args": ["/path/to/search_mcp.py"] } }}
第三階段:大腦升級(Moving to AnythingLLM)
後來我們決定導入 AnythingLLM Desktop,這是一個決定性的轉捩點。
- 為什麼選它?:它就像是給 AI 裝上了「外掛大腦」。它內建了 RAG (文件檢索) 和 Web Search Agent (搜尋代理),我們不需要再自己寫爬蟲了。然後最重要的是,他已經有網頁連接了,且我之前就有相關的實作了。
- 現在的架構:
- 使用者介面:Telegram Bot (負責接收訊息)。
- 核心大腦:AnythingLLM (負責判斷要不要上網查資料,或是讀 PDF)。
- 推理引擎:LM Studio (負責生成最後的文字)。
系統可以了,telegram也可以順利連接了,但是下一個問題是系統時間。
AnythingLLM 很強,但它是一個封閉系統,不知道「現在幾點」。 我們在 Telegram Bot 裡做了一個小巧思:在把訊息丟給 AI 之前,偷偷塞入系統時間與指令,並且命令他以中文回覆。
# anythingllm_bot.py 核心邏輯async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): user_text = update.message.text # 🌟 關鍵:注入時間戳記與強制中文指令 current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") augmented_text = f"[System Note: Current Time is {current_time}. Please ALWAYS reply in Traditional Chinese (繁體中文).] {user_text}" # 呼叫 AnythingLLM API response = requests.post( f"{ANYTHINGLLM_URL}/workspace/{WORKSPACE_SLUG}/chat", headers={ "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" }, json={ "message": augmented_text, # 這裡傳送的是加工過的訊息 "mode": "chat" } ) # ... (回傳結果給使用者)
透過這段程式碼,我們實現了:
- 真實時間感知:AI 知道現在是 2026 年,不會胡亂回答。
- 繁體中文優化:強制 AI 使用繁體中文回答,避免它突然講英文。
- 全自動聯網搜尋:由 AnythingLLM 的 Agent 自動判斷是否上網。
第四階段:網路連線(SerpApi 的技術筆記)
在開發過程中,我們也評估了 SerpApi 這個強大的工具。如果你也想開發自己的 AI 應用,這裡有一些經驗分享:
SerpApi 是什麼?
它是 Google 搜尋的「付費快速通關」。如果你自己寫程式爬 Google,大概爬個幾次就會跳出驗證碼 (CAPTCHA) 把你擋住。SerpApi 就是幫你解決這些麻煩,給你乾淨的 JSON 資料。
什麼時候該用它?
- 一般用途:不用買。像 AnythingLLM 這種工具通常有內建免費的爬蟲。
- 專業用途:如果你需要爬取 Google Map 商家評論、Google Shopping 商品價格、或是 Google Flights 機票資訊,這些複雜結構的資料普通的爬蟲抓不到,這時候 SerpApi 就是神器。
使用範例 (Python)
如果你想自己寫程式串接,代碼非常簡單:
from serpapi import GoogleSearchparams = { "q": "台北 咖啡廳 推薦", "location": "Taipei, Taiwan", "hl": "zh-tw", # 設定繁體中文 "gl": "tw", # 設定地區 "api_key": "你的_API_KEY"}search = GoogleSearch(params)results = search.get_dict()# 輕鬆拿到乾淨的資料結果
所以現在系統就可以連接了。

如何與 Telegram 對接?
除了 AI 本體,大家最好奇的應該是:「要怎麼讓它變成一個 Telegram 機器人?」
步驟一:跟 BotFather 申請帳號
- 打開 Telegram,搜尋 @BotFather。
- 輸入
/newbot。 - 幫機器人取個名字 (例如
MyAI_Bot)。 - 它會給你一串 Token (像這樣:
123456:ABC-DEF...),這就是鑰匙。
步驟二:Python 程式碼實作
我們使用了 python-telegram-bot 這個套件,只要幾行程式碼就能串起來。
這是與 Telegram 溝通的程式碼:
from telegram import Updatefrom telegram.ext import ApplicationBuilder, MessageHandler, filters# 設定您的 TokenTELEGRAM_TOKEN = "你的_BOT_TOKEN_在這裡"async def handle_message(update: Update, context): user_text = update.message.text chat_id = update.effective_chat.id # 這裡就是把 user_text 丟給 AnythingLLM 的地方 (參考下一段時間注入) # ... # 把 AI 的回應傳回給使用者 await context.bot.send_message(chat_id=chat_id, text=reply_text)if __name__ == '__main__': # 啟動機器人監聽 app = ApplicationBuilder().token(TELEGRAM_TOKEN).build() app.add_handler(MessageHandler(filters.TEXT, handle_message)) app.run_polling()
這段程式碼就像是「郵差」,負責把 Telegram 的信 (訊息) 收下來,跑腿交給 AnythingLLM 處理,再把回信 (AI 回應) 送回給使用者。
