Створення ШІ-агента, що самостійно розвивається, на менш ніж ста рядках 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
Джерела