前言
在上一篇文章中,我們講了如何安裝 Ollama 並使用 LLM 模型,但光只能透過 cmd 對話我想對於部分人士是不滿足的,尤其有些人是開發控。
因此,這篇文章就要來說說如何透過 API 的方式,呼叫 Ollama 並請他執行 LLM 模型得出結果。
讓 Ollama 工作
首先我們先要檢查 Ollama 是不是正在工作了,在 Windows 上只要你不關掉,他會一直在背景運作並在右下顯示一個 icon。
不過你如果不喜歡這種方式,你就喜歡看到 cmd 的話,你可以執行 ollama serve
也有一樣的效果。
使用 API 溝通
Ollama 預設會在 Port 11434
執行,我們接下來都會使用 POST
向 http://localhost:11434/api/chat
發送請求。在這個過程中,我會使用 Postman 作為解釋方式,因為我覺得這樣比較直觀。不過我也會同時放上等效的 curl 命令,以便大家開發以及 我之後複製使用 。
單句對話
與 Ollama 溝通時,我們都必須在 body 塞上一個 JSON 給他。這個 JSON 內容包含了你想選擇的模型以及內容。以下是一個範例:
{
"model": "gemma2",
"messages": [
{
"role": "user",
"content": "你好,請給我一個有關於亞馬遜這間公司的故事,並使用繁體中文回答。"
}
],
"stream": false
}
送出後,他就會反應這樣的結果:
等效 curl 命令:
curl --location 'http://localhost:11434/api/chat' \
--header 'Content-Type: application/json' \
--data '{"model": "gemma2","messages": [{"role": "user","content": "你好,請給我一個有關於亞馬遜這間公司的故事,並使用繁體中文回答。"}],"stream": false}'
包含 prompt 的對話
如果你想預先指定命令給模型,這可能會是你要求模型的背景故事,你可以在 messages
開頭加入內容,並告訴他這時候的 role
是 system
。
{
"model": "gemma2",
"messages": [
{
"role": "system",
"content": "你是一位歷史老師,你需要用比較專業的口氣回答問題,像是講課那樣,最後請使用繁體中文回答。"
},
{
"role": "user",
"content": "告訴我一個有關台灣的故事。"
}
],
"stream": false
}
這是我跑出來的結果:
等效 curl 命令:
curl --location 'http://localhost:11434/api/chat' \
--header 'Content-Type: application/json' \
--data '{"model": "gemma2","messages": [{"role": "system","content": "你是一位歷史老師,你需要用比較專業的口氣回答問題,像是講課那樣,最後請使用繁體中文回答。"},{"role": "user","content": "告訴我一個有關台灣的故事。"}],"stream": false}'
持續對話
以上都比較算是一次性的對話,但是你也可以將吐出來的內容新增回去 messages
的陣列中,就可以達成這樣的要求。
{
"model": "gemma2",
"messages": [
{
"role": "system",
"content": "你是一位歷史老師,你需要用比較專業的口氣回答問題,像是講課那樣,最後請使用繁體中文回答。"
},
{
"role": "user",
"content": "告訴我一個有關台灣的故事。"
},
{
"role": "assistant",
"content": "同學們,今天我們來聊一聊台灣的歷史,一個充滿故事和變遷的島嶼。 \n\n我想介紹一個關於二戰時期台灣的有趣故事。 \n\n當日治時期,隨著戰爭的發展,日本政府開始將台灣視為重要的軍事基地。為了防禦盟軍進攻,他們在全台各地興建大量的軍營、碉堡和防空設施。這些建設不僅改變了台灣的風景,也影響了當時人民的生活。\n\n有些居民被迫遷離家園,讓給軍隊使用;許多產業也被改為生產軍事物資,例如鐵礦、木材等。 甚至連教育資源也受到了影響,部分學校被改建為軍醫院或儲藏兵需。\n\n然而,這些軍事建設卻未能阻擋盟軍的進攻。1945年8月,日本投降,台灣正式結束了長達50年的殖民統治。戰爭帶來了毀滅,但也成為了歷史轉折點,開啟了台灣新的篇章。\n\n\n \n\n今天我們講述的是戰時台灣的故事,僅為一斑。台灣的歷史豐富多彩,還有許多值得我們探索和學習的故事。下次課堂上,我們將繼續深入了解台灣過去,並探討它如何影響著當下的生活。 \n"
},
{
"role": "user",
"content": "告訴我更多台灣被日本殖民時的社會事件。"
}
],
"stream": false
}
這是我跑出來的結果:
等效 curl 命令:
curl --location 'http://localhost:11434/api/chat' \
--header 'Content-Type: application/json' \
--data '{"model": "gemma2","messages": [{"role": "system","content": "你是一位歷史老師,你需要用比較專業的口氣回答問題,像是講課那樣,最後請使用繁體中文回答。"},{"role": "user","content": "告訴我一個有關台灣的故事。"},{"role": "assistant","content": "同學們,今天我們來聊一聊台灣的歷史,一個充滿故事和變遷的島嶼。 \n\n我想介紹一個關於二戰時期台灣的有趣故事。 \n\n當日治時期,隨著戰爭的發展,日本政府開始將台灣視為重要的軍事基地。為了防禦盟軍進攻,他們在全台各地興建大量的軍營、碉堡和防空設施。這些建設不僅改變了台灣的風景,也影響了當時人民的生活。\n\n有些居民被迫遷離家園,讓給軍隊使用;許多產業也被改為生產軍事物資,例如鐵礦、木材等。 甚至連教育資源也受到了影響,部分學校被改建為軍醫院或儲藏兵需。\n\n然而,這些軍事建設卻未能阻擋盟軍的進攻。1945年8月,日本投降,台灣正式結束了長達50年的殖民統治。戰爭帶來了毀滅,但也成為了歷史轉折點,開啟了台灣新的篇章。\n\n\n \n\n今天我們講述的是戰時台灣的故事,僅為一斑。台灣的歷史豐富多彩,還有許多值得我們探索和學習的故事。下次課堂上,我們將繼續深入了解台灣過去,並探討它如何影響著當下的生活。 \n"},{"role": "user","content": "告訴我更多台灣被日本殖民時的社會事件。"}],"stream": false}'
結語
這些就是使用 API 呼叫的幾種對話方式啦,當然這邊看起來都還是用手打的,但他確實應該結合程式語言來發展出更多花樣。而這之後的開發過程,就要依靠大家自己的程式實力囉!