Экспериментальный агент/инструментарий LLM с прямым доступом к Vim с использованием neovim/pynvim. Предназначен для использования в качестве субагента для эффективного редактирования файлов или в качестве собственной среды выполнения агента.
Построен с:
Вот небольшое демонстрационное видео.
Существует несколько распространенных вариантов использования агентов 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
)_
или |
но это не сработало.