Найти в Дзене
“Gorilla Guerrilla”

Установка и первые шаги с Fabric — оптимизатором запросов

Автоматизация, CLI, LLM
ChatGPT, Fabric, LLM, macOS, OpenAI, Prompts

Примечание:
Вскоре после публикации моего введения в
Fabric была выпущена новая версия, перенесенная на Go. В этой статье я расскажу об этой новой версии, а старая статья была удалена.

Введение в Fabric
Качество результатов при использовании больших языковых моделей (LLM), таких как Ollama или ChatGPT, во многом зависит от качества используемого запроса. Это осознание привело к появлению специализированных профессий, таких как Prompt Engineer, чья задача заключается в оптимальной настройке LLM для получения наилучших результатов для конкретных задач или контекстов. Кроме того, публикуются сотни статей с многообещающими названиями, такими как «100 лучших запросов для генерации резюме для должности топ-менеджера».

Fabric, инструмент, который представлен здесь, призван упростить и оптимизировать процесс создания запросов, чтобы получить наилучшие результаты от LLM. В этой статье описаны первые шаги, включая установку и основное использование.

Что такое Fabric?
Проект Fabric, разработанный
Дэниелом Мисслером, был разработан с целью позволить пользователям LLM снова сосредоточиться на содержании, а не затеряться во множестве экспериментов с запросами. Fabric предоставляет библиотеку из более чем 140 так называемых паттернов, которые ориентированы на конкретные задачи и проблемы. Примеры включают «extract_wisdom», который извлекает знания и ключевые выводы из текста или видео на YouTube, а также «create_coding_project», который помогает создать основу для проекта разработки. Паттерны очень подробно описывают, какие шаги следует выполнять с вводом, какую роль должен играть LLM, на что он должен обратить особое внимание и как должна быть оформлена выходная информация.

Fabric объединяет ввод, будь то текст или контекст задачи, с выбранным паттерном и передает его в LLM. Это может происходить как локально, как в случае с LLM, предоставляемыми Ollama, так и через облачные сервисы, такие как OpenAI, Claude или Google.

На сегодняшний день, конец августа 2024 года, Fabric — это чисто командный инструмент. В предыдущей версии, написанной на Python, был также графический интерфейс и серверный интерфейс, которые в настоящее время не реализованы. Если в ближайшем будущем будет добавлен графический интерфейс или серверный интерфейс и для меня будет польза, я опишу это в следующих статьях.

Установка Fabric
Установка осуществляется через репозиторий Github проекта. Для выполнения программ и примеров необходимо выполнить некоторые подготовительные работы. Поскольку установка, а также последующее использование происходит в программе терминала, необходимо иметь некоторый опыт работы с командной строкой. При возникновении вопросов их можно задать в комментариях, я постараюсь ответить на них как можно скорее. В этой статье описана установка исключительно на Mac, для Windows и Linux я, вероятно, не смогу предложить существенную помощь.

Подготовка к установке
Сначала необходимо установить go, git и ffmpeg. Я использую для этого менеджер пакетов Homebrew. Если Homebrew установлен на Mac, необходимые инструменты можно быстро установить в терминале с помощью следующей команды:

brew install git go ffmpeg

Если программы уже были установлены, повторная установка не будет произведена. После установки GO пути поиска в файле .zshrc не были добавлены. Для GO, установленного с помощью brew, требуется немного другой путь для GOROOT, чем описано в руководстве на Github. Чтобы дополнить эти пути поиска, запустите редактор и откройте файл ~/.zshrc:

# Я использую nano в качестве редактора
nano ~/.zshrc

Затем прокрутите вниз до конца файла и добавьте следующее:

# Задать Go Path
export GOROOT="$(brew --prefix golang)/libexec"
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$HOME/.local/bin:$PATH:

Если GO не был установлен с помощью Homebrew, GOROOT может выглядеть иначе. Однако я не могу это подтвердить:

