Experimenteller LLM-Agent/Toolkit mit direktem Vim-Zugriff unter Verwendung von neovim/pynvim. Gedacht für die Verwendung entweder als Subagent zur effizienten Dateibearbeitung oder als eigene Agentenlaufzeit.
Gebaut mit:
Hier ist ein kleines Demo-Video.
Es gibt einige gängige Optionen für die Verwendung von LLM-Agenten zum Bearbeiten von Dateien:
Die Lösung : Anstatt den Agenten zu bitten, ein Tool mit den neuen Inhalten aufzurufen, geben Sie dem Agenten ein „Editor“-Tool, das in einen Unteragenten mit entsprechendem Kontext eingefügt wird. Der simulierte Editor zeigt den Status des Editors im Klartext an, nimmt einzelne Tastenanschläge entgegen und spiegelt Aktualisierungen wider. Und warum einen eigenen Editor erfinden, wenn LLMs Vim bereits kennen?
️ WARNUNG : VimGPT ist noch experimentell und noch nicht produktionsreif.
gpt-4
in der Lage zu sein, dies ordnungsgemäß zu nutzen – weitere Untersuchungen folgen noch. Sie müssen neovim installieren. Wenn Sie MacOS verwenden, können Sie einfach brew install neovim
. Dann von PyPI installieren:
pip install vimgpt # or poetry add vimgpt
CLI-Nutzung (zu Demo-/Testzwecken gedacht):
$ 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.
So führen Sie Headless Vim aus:
vimgpt " Edit the contents of the README file to recommend Vim as the best text editor. " --path tests/samples/README.md --loglevel INFO
So stellen Sie eine Verbindung zu einer laufenden Neovim-Instanz her, damit Sie wie der Agent in Echtzeit sehen können, was passiert:
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 soll als Subagent/Tool verwendet werden, damit es in größeren Agenten zusammengestellt werden kann, sodass Sie vim_gpt_agent()
einfach direkt mit einem bestimmten Ziel aufrufen können.
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
)
Schauen Sie sich vimgpt/core.py
an, um sich inspirieren zu lassen. Beispiele für LangChain finden Sie unter ./vimgpt/langchain_agents/
für alternative Laufzeiten und Beispiele für die Verwendung von VimGPT als Tool.
Dieses Projekt verwendet Poesie.
# 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
So aktualisieren Sie das Paket auf PyPI (https://pypi.org/project/vimgpt):
poetry build
poetry config pypi-token.pypi YOUR_PYPI_TOKEN
poetry publish
Verwenden Sie Ruff + Black + Mypy + Pytest. Wenn Sie VSCode verwenden, sollten Sie diese Anweisungen befolgen, um sicherzustellen, dass die Mypy-Erweiterungseinstellungen auf die Verwendung Ihres aktiven Interpreters (Poetry Venv) eingestellt sind.
black .
ruff check . --fix
mypy vimgpt
pytest -vv -s --verbose -o log_cli=true
set relativenumber
)_
oder |
versucht aber das hat nicht wirklich funktioniert.