開源的Llama 2有哪些玩法?本篇文章介紹開發者與Llama 2的互動方式

Softaverse
7 min readApr 14, 2024
Powerful AI Assistant

上一篇文章介紹的如何在本機安裝,且成功執行Llama 2生成隨機內容。llama.cpp支援了幾種與Llama 2的互動方式,開發者可以靈活運用這些模式,加上自己的商業邏輯做出想要的效果。

Interactive Mode

互動模式是類似ChatGPT的對話體驗,可以跟Llama 2進行一問一答的互動。進入互動模式只需加入選項--interactive--interactive-first即可。

--interactive 為例:

./main --ctx_size 2048 --temp 0.7 --top_k 40 --top_p 0.5 --repeat_last_n 256 --batch_size 1024 --repeat_penalty 1.17647 --model ./models/llama-2-13b-chat/ggml-model-Q4_K_M.gguf --threads 8 --n_predict 2048 --color --interactive --reverse-prompt "Softaverse:" --in-prefix " " --prompt \
'Softaverse: Hi
AI: Hello. I am an AI chatbot. Would you like to talk?
Softaverse: Sure!
AI:'
Interactive Mode with interactive

--prompt :預帶對話的主題,避免Llama 2隨機生成內容,在--interactive 模式下,Llama 2會優先生成內容。

--reverse-prompt :在互動模式下會暫停文字生成,例如上面的prompt遇到文字「Softaverse」,Llama 2停止文字生成等待新的對話內容。

--in-prefix :由於reverse prompt結尾是空格的話功能會失效,它的用途是在輸入文字之前加上空格,讓對話格式比較好看。

--interactive-first 為例:

./main -m ./models/llama-2-13b-chat/ggml-model-Q4_K_M.gguf -n 256 --repeat_penalty 1.0 --color --interactive-first -r "User:" --in-prefix " " --prompt \
"User: Hi?
Llama 2: Hello. I am an AI chatbot. Would you like to talk?
User: Sure!
Llama 2: What would you like to talk about?
User:"
Interaction Mode with interactive-first

--interactive-first :Llama 2暫停生成內容,讓用戶優先進行對話。

Persistent Interaction

過去的對話紀錄想要保存下來怎麼辦?沒錯,可以用「Persistent Ineration」來保留,下次可以呼叫出來繼續對話,非常實用的一個功能。

指令可以分成以下幾種:

Start a new chat

開始一個新的紀錄:

PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh
Persistent Mode

Resume that chat

回復上次的對話紀錄:

PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/default ./examples/chat-persistent.sh

Start a different chat with the same prompt/model

用同一個模型,並開始一個全新的對話:

PROMPT_CACHE_FILE=chat.prompt.bin CHAT_SAVE_DIR=./chat/another ./examples/chat-persistent.sh

Different prompt cache for different prompt/model

使用不同模型&全新對話:

PROMPT_TEMPLATE=./prompts/chat-with-bob.txt PROMPT_CACHE_FILE=bob.prompt.bin CHAT_SAVE_DIR=./chat/bob ./examples/chat-persistent.sh
Persistent Interaction - Bob

Constrained output with grammars

再來介紹一個實用功能,Llama 2常常回覆的內容不如預期,這時可以限制Llama 2用你想要的格式輸出內容,比如以JSON格式為例:

./main -m ./models/llama-2-13b-chat/ggml-model-Q4_K_M.gguf -n 256 --grammar-file grammars/json.gbnf -p 'Request: schedule a call at 8pm; Command:'
Constrained output with grammers

想要實踐屬於自己商業邏輯的格式,可以撰寫GBNF檔案來完成。GBNF(GGML BNF)是llama.cpp用來限制輸出格式的文法格式,例如以上的JSON格式範例,或者讓模型只回覆emoji,下一篇文章來仔細介紹如何撰寫自己的輸出格式。

Instruct mode

這個模式與「Interation mode」雷同,Llama 2會根據你的需求做出正確的回應:

./examples/alpaca.sh
Instruct Mode

以上就是目前搭配llama.cpp支援的模式,我認為已足夠強大到可以實作自己的商業邏輯進去,並且加以應用。重啟對話與GBNF都非常實用,目前我也還在摸索並用想要實現的邏輯試試效果,下一篇文章來仔細介紹如何使用GBNF客製化輸出格式。

本篇文章同步刊登於Softaverse - 開源的Llama 2有哪些玩法?本篇文章介紹開發者與Llama 2的互動方式

--

--