export GOROOT=/usr/local/go

С помощью ⌃x⌃y закройте редактор и сохраните файл. Теперь с помощью команды:

source ~/.zshrc

изменения будут применены к системе.

Если используется другая оболочка, эти определения пути необходимо внести в соответствующий файл и синтаксис. Однако на Mac по умолчанию активна оболочка zsh.

Шаги по установке Fabric
Сначала установите последнюю версию Fabric из репозитория Github, для чего уже используется команда go:

go install github.com/danielmiessler/fabric@latest

Затем запустите установку с помощью команды:

fabric --setup

Если при вызове fabric --setup появляется ошибка, что fabric не найден, то либо записи в файле ~/.zshrc неверны, либо команда source не была выполнена. В качестве альтернативы можно закрыть окно терминала и в новом окне снова запустить установку.

Во время установки сначала будут запрошены API-ключи Groq, Gemini, Anthropic, OpenAI и Azure. Если ни один из этих сервисов не используется, необходимо установить, по крайней мере, Ollama и указать URL-адрес Ollama, который обычно равен http://localhost:11434. После ввода информации об одном или нескольких из этих сервисов будет создан список всех доступных LLM, из которого будет выбрано стандартное LLM. После этого будет запрошен ключ YouTube. При последних запросах под заголовком «Загрузчик паттернов» я использовал предложенные значения.

После завершения этих вводов паттерны будут загружены и установлены в $HOME/.config/fabric/patterns. В каталоге $HOME/.config/fabric также будет создан файл .env, в котором будут сохранены сделанные записи. Файл с именем unique_patterns.txt содержит список всех паттернов. В папку context можно поместить текстовые файлы, которые предоставляют дополнительный контекст при вызове Fabric. Таким образом, общую дополнительную информацию, которая может потребоваться в зависимости от ситуации, можно определить один раз и включить при вызове различных паттернов.

Цель папки sessions, которая также создается, мне пока не ясна.

Первые шаги с Fabric
Fabric — это командный инструмент, который следует философии Unix, согласно которой небольшие специализированные программы позволяют создавать более сложные рабочие процессы путем гибкого соединения. Программы соединяются друг с другом через символ канала |, при этом выходные данные (stdout) одной программы поступают на вход (stdin) следующей. В рабочем процессе с Fabric можно использовать любую командную строку, которая генерирует вывод в stdout или потребляет stdin. Например, для ввода текста можно использовать echo или cat, чтобы передать текстовый файл. Результат также можно записать в файл с помощью > или добавить к файлу с помощью >>.

Следующая командная строка демонстрирует, как с помощью echo и fabric создать простой рабочий процесс, который обрабатывает текст и предлагает запрос для DALL‑E или Stable-Diffusion для создания логотипа:

echo "Два попугая на крыше небоскреба" | fabric --stream --pattern create_logo

В этом примере команда echo выводит текст «Два попугая на крыше небоскреба», который затем передается команде fabric через символ канала |. Fabric обрабатывает этот текст с помощью паттерна create_logo, передает результат LLM, а тот, в свою очередь, генерирует предложение запроса, которое затем отображается в командной строке.

LLM, в данном случае GPT-4o-mini, сгенерировал следующий запрос:

A simple, vector graphic logo featuring two stylized parrots perched on the edge of a minimalist skyscraper rooftop. The design should emphasize elegance and simplicity, using clean lines and a limited color palette to convey a modern urban feel.

Я передал команду вручную в ChatGPT и получил следующее изображение:

-2

Изображение: Изображение представляет собой стилизованный графический дизайн, на котором два попугая сидят на небоскребе. Попугаи нарисованы в минималистичном, современном стиле, с ограниченной цветовой гаммой черно-белых цветов. Сам небоскреб также упрощен и представлен вертикальными полосами, что придает ему четкий и структурированный вид. Фон изображения однотонный серый, что привлекает внимание к птицам и небоскребу.

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

