Skip to content

Macro for interacting with ChatGPT (and other LLM services) in Far Manager

License

Notifications You must be signed in to change notification settings

FarManagerLegacy/AskAI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ask AI – макрос для взаимодействия с ChatGPT (и другими LLM-сервисами) в FAR

Этот макрос – дальнейшее развитие bito.ai code assistant (см.), с поддержкой множества LLM-сервисов.

Доступ к сервисам реализуется как посредством (произвольных) консольных утилит, так напрямую через REST API.

Каждый из LLM-сервисов имеет свои достоинства и недостатки, выбор остаётся за пользователем.

Макрос назначен на Ctrl+B. Также может быть запущен в качестве скрипта LuaShell.

Ctrl+B:Double позволяет в любой момент открыть окно с выводом повторно.

Функции:

  • Ввод запроса в диалоге, ранее набранные приглашения доступны в истории поля ввода.
  • Вместе с запросом передаётся выделенный в редакторе текст.
    Если в запросе присутствует шаблон {{%input%}}, то он заменяется выделенным текстом.
    В противном случае выделенный в редакторе текст добавляется в конец запроса.

В диалоге доступны такие настройки:

  • Возможность работы в единой сессии, с учётом предыдущего контекста.
    По умолчанию (состояние [?]) сессия продолжается пока открыт редактор с выводом.
    Сессию также можно в любой момент принудительно очистить кнопкой “-”.
  • Форматирование вывода по заданной границе, или по ширине окна (состояние [?]).
    Блоки кода не форматируются.
  • Установка различных параметров генерации (в зависимости от выбранного сервиса/утилиты).
    Значения запоминаются в истории, и легко доступны для повторного выбора.
    Некоторые параметры специфичны для отдельной конфигурации, другие могут разделяться между разными (посредством общей истории).
  • Возможность установки переменных окружения, необходимых для отдельных утилит.

Кнопки:

  • [ Utility cfg ] доступна в случае, если используемая активной конфигурацией утилита держит настройки в собственном файле; нажатие кнопки позволяет открыть его в редакторе.
  • [ Definition ] открывает в редакторе файл определения активной конфигурации (*.lua.cfg), например при необходимости там легко изменить набор доступных параметров.
  • [ Presets - F5 ] позволяет подставить сразу несколько параметров набором (“пресетом”).
    По нажатию кнопки открывается Список пресетов.
  • [ Models - F6 ] запрашивает список моделей через API, если это предусмотрено конфигурацией, в противном случае кнопка недоступна.
    Также фиксированный список моделей может быть уже предварительно занесён в историю поля ввода (актуально для некоторых пресетов и конфигураций).
  • [ Switch ] или же повторное нажатие Ctrl+B позволяет переключиться на другую конфигурацию, открывая Меню выбора конфигурации.
  • { Go! } запуск генерации ответа модели, вывод открывается в редакторе.

Дополнительные шорткаты:

  • Shift+F4 - задать заголовки запроса (для OpenAI-compatible), в виде таблицы Lua или Moonscript (удобно использовать single line table literal).
  • Shift+F5 - открыть историю поля apibase.
  • Shift+F6 - открыть историю списка моделей.

Макросы, активные в окне с выводом:

  • Ctrl+Shift+Ins:
    • скопировать выделенный текст, склеив свёрнутые строки обратно в параграфы;
    • при отсутствии выделения ищет и обрабатывает блок кода под курсором.
  • Alt+F2 полностью убрать форматирование (свёртку).

Работа с пресетами

Список пресетов вызывается из диалога нажатием соответствующей кнопки, хоткеем, или же по F5.

“Пресет” представляет собой именованный набор параметров, подставляемых в соответствующие поля диалога.
Пресеты хранятся в файлах *.preset и являются Lua-файлами.

Создать новый пресет можно нажав Shift+F4 или Ins.

Над пресетами в списке доступны следующие действия:

  • Enter - заполнить поля диалога значениями из пресета.
  • F4 - открыть в редакторе.
  • F5 - скопировать, F6 - переименовать.
  • F8 или Del - удалить.

В списке отображаются только пресеты, подходящие для текущей конфигурации диалога:
если в пресете содержится параметр, не имеющий соответствия в диалоге текущей конфигурации, то такой пресет показан не будет.

Нажатием Ctrl+H можно принудительно отобразить все пресеты.

См. также: обзор пресетов для сервисов совместимых с OpenAI API в разделе Обзор конфигураций.

