Введение
Это уже третья статья в блоге о Fabric — удобном инструменте для эффективного использования больших языковых моделей (LLM). После знакомства с основным использованием и установкой, а также с интеграцией в рабочие процессы macOS с помощью Alfred и Apple Shortcuts, я хочу показать, как интегрировать Fabric в Shortcuts на iPhone или iPad.
Поскольку на этих устройствах нет ни Go, ни действия Shortcuts «Выполнить скрипт Shell», мне пришлось найти другой путь. К счастью, есть действие «Выполнить скрипт по SSH», которое позволяет выполнять установку Fabric на другом компьютере, а затем интегрировать ее в Shortcut.
Конечно, этот компьютер должен быть доступен в любое время. Теоретически, в моем случае это могло бы работать и с MacBook, но когда крышка закрыта, он не может обрабатывать запросы от моего iPad. Поэтому нужен компьютер, который более или менее доступен круглосуточно.
В качестве примера удаленного использования Fabric в iOS/iPadOS Shortcuts я снова возьму создание краткого изложения веб-страницы из предыдущей статьи.
Поиск подходящего сервера
Я ограничиваюсь здесь своей локальной сетью. Те, у кого есть возможность, могут использовать такой же подход, чтобы обратиться к серверу в облаке, если на нем установлен Go. В таком случае Shortcut можно запускать даже вне домашней сети.
В моей сети у меня есть два компьютера, которые работают круглосуточно: Synology NAS и Raspberry Pi 4 с 4 ГБ оперативной памяти и установленным Ubuntu 24.04 LTS. Поскольку в данный момент я не хочу связываться ни с кросс-компиляцией программ Go, ни с созданием образов Docker, Raspberry Pi остается компьютером по выбору. Однако это может быть любой другой компьютер, на котором установлен Go и настроен SSH-сервер. Поскольку LLM — по крайней мере, в моем случае — должны запускаться только через API-ключ на OpenAI, мощности Raspberry Pi вполне достаточно. Если у вас есть более мощный компьютер, на котором также эффективно работает Ollama, можно использовать и локальные LLM.
Необходимые условия
Необходимо иметь определенные знания работы с командной строкой. Выбранный компьютер, естественно, должен быть доступен по SSH. В сети много руководств по этой теме, например, статья nixCraft.
Помимо Go на компьютере, прежде всего, должен быть установлен git. Если вам нужно анализировать видео на YouTube с помощью инструмента yt и Fabric, также нужен ffmpeg. Не является обязательным, но используется для одного из моих экспериментов, — это wget.
Установка в Ubuntu осуществляется через apt:
sudo apt install git ffmpeg wget
Установка Go и Fabric
Если Go еще не установлен, необходимо установить его. Существует несколько способов сделать это, например, через Snap-Store. Я следовал инструкциям на официальном сайте Go:
- Убедитесь, что в /usr/local/go не установлена старая версия. Если это так, удалите папку: sudo rm -rf /usr/local/go.
- Загрузите последнюю версию для Raspberry, версию arm64.
- Установите Go, распаковав архив с помощью команды tar -C /usr/local -xzf $HOME/Downloads/go1.23.0.linux-amd64.tar.gz в каталог /usr/local/go.
- Информация о путях должна быть определена в конфигурации оболочки, в зависимости от используемой оболочки. В моем случае это файл `$HOME/.zshrc. Для Shortcuts я использую ограниченную конфигурационную файл .fabenv, в которую также необходимо добавить определение пути:export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
- Теперь Fabric можно установить непосредственно из репозитория Guthub: go install github.com/danielmiessler/fabric@latest.
- Перед настройкой Fabric с помощью fabric --setup прочтите следующий раздел.
- Если хотите, установите yt (если вы указали ключ API YouTube во время настройки): go install github.com/danielmiessler/yt@latest.
Проблема с настройкой Fabric
На момент написания этой статьи настройка завершалась сообщением об ошибке: stream error: stream ID 3; CANCEL; received from peer happened, после того как я подтвердил данные для копирования паттернов. Однако кажется, что, за исключением копирования папки Pattern и создания папок contexts и sessions, все необходимые настройки были выполнены. После копирования папки Pattern с моей установки macOS Fabric работал без проблем. Возможно, у кого-то есть решение этой проблемы. В репозитории уже есть вторая запись об этом, причем одна уже помечена как решенная. Ни на моем Mac, ни на другой установке в Linux Mint ошибка не возникала.
Обновление 23.09.2024: После того, как я подключил Raspi по Ethernet-кабелю, я снова смог установить Fabric. Похоже, что какие-то серверы отключаются, если ответы по сети слишком медленные.
Проверка установки
Все остальное подробно описано в моей статье «Установка и первые шаги с Fabric — оптимизатором запросов». Однако для быстрого тестирования, лучше всего через SSH-соединение, чтобы проверить, работает ли все. Например, с помощью следующего вызова:
echo "Два попугая на высотном здании" | fabric --stream --pattern create_logo
Если это не работает, еще раз проверьте, есть ли все папки и файлы в папке $HOME/.config/fabric:
.rw-r--r-- 320 leifjp 27 Aug 01:00 .env
drwxr-xr-t - leifjp 24 Aug 14:00 contexts
drwxr-xr-t - leifjp 20 Aug 10:30 patterns
drwxr-xr-t - leifjp 18 Aug 17:23 sessions
И убедитесь, что в конфигурационном файле оболочки определен правильный путь поиска:
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
Загадка действия «Выполнить скрипт по SSH»
Как я уже рассказывал в своей статье «Как легко создавать краткие изложения веб-страниц с помощью Fabric в Alfred и Apple Shortcuts», действие «Выполнить скрипт Shell» на Mac ведет себя странно, когда речь заходит о передаче переменных или их содержимого. Таким образом, переменная, которая в «обычных» Shortcuts содержит URL-адрес активной веб-страницы, передает путь к локальной копии веб-страницы. Ну а почему же должно быть по-другому в действии «Выполнить скрипт по SSH»?
Передача URL-адреса
Сначала я поэкспериментировал на Mac, чтобы найти решение проблемы передачи параметров в качестве аргументов в действии «Выполнить скрипт по SSH». В итоге я нашел подсказку, которая могла бы помочь: не передавать URL-адрес в качестве аргумента в действие, а вставить его непосредственно в скрипт. И вот, оно сработало. В качестве альтернативы можно создать весь скрипт сначала в текстовом поле, а затем вставить только его в качестве переменной в область скрипта.
Вот тестовый Shortcut на Mac, который необходимо вызвать через меню Shortcuts на активной веб-странице:
Это работает очень хорошо и может заменить обходной путь, описанный в моей предыдущей статье.
Однако предположение, что это позволит найти решение для Shortcuts на iOS/iPad, было ошибочным. И здесь мне пришлось долго экспериментировать, пока я наконец не нашел следующее решение с помощью скрипта:
Я не понял, почему эта конструкция работает, особенно потому, что команда, когда ее вызывают непосредственно в терминале (даже через SSH-соединение), дает ожидаемый результат.
Тем не менее, я захотел попробовать еще раз с помощью curl, более современной альтернативы wget. И вот, с curl не нужно было определять дополнительную переменную:
Видимо, мне придется отказаться от своей многолетней привязанности к wget.
Для полноты картины, вот еще один подход. Во время своих экспериментов я допустил небольшую ошибку, которая привела к следующему скрипту, который, к моему удивлению, также сработал:
Теперь я подозреваю, что переменная URL скорее является массивом, из которого в зависимости от контекста передается подходящая часть. Ведь если вывести переменную в скрипте с помощью echo, действительно отображается только URL.
iOS/iPadOS Shortcut
На следующем изображении показан полный Shortcut:
Рабочий процесс такой же, как и в Shortcuts для macOS:
- Используйте действие «Получить с экрана», чтобы обеспечить работу во всех веб-браузерах.
- Присвойте URL-адрес активной веб-страницы переменной URL.
- Присвойте название переменной name.
- Удалите символы : и / из переменной name, поскольку эти символы вызывают проблемы в Obsidian при использовании в качестве названия и в качестве имени файла (это можно расширить и на другие символы, такие как ?).
- Используйте действие «Выполнить скрипт по SSH» с IP-адресом или именем сервера, пользователем и паролем, а также с обсуждавшимся выше скриптом.
- Сохраните результат в переменной summary.
- Создайте заметку для Obsidian в текстовом поле, включая область свойств и, если необходимо, нижний колонтитул.
- Сохраните эту заметку с помощью действия «Create Note» из ActionForObsidian (AFO).
- Используйте AFO, чтобы открыть созданную заметку.
Я использую расширение Shortcuts ActionForObsidian, чтобы сохранить заметку в моем хранилище Obsidian, поскольку это очень просто сделать с помощью доступных команд. В любом случае стоит потратить немного денег на это приложение, поскольку оно восполняет пробелы в функциональности Shortcuts для Obsidian. В качестве альтернативы, конечно, можно использовать действие «Сохранить файл» или сохранить результат в приложении Notes.
Заключение
Я надеюсь, что эта статья будет полезна, несмотря на незначительные недоработки в настройке Fabric. Возможно, кто-то сможет дать совет, как обойти эту ошибку. Я также хотел бы понять, что происходит с переменными в приложении Shortcuts.
Я хотел показать только один из способов интегрировать Fabric в Shortcut, несмотря на отсутствие Shell на iPhone или iPad. Думаю, в конечном счете этот подход предлагает целую Вселенную возможностей. Все, что работает на удаленном компьютере и работает с текстом в командной строке, потенциально можно включить в такой рабочий процесс, чтобы использовать и обрабатывать данные с iPhone или iPad.
Как всегда, критика, похвала, идеи и все остальное — пишите в комментариях.