Следующий пример показывает, как с помощью Fabric создать краткое изложение веб-страницы. Веб-страница загружается с помощью программы wget (здесь статья из моего блога). Вывод, HTML-код, затем передается в pandoc, который извлекает текст. Затем извлеченный текст объединяется с fabric и паттерном summarize, обрабатывается LLM, и результат выводится. (wget и pandoc необходимо установить с помощью brew):

wget -qO- https://ileif.de/2024/08/07/automatisierung-von-apple-kurzbefehlen-mit-shortery/ | pandoc -f html -t plain | fabric -sp summarize

Результат запроса представлен в формате Markdown. В этом случае Fabirc использовал API OpenAI с LLM GPT-4o-mini:

# ONE SENTENCE SUMMARY:
Shortery enhances Apple Shortcuts automation on macOS by allowing various triggers for executing workflows based on events.
# MAIN POINTS:
1. Apple Shortcuts can now run on macOS since Monterey.
2. Automatic triggering of shortcuts is limited compared to iOS.
3. Only folder actions can trigger workflows on macOS.
4. Shortery app offers additional automation triggers for macOS users.
5. Users can set time-based triggers using macOS's launchd service.
6. Shortery allows actions based on application events like start and stop.
7. The app is available for download from the Mac App Store.
8. Users can customize settings for login, menu bar visibility, and sleep prevention.
9. Triggers can be created for specific applications to automate tasks.
10. A free trial is available before committing to a subscription.
# TAKEAWAYS:
1. Shortery significantly expands automation capabilities for macOS users.
2. Understanding events and triggers is crucial for effective automation.
3. The app's user interface is straightforward but only available in English.
4. Users should consider their automation needs before subscribing.
5. Feedback and community engagement are encouraged for continuous improvement

Хотя статья написана на русском языке, модели OpenAI имеют определенное предпочтение к английскому языку, поэтому результаты обработки обычно отображаются на английском языке. Как обойти это, я расскажу далее. На этом этапе важно понимать, что все, что генерирует текст, может служить вводом для обработки в Fabric. Кроме того, вывод шага Fabric может, в свою очередь, служить вводом для другого шага Fabric или обрабатываться другими командами.

Чтобы обработать только определенную часть текста из документа и вставить результат обратно в документ, на macOS подходят команды pbpaste и pbcopy. С помощью этих команд содержимое буфера обмена сначала передается в Fabric, вывод затем копируется в буфер обмена, а затем его можно вставить в документ с помощью ⌘-V.

pbpaste | fabric -sp improve_writing | pbcopy

Дополнительные функции Fabric
В старой версии Python были установлены дополнительные инструменты, такие как yt для транскрибирования видео на YouTube, ts для транскрибирования аудиофайлов и save для сохранения вывода в определенной папке. В настоящее время (по состоянию на 20.08.2024) была перенесена только команда yt. Неизвестно, будут ли добавлены другие инструменты.

Однако команду yt в этой версии необходимо установить отдельно:

go install github.com/danielmiessler/yt@latest

yt извлекает текст, который произносится в видео на YouTube, которое затем может быть обработано Fabric.

yt --transcript https://www.youtube.com/watch?v=UbDyjIIGaxQ | fabric --stream --output $HOME/Video_transscript.md --pattern extract_wisdom

В этом примере текст из видео «You’ve Been Using AI Wrong» от NetworkChuck извлекается и анализируется. Самые важные выводы записываются в соответствии с определенными правилами паттерна extract_wisdom в файл Markdown с именем Video_transcript.md в моем домашнем каталоге.

Видео «You’ve Been Using AI Wrong» обратило мое внимание на Fabric. Его стоит посмотреть, но в нем рассказывается о старой версии, основанной на python.

В качестве замены команде save, которая позволяла сохранять результат в определенном месте, я использую следующий сценарий Shell. Я сохраняю его в $HOME/Applications, который указан в моем пути поиска $PATH, под названием save, и делаю его исполняемым с помощью chmod +x $HOME/Applications/save.

