我們花了大量的時間和精力,在本地成功地啟動了Llama 3。最令人開心的是,這不僅可以降低成本,還能夠客製化地應用於我們自己的商業邏輯中。經過本地測試開發的完成,接下來我們將把服務部署到伺服器上。而Llama.cpp提供了開箱即用的HTTP server,這篇文章將介紹如何與其進行串接,以便為即將上線的服務做好準備。
進一步建置HTTP server使我們能夠利用Restful API與Llama 3進行串接。Llama.cpp提供了一個類似於OAI的API介面(參考OpenAPI),透過這個API,我們可以與應用程序進行串接並進行參數調整,就像與OAI API進行串接一樣。最重要的是,在本地進行測試時無需花費任何一分錢。本篇文章將以聊天機器人為例,演示如何在本地建立自己的ChatGPT。
實作
接下來我們會透過llama.cpp建置一系列的LLM REST APIs,以及簡單的前端互動聊天界面。
Prerequest
- llama.cpp
- GGUF模型(本篇以Llama 3的GGUF模型為例,參考Llama 3來了!本篇一步步教你如何在本機安裝使用)
- 主機(本篇使用MacBook Pro M2 16GB)
執行
進入llama.cpp根目錄,選擇一個你喜歡的模型,本篇以Llama 3為例:
./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf -c 2048
看到此畫面就大功告成了,接著可以進行API呼叫,預設的Host: 127.0.0.1:8080,測試看看結果如何。
用curl測試
使用/completion測試:
curl --request POST \
--url http://localhost:8080/completion \
--header "Content-Type: application/json" \
--data '{"prompt": "Building a website can be done in 10 simple steps:","n_predict": 128}'
測試成功從API得到回應。
用NodeJS測試
API Endpoints
其它API Endpoints請參考原文。
你的ChatGPT
llama.cpp server執行成功後,打開瀏覽器網址列輸入:127.0.0.1:8080,預設有簡易的聊天界面:
簡易對話:
自己本機的ChatGPT就大功告成啦!
GBNF Grammar
在這邊我們一樣可以使用GBNF來控制LLM的輸出格式(參考:不用find-tune也能保證Llama 2不亂說話!善用“Grammar”客製化輸出內容)。
以Book的GBNF為例:
以Car的GBNF為例:
Theme
若你也覺得介面太單調,llama.cpp有預設幾個介面範例可以切換。
Buttons Top:
./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf --path themes/buttons_top
Wild:
./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf --path ./examples/server/themes/wild
Simple Chat:
./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf --path ./examples/server/public_simplechat
當然,也可以客製化介面,基本上就是引入Rest APIs就行了,與OAI APIs串接過程是一樣的。
這是我在建置Llama 3應用過程中的紀錄,過程中不是所有流程都非常順利,許多卡住的地方花了很多時間研究。文章內容以濃縮所有的結果,基本上只要複製貼上就能得到相同結果,分享出來給同為開發者的你能夠少走一些彎路。若你覺得本篇文章有幫助到你,也請不吝嗇幫我按個讚,讓我知道這篇文章有幫助到你,感謝各位!
本篇文章同步刊登於Medium – 建置自己的ChatGPT原來這麼簡單!LLM REST APIs and a simple web front end with llama.cpp
喜歡運用科技工具提升工作效率、並自主開發實用小工具的長時間使用電腦工作者。對新科技工具深感興趣,樂於分享如何運用科技工具提升生活和工作效率的技巧。