Установка

  • Содержимое архива разместить в отдельной директории, где-то в Macros/scripts.
  • Для LuaShell – стандартным образом, т.е. где-то в Macros/utils, или в любой другой директории, доступной через %PATH%.
  • Для работы с сетью непосредственно, через “нативные” конфигурации, такие как openai.lua.cfg, необходимы следующие модули:
    • LuaSocket, LuaSec: https://github.com/FarManagerLegacy/LuaBinaries/releases
      и их зависимости: OpenSSL, (для некоторых билдов) MS Visual C++ Redist.
    • Практически любой JSON модуль, предоставляющий функции encode/decode.
      • По умолчанию ищется модуль с одним из имён: cjson, rsjson, ljson, dkjson, lunajson, или просто json (см. также lua-users wiki).
        Мною тестировались Lua CJSON и dkjson.
      • Для явного указания имени модуля следует использовать опцию json_module в начале скрипта.
        Её можно изменить прямо в коде, либо воспользоваться возможностями ScriptsBrowser/cfgscript.
  • Также можно работать через сторонние утилиты:
    • Для запуска утилит рекомендуется модуль Piper (положить в modules).
      В случае его отсутствия для запуска будет использована стандартная функция io.popen, в сочетании
      с созданием временных файлов, и перенаправлением их в стандартный ввод посредством команд shell.
    • В %PATH% должны быть утилиты, соответствующие имеющимся файлам определений (*.lua.cfg), см. раздел Меню выбора конфигурации.

Настройка

Большая часть конфигураций требует задания некоторых параметров в диалоге.
Наиболее важные параметры - такие как apibase, apikey и model - определяются выбранным провайдером.

Некоторые утилиты используют файл настройки, доступный как из диалога, так и в списке конфигураций (подробнее см. в документации соответствующих утилит).

Меню выбора конфигурации

В комплекте идут определения для ряда опробованных мной утилит/сервисов (но легко добавить и новые).

С некоторыми соображениями по выбору конфигурации можно ознакомиться в разделе Обзор конфигураций.

  • Выбор конфигурации осуществляется через меню, доступное как прямо из диалога, так и отовсюду посредством макроса.
    Выбор запоминается.
  • Верхний раздел списка содержит “нативные” конфигурации, работающие с сетью средствами Lua.
    Раздел не будет отображаться, если отсутствуют необходимые модули, см. Установка.
  • Нижний раздел списка содержит определения, использующие внешние утилиты.
    По умолчанию список содержит только установленные утилиты, полный список – по Ctrl+H.
    • Утилиты необходимо скачать самостоятельно (соответствующий сайт открывается по Alt+F1 из меню).
    • Утилитам может требоваться настройка (помимо параметров в диалоге), подробнее см. в собственной их документации.
      Быстрый доступ к файлу с настройками (если применимо) - F4 в меню, или по кнопке в диалоге.
  • По Alt+F4 - быстрый доступ к файлу с определением той или иной конфигурации (*.lua.cfg).

В общем случае следует отдать предпочтение “нативным” конфигурациям, поскольку они обеспечивают больше возможностей.

Однако в некоторых случаях может оказаться проще или удобнее работать и через утилиты, например:

  • если соответствующая утилита уже есть (и используется из командной строки);
  • если утилита уже содержит настройки провайдеров (как bito, tgpt, pytgpt);
  • если пользователю проще скачать утилиту, чем выполнить другие инструкции по установке.

Обзор утилит

  • gh models - GitHub Models extension.
    Инструкуции по установке см. на домашней странице. Необходим аккаунт GitHub. Действуют лимиты.
  • tgpt, pytgpt - не требуют предварительной настройки.
    Недостаток: не гарантирована стабильность (иногда требуется обновление утилит).
  • bito настройка описана тут.
    Недостаток: бесплатный лимит 20 сообщений в день.
  • Прочие утилиты - aichat, chatgpt-cli, mods, sgpt - работают с OpenAI API (и совместимыми).
    Требуют задания некоторых параметров, прежде всего apibase, apikey, и model. Их значения зависят от выбранного провайдера.
    В зависимости от утилиты, параметры надо установить или через файл настроек (F4 в списке выбора), или как аргументы командной строки (доступные в диалоге), или через переменные окружения (также доступны в диалоге).

Обзор конфигураций

Выбор модели

На данный момент наиболее сильные модели это:

  • o3, o1 и gpt-4o от OpenAI;
  • gemini-2.0-*, gemini-exp-* от Google;
  • claude-3.5-sonnet от Anthropic;
  • grok-2 от xAI;

Из опенсорсных - все что побольше, например:

  • из серии Llama от Meta AI: llama-3.1-405b, llama-3.2-90b, llama-3.3-70b;
  • ряд моделей от китайских разработчиков также демонстрирует хорошие результаты: DeepSeek, Qwen, Yi от 01.AI, MiniMax.

Ориентироваться можно по рейтингу ChatBot Arena.