#!/bin/zsh
# Определить каталог, в котором будет сохранен файл TARGET_DIR="$HOME/Documents/fabric_files"
# Создать каталог, если он не существует
mkdir -p "$TARGET_DIR"
# Установить текущую дату в качестве префикса для имени файла DATE_PREFIX=$(date +"%Y-%m-%d")
# Установить расширение имени файла
BASENAME="note"
EXTENSION=".md"
# Проверить, существует ли файл, если да, то дополнить имя файла порядковым номером
COUNTER=1
while [[ -e "${TARGET_DIR}/${FILENAME}" ]]; do FILENAME="${DATE_PREFIX}-${BASENAME}-${COUNTER}${EXTENSION}" COUNTER=$((COUNTER + 1))
done
# Прочитать текст из канала и сохранить его в файл
cat > "${TARGET_DIR}/${FILENAME}"

Теперь результат вызова Fabric можно просто сохранить в папке Documents/fabric_files под названием 2024–08–23-note.md с помощью следующей команды:

cat ~/Documents/Article_Draft.md | fabric -sp summarize | save

Если у кого-то есть совет по команде для транскрибирования аудиофайла, то, пожалуйста, оставьте его в комментариях.

Если у кого-то есть совет по команде для транскрибирования аудиофайла, то, пожалуйста, оставьте его в комментариях.

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

fabric --listpatterns # выводит список всех паттернов
fabric --listmodels # выводит список всех LLM
fabric --changeDefaultModel # изменяет стандартное LLM
fabric --model llama3.1:latest -sp summarize
# изменяет LMM временно для этого вызова
fabric --output MeineDatei.md -sp summarize
# Сохраняет результат вызова fabric в MeineDatei.md
fabric --context blogger-support -sp summarize

Как уже упоминалось, в папку ~/.config/fabric/context можно поместить файлы, которые предоставляют дополнительную информацию для вызова Fabric. Например, в файле blogger-support можно определить дополнительные правила, которые могут быть полезны в контексте поддержки при написании статьи для блога. Эти правила могут использоваться не только при использовании паттерна, но и с помощью опции --context при вызове различных паттернов.

cat ~/.config/fabric/.env # Отображает текущую конфигурацию

Дополнительные параметры перечислены и описаны в fabric --help и yt --help.

Значение паттернов в Fabric
Паттерны — это сердце Fabric, поскольку они эффективно предоставляют проверенные запросы, которые смешиваются с собственным контентом и отправляются LLM для обработки. Эти паттерны легко адаптировать к собственным потребностям, а также можно перенести в паттерны собственные проверенные запросы и использовать их с Fabric.

При установке устанавливается около 140 паттернов (и их число постоянно растет). Паттерны обычно разделены на разделы. Большинство паттернов начинаются с раздела «IDENTITY and PURPOSE», который описывает, какую роль должен играть LLM и какие задачи он должен выполнять. Затем следуют разделы с инструкциями о том, как LLM должен анализировать входные данные и на что он должен обратить особое внимание. После этого следует раздел «OUTPUT», в котором описан формат выходных данных. Последний раздел — «INPUT», который позже дополняется вводом.

Паттерн write_essay содержит в разделе «IDENTITY and PURPOSE» следующие инструкции:

# IDENTITY and PURPOSE
You are an expert on writing concise, clear, and illuminating essays on the topic of the input provided.

Эта инструкция дополняется в разделе «OUTPUT INSTRUCTIONS» следующей инструкцией:

# OUTPUT INSTRUCTIONS
- Write the essay in the style of Paul Graham, who is known for this concise, clear, and simple style of writing.

Однако этого недостаточно, поскольку LLM также необходимо знать, как выглядит стиль Пола Грэма. Поэтому далее приведены текстовые примеры объемом 9025 слов, которые определяют типичный стиль эссе Пола Грэма. После этого даются некоторые подробные инструкции по выводу.

