LLM REST APIs with a simple front end

建置自己的ChatGPT原來這麼簡單!LLM REST APIs and a simple web front end with llama.cpp

我們花了大量的時間和精力,在本地成功地啟動了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根目錄,選擇一個你喜歡的模型,本篇以Llama 3為例:

./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf -c 2048
Run LLM Server

看到此畫面就大功告成了,接著可以進行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}'
Testing with CURL

測試成功從API得到回應。

用NodeJS測試

API Endpoints

其它API Endpoints請參考原文


你的ChatGPT

llama.cpp server執行成功後,打開瀏覽器網址列輸入:127.0.0.1:8080,預設有簡易的聊天界面:

llama.cpp server default chat page

簡易對話:

Simple chat

自己本機的ChatGPT就大功告成啦!

GBNF Grammar

在這邊我們一樣可以使用GBNF來控制LLM的輸出格式(參考:不用find-tune也能保證Llama 2不亂說話!善用“Grammar”客製化輸出內容)。

以Book的GBNF為例:

Show me a book

以Car的GBNF為例:

Recommend me a car

Theme

若你也覺得介面太單調,llama.cpp有預設幾個介面範例可以切換。

Buttons Top:

./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf --path themes/buttons_top
Buttons Top

Wild:

./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf --path ./examples/server/themes/wild
Wild

Simple Chat:

./server -m ./models/ggml-meta-llama-3-8b-Q4_K_M.gguf --path ./examples/server/public_simplechat
Simple Chat

當然,也可以客製化介面,基本上就是引入Rest APIs就行了,與OAI APIs串接過程是一樣的。


這是我在建置Llama 3應用過程中的紀錄,過程中不是所有流程都非常順利,許多卡住的地方花了很多時間研究。文章內容以濃縮所有的結果,基本上只要複製貼上就能得到相同結果,分享出來給同為開發者的你能夠少走一些彎路。若你覺得本篇文章有幫助到你,也請不吝嗇幫我按個讚,讓我知道這篇文章有幫助到你,感謝各位!

本篇文章同步刊登於Medium – 建置自己的ChatGPT原來這麼簡單!LLM REST APIs and a simple web front end with llama.cpp

喜歡運用科技工具提升工作效率、並自主開發實用小工具的長時間使用電腦工作者。對新科技工具深感興趣,樂於分享如何運用科技工具提升生活和工作效率的技巧。

發佈留言