解放雙手,AI助手為你打理一切
Github: JasonWu55/ai-assistant
引言
你是否曾幻想過擁有一個像電影裡那樣聰明的AI助手,可以隨時隨地為您解答問題、安排行程?現在,這個夢想不再遙不可及。透過Node.JS、Ollama的結合,我們可以打造一個屬於自己的AI祕書,讓生活變得更加便利。
AI助手
近年來,AI技術的飛速發展,被廣泛運用在各種領域,一開始是ChatGPT帶起了這波風潮,後來漸漸的有許多大模型被開源,因而讓我發現到能在本地跑AI。
最近我在用Siri時,有了一個點子,如果能新增AI在這個語音助手,使其功能更加強大,那該有多好。於是我開始著手研究,希望能打造一個專屬於自己的AI語音助理。
伺服器系統架構
Express.JS
作為客戶端與伺服器的溝通媒介,當成API來使用。
/chat
處理AI問答
/start
載入模型
/stop
釋放模型
Ollama AI 核心
官方網站: Ollama
Ollama是一套程式用於本地跑AI文字模型
在做學測單字卡時曾經用過Ollama來生成例句。這次則是用來作為個人助手
Ollama提供了本地API接口與npm套件來達成AI問答
// 讀取系統提示文件
const systemPrompt = fs.readFileSync('./system_prompt.txt', 'utf-8');
const response = await ollama.chat({
model: process.env.MODEL_NAME,
messages: [
{
role: 'system',
content: 'Current Time: '+Date()
},
{
role: 'system',
content: systemPrompt
},
{
role: 'user',
content: req.body.message
}
],
keep_alive: -1,
options: {
temperature: 0.7, // 控制輸出的隨機性 (0-1)
top_p: 0.9, // 控制輸出的多樣性
top_k: 40, // 限制每次選擇的候選詞數量
repeat_penalty: 1.1, // 降低重複內容的可能性
seed: 5, // 固定隨機種子以獲得可重複的結果
num_predict: 100, // 生成的最大token數量
}
});
透過JSON格式對AI送出prompt以及使用者輸入資料並調節細項
行事曆處理
我使用Google Calendar管理行事曆,既有現成的API可以調用,還可以直接整合到iOS的內建行事曆。
Google Cloud Console
新增一個專案
啟用Google Calendar API
設定OAuth 2.0
搭配Claude3.5 AI生成Google Calendar Module
功能大致分別為
getDayEvents(date)
: 取得某日行程
getWeekEvents(date)
: 取得某周行程
getMonthEvents(date)
: 取得某月行程
createEvent(detail)
: 創建行程
提示詞結構
一樣使用Claude3.5協助生成,讓本地AI能夠了解我在幹嘛。我的作法為讓AI判斷我的問題的目的,生成幾種指令
直接回覆
[REPLY]: 直接回覆
課表相關
[SUBJECT]: 查課表
行事曆相關
[CAL:TODAY]: 取得當天行程
[CAL:DAY:{date}]: 取得某日行程
[CAL:WEEK]: 取得當周行程
[CAL:MONTH]: 取得當月行程
[ADD_CAL_{title}_{start_time}_{end_time}_{is_all_day}]: 新增行程
客戶端
由於我使用iOS與iPadOS,使用捷徑能與系統做最大化的相容。
捷徑連結: 捷徑
下載安裝
從Github下載專案
git clone https://github.com/JasonWu55/ai-assistant.git
cd ai-assistant
安裝套件
pnpm i
若沒有pnpm使用以下指令安裝
npm i -g pnpm
取得Google Cloud OAuth2.0驗證JSON
參考資料: Day23-介接 API(一)Google Calendar(I)啟用 API 與 Events——Create - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
將JSON檔案改名為
oauth_credentials.json
並放置於services/config
將
.env.example
更改並改名為.env
安裝 Ollama
透過以下指令安裝
qwen2.5:32b
ollama pull qwen2.5:32b
8. 啟動專案
npm start
使用方法
與AI對話
Endpoint
POST
/chat
Request
{
“message”: “string”
}
Response
{
“message”: “string”
}
載入模型
Endpoint
POST
/start
Request
(empty)
Response
{
“status”: “string”,
“message”: “string”
}
釋放模型
Endpoint
POST
/stop
Request
(empty)
Response
{
“status”: “string”,
“message”: “string”
}