Конечно, это паттерн, который требует адаптации. Например, вместо Пола Грэма можно указать свое имя, текстовые примеры можно взять из собственных текстов, а инструкции можно изменить так, чтобы вместо эссе на выходе была статья для журнала.

Еще одна полезная настройка — это инструкция в разделе «OUTPUT INSTRUCTIONS», то есть вывод должен быть на русском языке:

- Make the output in Russian.

Обычно этого достаточно; то есть не нужно переводить весь паттерн.

Изменения должны быть внесены в копию папки паттернов, которая затем получит новое имя, например zusammenfassung. Разработчики рекомендуют хранить эти папки в отдельном каталоге и каждый раз помещать копию в папку Patterns. Оригинальные паттерны перезаписываются при обновлении, возможно, также перезаписываются собственные паттерны в этой папке.

Еще один способ получить результаты на русском языке — это использовать упомянутые выше контекстные файлы в папке ~/.config/fabric/contexts. Например, создайте файл в этой папке:

nano ~/.config/fabric/contexts/russian

с содержанием:

Make the output in Russian

Также можно запустить вызов Fabric с помощью опции --context=german и получить результат всегда на русском языке.

Оптимизация вызова Fabric
В старой версии Fabric поставлялся файл, который для каждого вызова Fabric с помощью паттерна создавал определение псевдонима, а затем делал его доступным при инициализации .zshrc. Поскольку новая версия больше не предлагает эту функцию, я воссоздал эту функцию в виде сценария Shell:

#!/bin/bash
# Фиксированный путь к папке, которая должна быть отсканирована
input_dir="$HOME/.config/fabric/patterns"
# Проверка, является ли путь допустимым каталогом
if [ ! -d "$input_dir" ]; then
echo "Папка $input_dir не существует или не является допустимым каталогом."
exit 1
fi
# Имя файла для .inc файла
output_file="$HOME/.config/fabric/fabric-bootstrap.inc"
# Инициализация .inc файла
echo "# Автоматически сгенерированные псевдонимы" > "$output_file"
# Проход по подкаталогам в указанном каталоге
for dir in "$input_dir"/*/; do
# Проверка, действительно ли это каталог
if [ -d "$dir" ]; then
# Удалить конечный слеш и путь, чтобы получить только имя папки
folder_name=$(basename "$dir")
# Создать псевдоним в виде: alias имя_папки="fabric -sp имя_папки"
echo "alias $folder_name=\"fabric -C=russian -sp $folder_name\"" >> "$output_file"
fi
done
echo "Файл $output_file успешно создан."

Теперь в конце ~/.zshrc необходимо добавить следующую запись:

# Создано с помощью `Установка Fabric` 2024-08-06 12:45:30
if [ -f "/Users/leifjp/.config/fabric/fabric-bootstrap.inc" ];
then . "/Users/leifjp/.config/fabric/fabric-bootstrap.inc";
fi

С помощью source ~/.zshrc активируется новая .zshrc, и теперь при вызове:

wget -qO- https://ileif.de/2024/08/07/automatisierung-von-apple-kurzbefehlen-mit-shortery/ | pandoc -f html -t plain | summarize

вместо

wget -qO- https://ileif.de/2024/08/07/automatisierung-von-apple-kurzbefehlen-mit-shortery/ | pandoc -f html -t plain | fabric -sp summarize

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

Заключение и перспективы
Надеюсь, это небольшое введение в Fabric немного облегчит вам вхождение в курс дела. В следующей статье я покажу, как можно упростить вызов Fabric, а также как его можно интегрировать в рабочий процесс Alfred, а также в «Быстрые команды» от Apple.

Если у вас возникнут вопросы, критика или идеи по поводу Fabric и установки, пожалуйста, используйте функцию комментариев.