VIM을 효율적으로 설계 및 실행, 디버깅 및 LLMS (Language Model) 프롬프트로 사용하는 도구로 VIM을 사용하십시오.
PROMPTER.VIM은 VIM 편집기를 효율적인 프롬프트 엔지니어링 환경으로 변환하여 LLM 독점 제공 업체 웹 놀이터를 효과적으로 대체합니다.
버전 0.2에서 플러그인은 LITELLM을 LLM 제공 업체 추상화 계층으로 사용합니다.
Litellm은 OpenAi 형식을 사용하여 모든 LLM API를 호출합니다 : Bedrock, Azure, Openai, Cohere, Anthropic, Ollama, Sagemaker, Huggingface, Replice (100+ LLM). 따라서 다양한 LLM 제공 업체 목록과 함께 Prompter.vim을 사용할 수 있습니다!
<F9> (Key Shortcut for :PrompterSetup )를 누릅니다.<F12> (Key Shortcut :PrompterGenerate )를 누르십시오.myexperiment.prompt ) ![]() |
|---|
| PROMPTER.VIM in CATION : 전화 대화를 시뮬레이션하는 프롬프트와 함께 편집/상호 작용 |
PROMPTER.VIM은 주로 코드 완료 도구로 설계되지는 않지만 해당 목적으로도 사용할 수 있습니다.
대신,이 플러그인은 자연 언어 프롬프트를 테스트하고 디버깅하려는 신속한 엔지니어를위한 웹 텍스트 완성 놀이터를위한 일반적인 목적 대체물이되는 것을 목표로합니다.
이 아이디어는 2023 년 봄에 LLM 프롬프트를 작성하고 신속한 엔지니어링 기술을 실험하는 동안 등장했습니다. 간단한 "텍스트 완료"접근 방식을 사용하여 텍스트 프롬프트 코퍼스를 입력하고 LLM (Lange Language Model)에서 완료를 요청했습니다.
저의 초기 접근 방식은 LLM 제공 업체가 제공하는 웹 놀이터를 활용하는 것이 었습니다. 그러나 Azure Openai 웹 놀이터와 상호 작용하면서 특히 수많은 문제가 발생했습니다.
아직 이해하지 못한 이유로, Azure Web Playground의 웹 상호 작용은 특정 지점 후에 상당히 느려집니다. 완료 상자 내에서 버그가 의심됩니다. 또한 "채팅 완료"모드에 대한 Azure 웹 인터페이스를 좋아하지 않습니다. 완전한 혼란! 대신, 원래의 OpenAi Playground가 더 잘 구현되었으며 앞서 언급 한 문제를 발견하지 못했습니다.
그럼에도 불구하고 두 웹 놀이터는 언급 한 두 브라우저 탭 당 하나의 프롬프트 만 허용합니다. 따라서 여러 활성 프롬프트 (중첩/체인 템플릿 프롬프트로 구성된 복합 응용 프로그램 개발)를 다룰 때는 여러 개의 놀이터가 별개의 탭에서 열려 있어야합니다. 특정 (중간) 주목할만한 결과를 달성하면 모든 텍스트 상자를 복사하여 버전 파일에 저장해야합니다.
웹 놀이터와 함께이 모든 것을 수행하는 것은 번거롭고 오류가 발생하기 쉬운 프로세스입니다. 마지막 생각은 : VIM 편집자 안에서 직접 완성 할 수 있다면 어떻게해야합니까?
text 또는 chat 완료?OpenAI 또는 유사한 현재 LLM에는 두 가지 일반적인 "완료 모드"가 있습니다.
text 완료
완료 모드 text 로 설정되면 LLM이 완료되면 주어진 컨텍스트 창 프롬프트 텍스트가 완성 된 텍스트 (텍스트의 -> 텍스트 아웃)가 있습니다. 이러한 모델 설정의 예는 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이 채팅 "역할"을 위해 미세 조정되었음을 의미합니다 (사용자 Say, Assistant Say, ...). 세부 사항을 읽으십시오. 컨텍스트 창 프롬프트는 실제로 작성됩니다
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 얻었습니다. 그것이 주요 전제 조건입니다.
VIM을 컴파일하는 파이썬 버전도 확인하십시오. 명령으로 정확한 Python 버전을 추출하십시오.
vim --version | grep -o -P ' (?<=/python)[0-9]+.[0-9]+ ' 제 경우에는 3.8 얻었습니다.
VIM은 Python 버전 (및 관련 패키지) 만 컴파일 되어만 사용할 수 있습니다. 예를 들어 시스템 Python Current 버전 (
python3 --version==Python 3.11.6)이 Vim Python 버전과 다르면Python 3.8Python 3.8패키지 만 볼 수 있습니다.Python 3.11.6패키지를 사용하려면 VIM을 다시 컴파일해야합니다.
파이썬 패키지 litellm 설치하십시오. 해당 Python 버전의 pip 사용하여 litellm 설치해야합니다 (예 : pip3.8 ).
pip3.8 install -U litellm 선호하는 플러그인 관리자 (예 : vim-plug plug-in manager를 사용하여 플러그인을 설치하고 .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> | 현재 구성을보고합니다 |
:PrompterSetupVIM에 들어가면 프롬프터 놀이터 환경을 활성화하여 우선 명령 모드에서 실행됩니다.
: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
:PrompterGenerateVIM Windows에서 프롬프트를 편집하고 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기본 하이라이트 색상이 마음에 들지 않으면
ctermbg및ctermfg값을 cterm/xterm 색상의 하위 집합을 사용하여 대체 할 수 있습니다. 사용 가능한 모든 색상을 표시하려면 다음 명령을 사용할 수 있습니다:HighlightColors내 플러그인의 일부 : Highlight.
온도 값을 수정합니다
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 하는 것입니다.
사용 (VIM-INCLUDED) 맞춤법 검사기를 사용하십시오
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: 명령으로 설정할 수 있습니다.
let g: stop = [ ' u: ' ] 위에서 설명한대로 정지 시퀀스를 설정하지 않으면 LLM은 전체 대화를 완료하려고 시도합니다. 이것은 당신 u: 그럼에도 불구하고 g:stop .
유용 할 수있는 다른 VIM 명령 :
u: , Key F6 누르기 시작한 새 줄을 추가하십시오. map <F6> :normal ou: <CR> a: , Key F7 누르기 시작한 새 선을 추가하십시오. map <F7> :normal oa: <CR> 버전 0.1
첫 번째 릴리스. OpenAi/Azure OpenAI 모델 만 OpenAI 버전 0.28 파이썬 모듈을 통해 지원됩니다.
버전 0.2
LLMS 완료는 Litellm, LLMS 추상화 레이어 Python 패키지를 통해 수행되므로 다양한 LLM 제공 업체를 사용할 수 있습니다.
모든 LLM 입력 매개 변수를 지원합니다
지금까지의 프롬프터 .VIM temperature 만 지원, max_tokens , 인수 stop .
Litellm은 모든 제공 업체에서 OpenAi 채팅 완료 매개 변수를 수락하고 번역합니다.
지원 템플릿 프롬프트
런타임에 동적으로 구성 될 수있는 다양한 부품으로 구성된 "템플릿 프롬프트"를 설계하고 있습니다. 예를 들어, 자리 표시 자 변수를 포함하는 "템플릿 프롬프트"를 프로토 타입으로 고려하십시오.
TASK
{some_task_description}
DATA
{some_yaml}
DIALOG
{dialog_history}
위의 예에서는 웹 놀이터를 사용할 때 카피 페이스트 중개자 역할을합니다. 4 개의 웹 탭을 열고 각각의 텍스트 완료를 실행하고 마지막으로 완료를 수동으로 붙여 넣어 {some_data} , {dialog_history} 와 같은 변수를 대체해야합니다. 또한 파일을 {some_yaml} 과 같은 변수에로드해야 할 수도 있습니다.
아이디어는 템플릿 프롬프트 편집을 지원하여 (키 스트로크로) 변수 자리 표시자를 다른 버퍼/창의 내용으로 교체 할 수 있습니다.
비동기 LLM 완료
현재 LLM 완료 명령 PrompterGenerate 동기 명령입니다. LLM API가 완료 텍스트를 반환 할 때까지 편집기가 차단됩니다. 완료하는 데 몇 초가 필요한 매우 복잡하고 긴 프롬프트가 지루할 수 있습니다 (예 : >> 10). 이 경우 명령이 비동기적 인 경우 더 나을 수있어 개발자가 완료된 VIM 편집기를 사용할 수 있습니다.
스트리밍 지원
지금까지 스트리밍 완료는 고려되지 않습니다.
David Shapiro는 LLM 및 Generative AI에 대한 그의 큰 보급 작업에 대한 일입니다. 나는 열정을 뒤따 랐습니다. 특히 그의 LLM 프롬프트 엔지니어링 라이브 코딩 YouTube 비디오가있었습니다!
Vivian de Smedt VIM 전문가는이 플러그인을 개발할 때 발생하는 문제를 해결하는 데 도움을주었습니다.
텍스트 완성 형식으로 제안 된 일부 기능을 통합 한 Litellm 제작자!
이 프로젝트는 진행중인 개념 증명 ALFA 버전입니다!
나는 Vimscript 전문가가 아니므로 모든 기여 또는 제안을 환영합니다. 제안 및 문제는 버그, 제안 등에 대한 GitHub 문제에 대해 여기에 제출하십시오. 이메일 ([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.
맨 위