Agente/kit de herramientas LLM experimental con acceso directo a Vim, usando neovim/pynvim. Diseñado para usarse como subagente para una edición eficiente de archivos o como su propio tiempo de ejecución de agente.
Construido con:
Aquí hay un pequeño vídeo de demostración.
Existen algunas opciones comunes para usar agentes LLM para editar archivos:
La solución : en lugar de pedirle al agente que llame a una herramienta con el nuevo contenido, proporciónele una herramienta "Editor" que se ubica en un subagente con el contexto apropiado. El editor simulado muestra el estado del editor en texto sin formato, recibe pulsaciones de teclas individuales y refleja las actualizaciones. ¿Y por qué inventar su propio editor cuando los LLM ya conocen Vim?
️ ADVERTENCIA : VimGPT aún es experimental y aún no está listo para producción.
gpt-4
parece capaz de utilizar esto correctamente; se determinará más investigación. Necesitará instalar neovim; si está en MacOS, simplemente puede brew install neovim
. Luego instale desde PyPI:
pip install vimgpt # or poetry add vimgpt
Uso de CLI (destinado a demostración/prueba):
$ 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 ejecutar con vim sin cabeza:
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO
Para adjuntar a una instancia de Neovim en ejecución para que pueda ver lo que sucede en tiempo real como lo hace el agente:
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 está diseñado para usarse como subagente/herramienta para que pueda componerse dentro de agentes más grandes, por lo que puede simplemente llamar vim_gpt_agent()
directamente con un 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
)
Mire vimgpt/core.py
en busca de inspiración. Para ver ejemplos de LangChain, consulte ./vimgpt/langchain_agents/
para conocer tiempos de ejecución alternativos y ejemplos de cómo utilizar VimGPT como herramienta.
Este proyecto utiliza poesía.
# 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 actualizar el paquete en PyPI (https://pypi.org/project/vimgpt):
poetry build
poetry config pypi-token.pypi YOUR_PYPI_TOKEN
poetry publish
Utilice ruff + negro + mypy + pytest. Si está utilizando VSCode, es posible que desee seguir estas instrucciones para asegurarse de que la configuración de la extensión mypy esté configurada para usar su intérprete activo (el venv de poesía).
black .
ruff check . --fix
mypy vimgpt
pytest -vv -s --verbose -o log_cli=true
set relativenumber
)_
o |
insertado pero esto realmente no funcionó.