使用VIM作為有效設計和運行,調試和保存大型語言模型(LLMS)提示的工具。
prompter.vim將VIM編輯器轉換為有效的及時工程環境,有效地替換了LLM專有提供商網絡操場,例如:Azure OpenAi Service Playground或OpenAI Playground。
從0.2版中,該插件將LITELLM用作LLM提供商抽象層。
Litellm使用OpenAi格式來調用所有LLM API:基岩,Azure,Openai,Cohere,Anthropic,Ollama,Ollama,Sagemaker,Huggingface,Replicate(100+ LLMS)。因此,您可以將Prompter.vim與大量不同的LLM提供商列表一起使用!
<F9> (鍵快捷方式:PrompterSetup )<F12> (鍵快捷方式:PrompterGenerate )以完成LLM完成myexperiment.prompt ) ![]() |
|---|
| prompter.vim在行動中:編輯/與提示進行編輯/互動,以模擬電話對話(以下技術被描述為“對話為文本提示的一部分”) |
prompter.vim並非主要設計為代碼完成工具,儘管您也可以將其用於此目的。
取而代之的是,該插件旨在成為Web文本完成操場的通用替代品,該插件旨在為想要測試和調試自然語言提示的及時工程師提供。
當我編寫LLM提示並嘗試及時的工程技術時,這個想法出現在2023年春季。我正在使用一種直接的“文本完成”方法,您可以在其中輸入文本提示語料庫,並要求從大語言模型(LLM)完成完成。
我最初的方法是利用LLM提供商提供的網絡操場。但是,我遇到了許多問題,尤其是在與Azure Openai Web遊樂場進行互動時。
由於我尚未理解的原因,Azure Web遊樂場上的Web互動在一定程度之後大大放慢了速度。我懷疑完成框中的錯誤。此外,我不喜歡“聊天完成”模式的Azure Web界面。一團糟!取而代之的是,原始的OpenAI遊樂場可以更好地實施,我沒有遇到上述問題。
儘管如此,提到的兩個網絡遊樂場都只允許每個瀏覽器選項卡一個提示。因此,當處理多個主動提示(開發由嵌套/鍊式模板提示組成的複合應用程序)時,您必須在不同的選項卡中維護多個打開的遊樂場。當您獲得某些值得注意的結果時,必須複製所有文本框並將其保存在版本的文件中。
使用網絡遊樂場進行所有這些都是一個笨拙且容易出錯的過程。最後的想法是:如果我可以直接在VIM編輯器中完成完成該怎麼辦?
text或chat完成?在OpenAI或類似Current LLMS中,有兩種常見的“完成模式”:
text完成
完成模式集作為text表示LLM完成,給定上下文窗口提示文本帶有完整文本( - > in -> text of Out)。這種模型設置的一個示例是text-da-vinci-003 OpenAI模型。要使用文本完成模式,該模型必須通過特定的API支持該模式。
┌────────────────────────┐
┌─ │ │ ─┐
context │ │ bla bla bla │ │
window │ │ bla bla │ │
= │ │ bla bla bla bla │ │ prompt
prompt │ │ bla │ │
+ │ │ bla bla │ │
completion │ │ │ ─┘
│ └────────────────────────┘
│ |
│ LLM generation
│ |
│ v
│ ┌────────────────────────┐
│ │ │ ─┐
│ │ bla bla │ │
│ │ bla bla bla │ │ text completion
│ │ bla │ │
└─ │ │ ─┘
└────────────────────────┘
chat完成
完成模式集作為chat ,意味著llm s對聊天“角色”進行微調(用戶說,助手說,...)。前面的細節,請閱讀此內容。上下文窗口提示實際上是由
gpt3.5-turbo OpenAI模型。要使用聊天完成模式,該模型必須支持該模式,特定於特定的API。 ┌────────────────────────┐
┌─ │ bla bla bla bla │ ─┐
│ │ bla bla bla │ │
│ │ bla bla │ │ system
│ │ bla bla bla bla │ │ prompt
context │ │ bla │ │
window │ │ bla bla │ ─┘
= │ └────────────────────────┘
system prompt │ ┌────────────────────────┐
+ │ │ user: blablabla │ ─┐
chat │ ├────────────────────────┤ │
+ │ │ assistant: bla bla bla │ │
completion │ ├────────────────────────┤ │ chat
│ │ user: bla bla bla │ │ prompt
│ ├────────────────────────┤ │
│ │ assistant: blabla bla │ │
│ ├────────────────────────┤ │
│ │ user: blabla bla │ ─┘
│ └────────────────────────┘
│ |
│ LLM generation
│ |
│ v
│ ┌────────────────────────┐
│ │ │ ─┐
└─ │ assistant: bla bla bla │ │ chat completion
│ │ ─┘
└────────────────────────┘
prompter.vim插件被認為可以用作文本完成器快速原型遊樂場,避免了聊天角色的並發症。
因此,如果使用僅在聊天模式下使用的模型(例如OpenAI GPT3.5-Turbo ),則在幕後(通過litellm text_completion()方法)在幕後使用編輯器文本內容(提示符)作為“系統”角色提示。另請參閱:討論。
我知道,如上所述,使用基於聊天的模型作為基於文本的模型並不是最佳用法,而是具有單個文本完成操場的簡單性與管理聊天角色的複雜性的簡單性之間的折衷。
該插件是在Python3中製成的。檢查您的VIM安裝是否支持Python3:
vim --version | grep " +python3 " | awk ' {print $3} '就我而言,我得到了+python3 。那是主要的先決條件。
還檢查哪個是python版本,該版本是編譯VIM的。用命令提取精確的Python版本:
vim --version | grep -o -P ' (?<=/python)[0-9]+.[0-9]+ '就我而言,我得到了3.8 。
請注意,VIM只能使用Python版本(和相關軟件包)進行編譯。例如,如果您的系統Python當前版本(
python3 --version==Python 3.11.6)與VIM Python版本有所不同,例如Python 3.8,請記住,VIM只會看到Python 3.8套餐。要使用Python 3.11.6軟件包,您必須重新編譯VIM。
安裝Python軟件包litellm 。您必須使用相應的Python版本的pip安裝litellm ,例如pip3.8 。
pip3.8 install -U litellm 使用您首選的插件管理器安裝插件,例如使用VIM插件插件管理器,在.vimrc文件中插入:
Plug ' solyarisoftware/prompter.vim ' # PROVIDER DEPENDENT SETTINGS USING LiteLLM CONFIGURATION
# https://docs.litellm.ai/docs/providers
# https://docs.litellm.ai/docs/providers/azure
# LLM PROVIDER MANDATORY SETTINGS
export AZURE_API_VERSION=2023-09-01-preview
export AZURE_API_BASE= " https://XXXXXXXXXXXXXXX.openai.azure.com/ "
export AZURE_API_KEY= " YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY "
export MODEL= " azure/your_deployment-name "
# LLM PARAMETERS OPTIONAL SETTINGS
# translated OpenAI model parameters
# https://docs.litellm.ai/docs/completion/input#translated-openai-params
export TEMPERATURE=0.3
export MAX_TOKENS=3000
export OPENAI_STOP= " "一個好主意是編輯並將上面的所有變量保存在隱藏的文件中,例如vi ~/.prompter_azure.vim ,並使用source ~/.prompter_azure.vim執行它
您可以在vim命令模式( :或關聯密鑰中運行命令:
| 命令 | 鑰匙 | 行動 |
|---|---|---|
:PrompterSetup | <F9> | 模型設置和初始配置 |
:PrompterGenerate | <F12> | 運行LLM文本完成 |
:PrompterInfo | <F10> | 報告當前配置 |
:PrompterSetup當您輸入VIM時,要激活求職者遊樂場環境,首先以命令模式運行:
:PrompterSetup遵循環境設置,如果成功,命令在狀態行中打印模型配置:
Model: azure/gpt-35-turbo completion mode: chat temperature: 0.7 max_tokens: 100
狀態行報告中值的說明:
temperature preset value ───────────────────────────┐
│
max_tokens preset value ──────────┐ │
│ │
┌─────┐ ┌────────────┐ ┌────┐ ┌─┴─┐ ┌─┴─┐
Model:│azure│/│gpt-35-turbo│ completion mode:│chat│ temperature:│0.7│ max_tokens:│100│
└──┬──┘ └─────┬──────┘ └──┬─┘ └───┘ └───┘
│ │ │
│ │ └─ chat or text, depending on the model
│ │
│ └── name of the Azure deployment
│
└───────────── name of the LLM provider
:PrompterGenerate在VIM窗口上編輯您的提示,然後運行LLM完成
:PrompterGenerate狀態行報告一些統計信息:
Latency: 1480ms (1.5s) Tokens: 228 (prompt: 167 completion: 61) Throughput: 154 Words: 28 Chars: 176, Lines: 7
狀態行報告中值的說明:
┌─ latency in milliseconds and seconds
│
│ ┌───────────────────────────────── total nr. of tokens
│ │
│ │ ┌──────────────────── nr. of tokens in prompt
│ │ │
│ │ │ ┌──── nr. of tokens in completion
│ │ │ │
┌─┴───────────┐ ┌─┴─┐ ┌─┴─┐ ┌─┴┐ ┌───┐ ┌──┐ ┌───┐ ┌─┐
Latency:│1480ms (1.5s)│Tokens:│228│(prompt:│167│completion:│61│) Throughput:│154│Words:│28│Chars:│176│ Lines:│7│
└─────────────┘ └───┘ └───┘ └──┘ └─┬─┘ └─┬┘ └─┬─┘ └┬┘
│ │ │ │
│ │ │ │
Latency / Tokens ───────────────────────┘ │ │ │
│ │ │
nr. of words ───────────┘ │ │
│ │
nr. of characters ─────────────────────┘ │
│
nr. of lines ────────────────────────────────┘
統計數據報告了這些指標:
| 公制 | 描述 | 例子 |
|---|---|---|
| 潛伏期 | 毫秒和第二個近似的機器人 | 1480ms (1.5s) |
| 令牌 | 總代幣金額,提示小計和完成 | 228 |
| 吞吐量 | 完成令牌 /延遲比率(以秒為單位)。請參閱有關吞吐量概念的討論 | 154 |
| 字 | 完成中產生的單詞數量 | 28 |
| 炭 | 完成中的字符數 | 176 |
| 線 | 完成中生成的線數 | 7 |
默認情況下,該命令分配給函數密鑰
F12。通過按下單擊鍵F12,您可以運行完成。
:PrompterInfo報告當前插件版本,插件命令列表,當前模型設置。
:PrompterInfo命令打印以下信息:
Version:
prompter.vim, by [email protected], version 0.2 (November 28, 2023)
Model:
Model: azure/gpt-35-turbo completion mode: chat temperature: 0.5 max_tokens: 1500
Commands:
PrompterGenerate <F12>
PrompterInfo <F10>
PrompterSetup <F9>
獲取並設置完成背景和前景顏色:
echo g: prompter_completion_ctermbg
echo g: prompter_completion_ctermfg
let g: prompter_completion_ctermbg = 3
let g: prompter_completion_ctermfg = 0如果您不喜歡默認的突出顯示顏色,則可以使用CTERM/XTERM 256顏色的子集替換
ctermbg和ctermfg值。要顯示所有可用的顏色,您可以使用命令:HighlightColors部分:突出顯示。
修改溫度值
let g: temperature = 0.2修改最大令牌值
let g: max_tokens = 2000
修改停止序列
let g: stop = [ ' x: ' , ' y: ' , ' z: ' ]使用此默認設置將命令與函數鍵關聯:
let g: prompter_setup_keystroke = ' <F9> '
let g: prompter_info_keystroke = ' <F10> '
let g: prompter_generate_keystroke = ' <F12> '
let g: prompter_regenerate_keystroke = ' <F8> '即使在VIM中,您也可以通過示例將命令分配給您的首選項的鍵映射: map <F2> :PrompterGenerate<CR> ,您可以查看特定鍵的映射,例如F2 ,您可以使用VIM命令: map <F12> ,建議進行的建議的方法是修改上述或多個提及的變量和運行:PrompterSetup :PromperSetUp。
使用(包括VIM)拼寫檢查器
當您編寫LLM提示時,避免錯別字非常重要!如果您只是錯誤的動詞,我很多時候都經歷了LLM完成的最糟糕。
如果您正在用多種語言編寫提示,情況就會變得更糟。就我個人而言,我通常會用英語編寫對話提示,原因是我的文章非英語語言提示了工程折衷,但是聊天提示的目標語言是我的母語:意大利語。總而言之,提示包含英語和意大利語的文字。在這種情況下,我運行這個小的vimscript函數:
function ! Spell ()
set spelllang = en_us,it
setlocal spell
echom " Spell check set for Italian and English languages "
endfunction
com ! SPELL call Spell ()閱讀您以前的所有完成統計信息
messagesVIM將顯示最後的完成統計信息。例如,如果您只運行3個完成:
Latency: 961ms (1.0s) Tokens: 616 (prompt: 577 completion: 39) Throughput: 641 Words: 21 Chars: 134
Latency: 368ms (0.4s) Tokens: 648 (prompt: 642 completion: 6) Throughput: 1761 Words: 2 Chars: 15
Latency: 4227ms (4.2s) Tokens: 775 (prompt: 660 completion: 115) Throughput: 183 Words: 60 Chars: 377, Lines: 5
啟用線軟包
我通常使用全屏VIM設置。這有助於我最大程度地引起我的注意。然而,線條非常長(在PrompterGenerate後)並不有助於閱讀。
不幸的是,在VIM中配置固定列寬度軟包裝並不容易。參見討論。您可以使用以下命令設置軟性扭曲:
set wrap linebreak nolist 我正在用於原型對話框提示的技術是插入一個對話框轉動塊,如以下示例,在該示例中,對話框塊用“停止序列”終止( a:觸發llm以完成助手角色:
TASK
You (a:) are a customer care assistant and you are assisting a user (u:).
...
...
DIALOG
a: Hello! How can I assist you today?
u: I want to open a report.
a: Fantastic! First, could you provide me with a detailed description of the issue you're experiencing?
u: The computer monitor won't turn on.
a: Thank you for the description. What is the name or model of the product or system you're having trouble with?
u: I can't read the brand. It's the company's PC monitor.
a: Thank you for the information. What is your preferred method of contact?
u: via email at [email protected]
a: Thank you. Please confirm the provided email address: [email protected]
u: that's correct!
a:
在上述情況下,要設置LLM停止等待用戶輸入,您可以將停止序列設置為u: with命令:
let g: stop = [ ' u: ' ]請注意,如果您未設置如上所述的停止序列,LLM將嘗試完成整個對話。一般來說,這是不想要的,因為您想在u: 。然而,不設置g:stop以了解LLM如何想像對話流程是有用的。
其他可能有用的VIM命令:
u: ,只需按鍵F6 : map <F6> :normal ou: <CR> a: ,只需按鍵F7 : map <F7> :normal oa: <CR> 版本0.1
第一版。僅通過OpenAI版本0.28 Python模塊支持OpenAI/Azure OpenAI型號。
版本0.2
LLMS的完成是通過LLMS抽象層Python軟件包完成的,可以使用多種不同的LLM提供商。
支持所有LLM輸入參數
到目前為止,PROMPTER.VIM僅支持temperature , max_tokens , stop參數。
Litellm接受並翻譯所有提供商的OpenAI聊天完成參數。
支持模板提示
您正在設計由可以在運行時動態構建的各個部分組成的“模板提示”。例如,考慮您希望原型原型一個包含佔位符變量的“模板提示”,這些變量是對其他提示或文件填充的某些變量的引用,例如:
TASK
{some_task_description}
DATA
{some_yaml}
DIALOG
{dialog_history}
在上面的示例中,當使用Web Playgrounds時,您可以用作複製式中介機構。您需要打開四個Web選項卡,在每個標籤中執行文本完成,最後手動粘貼完成,替換{some_data} , {dialog_history}之類的變量。此外,您可能需要將文件加載到變量中,例如{some_yaml} 。
這個想法是支持模板提示編輯,允許使用其他緩衝區/窗口的內容即時替換可變佔位符。
異步LLM完成
當前,LLM完成命令PrompterGenerate是一個同步命令:編輯器被阻止,直到LLM API返回完成文本。對於非常複雜和長時間的提示可能需要許多秒的時間才能完成(例如10)。在這種情況下,如果命令可能是異步的,則可能會更好,從而允許開發人員在完成後使用VIM編輯器。
流支持
到目前為止,流媒體完成尚未考慮。
大衛·夏皮羅(David Shapiro)在LLM和生成AI上進行了巨大的傳播工作。我一直熱情洋溢,尤其是他的LLM及時工程現場編碼YouTube視頻!
Vivian de Smedt VIM專家為解決此插件時遇到的問題的幫助解決了。
Litellm的創建者將一些建議的功能集成為文本完成格式!
該項目是概念驗證的Alfa版本!
我不是Vimscript專家,因此歡迎任何貢獻或建議。有關任何建議和問題,請在此處提交有關錯誤,建議等問題的提交。您也可以通過電子郵件([email protected])與我聯繫。
如果您喜歡該項目,請其他此存儲庫表示您的支持!
Copyright (c) 2023 Giorgio Robino
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
頂部