Створення ШІ-агента, що самостійно розвивається, на менш ніж ста рядках Lisp
Використовуючи гомоіконічність мови Common Lisp, розробники можуть створити рекурсивний цикл агента, який самостійно пише, компілює та реєструє власні інструменти.

Чому це важливо
Ви можете проектувати мінімалістичні системи агентів, у яких LLM сама пише код під час виконання для розширення каталогу інструментів.
TL;DR
- 01Замінює громіздкі оркестратори чистим 100-рядковим агентом на SBCL, що використовує базову рекурсію.
- 02Дозволяє створювати інструменти, які самі еволюціонують, де LLM пише та компілює власні HTTP-запити та парсери.
- 03Демонструє концептуальну силу гомоіконічності для циклів програмування під керівництвом моделей.
Ключові факти
- Розмір ядра агента
- 8 рядків Common Lisp
- Загальний обсяг коду
- ~100 рядків SBCL
Мінімалістичний цикл агента на Lisp
Елегантний рекурсивний цикл агента можна реалізувати в Common Lisp за допомогою всього кількох рядків коду. Стан моделі просто згортається в стек рекурсії як аргумент:
(let* ((message (ref (call-model messages) "choices" 0 "message"))
(tool-calls (gethash "tool_calls" message)))
(if (and tool-calls (plusp (length tool-calls)))
(agent-loop (append messages (execute-tools tool-calls)))
messages))Самонавчання та еволюція інструментів через Eval
Замість того, щоб заздалегідь програмувати інструменти на кшталт парсерів файлів, калькуляторів або веб-кроулерів, агенту дається один потужний інструмент — сам компілятор мови через функції eval та read-from-string. Коли перед моделлю постає завдання, що потребує зовнішніх даних, вона пише необхідний код на Lisp, компілює його безпосередньо у запущену систему та миттєво виконує.
*Застереження: Надання LLM доступу до довільного виконання коду (eval) несе величезні ризики для безпеки. Цей шаблон обов'язково має запускатися всередині ізольованого локального контейнера Docker.*
Спробуй за 2 хвилини
(defun agent-loop (messages)
(let* ((msg (call-model messages))
(tool-calls (gethash "tool_calls" msg)))
(if tool-calls
(agent-loop (append messages (execute-tools tool-calls)))
messages)))common-lisp
✓ Коли використовувати
- Для дослідження концепцій агентів у пісочниці, які не потребують складних оркестраторів та великої кількості залежностей.
- Для вивчення динамічного створення інструментів та програмного забезпечення, що модифікує саме себе.
✕ Коли НЕ варто
- У виробничих пайплайнах або публічних серверах, де неконтрольовані відповіді моделі можуть поставити під загрозу безпеку хост-машини.
- Якщо ваша команда не має досвіду роботи з Lisp-середовищами на кшталт SBCL.
Що зробити сьогодні
- Запустіть локальний інстанс SBCL в ізольованому Docker-контейнері для безпечного тестування циклу виконання
- Експериментуйте з передачею інструменту 'eval' моделі Claude у вашому середовищі Lisp