Agente/kit de ferramentas experimental LLM com acesso direto ao Vim, usando neovim/pynvim. Destinado ao uso como um subagente para edição eficiente de arquivos ou como seu próprio tempo de execução de agente.
Construído com:
Aqui está um pequeno vídeo de demonstração.
Existem algumas opções comuns para usar agentes LLM para editar arquivos:
A Solução : Em vez de pedir ao agente para chamar uma ferramenta com o novo conteúdo, dê ao agente uma ferramenta "Editor" que cai em um subagente com contexto apropriado. O editor simulado mostra o estado do editor em texto simples, pressiona teclas individuais e reflete as atualizações. E por que inventar seu próprio editor quando os LLMs já conhecem o Vim?
️ AVISO : O VimGPT ainda é experimental e ainda não está pronto para produção.
gpt-4
parece capaz de usar isso corretamente - mais pesquisas a serem definidas. Você precisará instalar o neovim; se estiver no MacOS, você pode simplesmente brew install neovim
. Em seguida, instale a partir do PyPI:
pip install vimgpt # or poetry add vimgpt
Uso da CLI (destinado a demonstração/teste):
$ 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.
Para executar com o vim sem cabeça:
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO
Para anexar a uma instância do Neovim em execução para que você possa ver o que está acontecendo em tempo real como o agente faz:
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 '
O VimGPT deve ser usado como um subagente/ferramenta para que possa ser composto em agentes maiores, então você pode simplesmente chamar vim_gpt_agent()
diretamente com um objetivo específico.
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
)
Veja vimgpt/core.py
para se inspirar. Para exemplos de LangChain, verifique ./vimgpt/langchain_agents/
para tempos de execução alternativos e exemplos de como usar o VimGPT como ferramenta.
Este projeto usa poesia.
# 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
Para atualizar o pacote no PyPI (https://pypi.org/project/vimgpt):
poetry build
poetry config pypi-token.pypi YOUR_PYPI_TOKEN
poetry publish
Use ruff + preto + mypy + pytest. Se estiver usando o VSCode, você pode querer seguir estas instruções para garantir que as configurações da extensão mypy estejam definidas para usar seu intérprete ativo (o venv de poesia).
black .
ruff check . --fix
mypy vimgpt
pytest -vv -s --verbose -o log_cli=true
set relativenumber
)_
ou |
mas isso realmente não funcionou.