VimGPT
1.0.0
使用 neovim/pynvim 直接存取 Vim 的實驗性 LLM 代理/工具包。旨在用作高效文件編輯的子代理,或用作其自己的代理運行時。
內建:
這是一個小演示視頻。
使用 LLM 代理程式編輯檔案有一些常見選項:
解決方案:不要要求代理呼叫具有新內容的工具,而是為代理提供一個「編輯器」工具,該工具會放入具有適當上下文的子代理程式中。類比編輯器以純文字顯示編輯器的狀態,進行單獨的按鍵並反映更新。當法學碩士已經了解 Vim 時,為什麼還要發明自己的編輯器?
️ 警告:VimGPT 仍處於實驗階段,尚未準備好投入生產。
gpt-4
能夠正確使用它 - 更多研究待定。你需要安裝 neovim,如果你使用的是 MacOS,你可以簡單地brew install neovim
。然後從 PyPI 安裝:
pip install vimgpt # or poetry add vimgpt
CLI 用法(用於演示/測試):
$ vimgpt --help
usage: vimgpt [-h] [--path PATH] [--output [OUTPUT]] [--socket SOCKET] [--loglevel {DEBUG,INFO,WARNING}] [--max-calls MAX_CALLS] [--delay-seconds DELAY_SECONDS] command
VimGPT CLI
positional arguments:
command Task for VimGPT to perform on the file, in natural language:
'Rename Bob to Bill in paragraph 2`,
'make arg `user` optional on line 34',
'rewrite this in iambic pentameter', etc.
options:
-h, --help show this help message and exit
--path PATH, -p PATH File for VimGPT to open.
NOTE: for safety, VimGPT will NOT make changes directly
to the file unless the --output flag is provided.
--output [OUTPUT], -o [OUTPUT]
Specify output file. If flag is not provided,
VimGPT will NOT make changes directly to the file.
If flag is provided without value, uses the same path as the input file.
If flag is provided with no value and there is no input file specified,
will output to 'vimgpt_output.txt'.
--socket SOCKET, -s SOCKET
Path to nvim socket of running nvim process.
If left empty, VimGPT will run in headless mode.
Suggested value: '/tmp/nvimsocket'.
--loglevel {DEBUG,INFO,WARNING}
Set the logging level (default: WARNING)
--max-calls MAX_CALLS
Maximum number of LLM calls. Default is 1000.
--delay-seconds DELAY_SECONDS
Delay in seconds. If not provided, defaults to None.
使用無頭 vim 運行:
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO
若要附加到正在執行的 Neovim 實例,以便您可以像代理程式一樣即時查看正在發生的情況:
NVIM_LISTEN_ADDRESS=/tmp/nvimsocket nvim
# in separate terminal
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO --socket ' /tmp/nvimsocket '
VimGPT 旨在用作子代理/工具,因此它可以在更大的代理中組成,因此您可以直接呼叫vim_gpt_agent()
來實現特定目標。
from vimgpt import vimgpt_agent
original_file_content : str = '???'
new_file_content : str = vimgpt_agent (
command = 'Edit to recommend vim over emacs.' ,
content = original_file_content ,
file_path = 'does_not_matter_just_useful_for_prompt.md' ,
# socket=None, # or '/path/to/running/nvim'
# max_calls=1000, # can use prevent cycles
# delay_seconds=2, # if you want to follow in real-time more easily
)
查看vimgpt/core.py
以獲得靈感。對於 LangChain 範例,請查看./vimgpt/langchain_agents/
以取得替代執行時間以及如何使用 VimGPT 作為工具的範例。
這個項目使用詩歌。
# If you don't already have 3.11 installed
pyenv install 3.11:latest
# typical poetry install methods didn't work for me
brew install poetry
# this will create a .venv in the project directory.
# it should automatically check the right version is installed.
poetry install
# view info about your new venv
poetry env list
# activate in your shell
poetry shell
# exit poetry env
source deactivate
要更新 PyPI (https://pypi.org/project/vimgpt) 上的套件:
poetry build
poetry config pypi-token.pypi YOUR_PYPI_TOKEN
poetry publish
使用 ruff + black + mypy + pytest。如果您使用的是 VSCode,您可能需要按照這些說明進行操作,以確保 mypy 擴充功能設定設定為使用您的活動解釋器(詩歌 venv)。
black .
ruff check . --fix
mypy vimgpt
pytest -vv -s --verbose -o log_cli=true
set relativenumber
)_
或|
但這並沒有真正起作用。