
Imp: повний порт DSPy на BEAM для Elixir
Imp це бібліотека для Elixir, яка переносить DSPy на BEAM: ви описуєте, що кожен крок мовної моделі приймає і повертає, а оптимізатор покращує програму за розміченими прикладами. Сигнатури та цикли агентів працюють під наглядом OTP.
Нова бібліотека Imp для Elixir подає себе як повний порт DSPy на BEAM. Розробник описує крок мовної моделі як типізовану функцію, вимірює результат і передає його оптимізатору, а надійність і конкурентність OTP залишаються на місці.
Сигнатура замість промпту
Базовою одиницею є сигнатура: ви пишете лише те, що входить і що виходить, наприклад "issue -> kind: enum[bug,feature,question], summary", додаючи короткий опис. Imp.predict/2 сам будує промпт, звіряє з ним відповідь і повертає типізовані поля: kind завжди буде одним із трьох дозволених значень, інакше виклик завершується помилкою.
Та сама сигнатура працює і в інших режимах: Imp.chain_of_thought/2 змушує модель спершу міркувати, а Imp.react/3 дає їй інструменти. Розробник не пише ні шаблон промпту, ні парсер відповіді.
Виміряти та покращити
Із розміченими прикладами й метрикою Imp оцінює програму та покращує її. Потрібні три списки: trainset, з якого оптимізатор навчається, valset для порівняння варіантів і testset, який оцінюють до і після. Imp.evaluate/3 рахує метрику, наприклад Imp.exact_match(:kind).
Далі підключається оптимізатор: Imp.Optimizer.GEPA.new/2 використовує сильнішу модель відображення, щоб читати невдачі й переписувати інструкції. Крім нього є LabeledFewShot і BootstrapFewShot для відбору прикладів, MIPROv2 для пошуку комбінацій, SIMBA для правил із власних спроб програми та тренування ваг. Результат це нова програма, чиї інструкції та приклади зберігають у JSON і переглядають як діф.
Агенти та правила OTP
Інструмент тут це звичайна функція Elixir: Imp.tool/3 приймає назву, опис, функцію та JSON Schema, а Imp.react/3 будує агента, який викликає ці інструменти до отримання відповіді. У прикладі з README агент читає вебсторінку через Req і повертає номер версії.
Imp.call/2 виконує програму в поточному процесі, а Imp.start_run/3 запускає її як окремий процес під наглядом supervisor, який можна спостерігати, зупиняти й обмежувати; authorize callback вирішує, які виклики дозволені. Imp.Run.events/1 повертає журнал подій, запити до моделі мають дедлайн, а виклик інструмента, який міг уже спрацювати, позначається як unknown і не повторюється мовчки.
Imp вміє імпортувати інструменти схваленого MCP-сервера, а через ACP будь-яку програму можна віддати Zed та іншим клієнтам як агента. Бібліотека є на Hex, потребує Elixir 1.19 і компілятора C++, а моделі підключає через ReqLLM. Версія 0.5 експериментальна, ліцензія MIT.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.