Обзор провайдеров

  • OpenAI – оригинальный разработчик ChatGPT.
    Новому пользователю предоставляется кредит $5, после исчерпания которого доступно только платное использование.
    Работа с этим апи возможна как с помощью сторонних утилит, так и с помощью “нативной” конфигурации, так и называющейся “OpenAI-compatible”.
  • Другие OpenAI-совместимые: Mistral AI, xAI Grok, AI21 labs Jamba.
    К этой же категории относится целый ряд провайдеров, предоставляющие доступ к OpenSource-моделям.
  • Провайдеры с собственным API, такие как Google Gemini, Anthropic Claude, Cohere Command R+, и т.д.
    Для поддержки в AskAI требуется или соответствующая “нативная” конфигурация, или специальный сервис-адаптер, который будет конвертировать API в совместисый с OpenAI формат.
    Примеры таких сервисов: openai-gemini, openai-github-copilot, и др.

Обзор пресетов для сервисов совместимых с OpenAI API

В комплекте со скриптом идёт набор пресетов, содержащих предварительно заданные значения apibase (и начальное значение model).
В большинстве случаев пользователю также требуется самостоятельно получить apikey, адрес сайта для регистрации можно найти в файле пресета (открывается из списка по F4).

С перечисленными ниже пресетами помимо конфигурации openai.lua.cfg совместимы также конфигурации некоторых утилит (кроме тех, которые хранят эти значения в собственных файлах настроек).

  • Не требуют ключа (apikey) только эти пресеты:
    • anyai: контекст лимитирован
    • tmrace: лимит 50 сообщений в сутки
    • deepinfra (всевозможные OpenSource модели): some anonymous usage allowed
  • Для использования других надо зарегистрироваться и получить ключ. Следующие пресеты относятся к бесплатным сервисам (с определёнными лимитами):
    • cloudflare (в основном небольшие модели, но есть и @cf/meta/llama-3.3-70b-instruct-fp8-fast)
    • gemini от Google
    • github (модели от OpenAI, DeepSeek, Anthropic, Mistral, Meta, Cohere, AI21, Microsoft и др.)
    • groq (модели до 90b)
    • mistral, codestral
    • sambanova (Llama <= 405b)
  • На некоторых сервисах только часть моделей доступно бесплатно:
    • chutes (DeepSeek, Llama, Qwen, …)
    • huggingface (бесплатно в основном небольшие модели, но есть и такие как CodeLlama-34b-Instruct-hf и Qwen2.5-72B-Instruct)
    • openrouter (бесплатно в основном небольшие модели, но доступны и такие как llama-3.1-405b-instruct)
    • siliconflow (бесплатно - небольшие модели)
    • together.ai (бесплатно - meta-llama/Llama-3.3-70B-Instruct-Turbo-Free, meta-llama/Llama-Vision-Free, deepseek-ai/DeepSeek-R1-Distill-Llama-70B-free)
  • Некоторые сервисы дают возможность бесплатно пользоваться только сайтом, но в некоторых случаях возможно задействовать их приватный API (указав Cookie и/или другие требуемые данные в заголовках):
    • cerebras (llama-3.3-70b, llama3.1-70b, llama3.1-8b, deepseek-r1-distill-llama-70b)
    • featherless (бесплатно - небольшие модели)
    • fireworks.ai (всевозможные OpenSource-модели)
    • lepton (всевозможные OpenSource-модели)
  • Для полноты: пресеты для некоторых сервисов, для которых доступны пробные ключи:
    • ai21 (Jamba): $10 credit, 3mo trial?
    • deepbricks (o1/gpt-4o/3.5/claude-3.5-sonnet/llama): allows some usage with 0 balance
    • grok от xAI
    • hyperbolic (OpenSource-модели: DeepSeek, Llama, Qwen): $10 credit for free trial
    • ncompass (OpenSource-модели: Llama, Qwen, …): $100 of credit
    • novita.ai (OpenSource-модели): $0.5 credit

Кроме того:

  • copilot-/gemini-proxy-public позволяют попробовать соответствующие сервисы-адаптеры, упомянутые выше.
    Примечание: gemini с некоторых пор доступен и через OpenAI API.
  • keepass позволяет держать свои собственные пресеты в базе KeePass.
    Подобным образом можно организовать работу и с другими аналогичными утилитами.

Примечание: задача перечислить все существующих сервисы не ставилась, это попросту невозможно, не говоря о том что каждый день могут появляться новые.

Помимо самостоятельных провайдеров, можно встретить также сервисы не вполне понятного происхождения, не имеющие даже официального сайта. Такими в списке выше являются anyai и tmrace.

По причине их неопределённого статуса пользоваться ими следует с осторожностью, и не передавать чувствительные данные!

Подобных сервисов довольно много, некоторые например перечислены тут: cool ai stuff!

About

Macro for interacting with ChatGPT (and other LLM services) in Far Manager

Topics

Resources

License

Stars

Watchers

Forks