Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Медиа-инструменты

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

Медиа-инструменты распределены по двум категориям в реестре инструментов. Инструменты зрения (image, image_info, screenshot) всегда регистрируются в all_tools(). Инструменты рендеринга (tts, canvas) регистрируются при наличии активного канала или безусловно, соответственно.

Вместе эти инструменты дают агентам PRX мультимодальные возможности вывода, позволяя создавать изображения, аудио и визуальные артефакты наряду с текстовыми ответами.

Конфигурация

Медиа-инструменты имеют минимальную конфигурацию. Большинство настроек управляются на уровне канала (для доставки) или через LLM-провайдера (для возможностей модели зрения):

toml
# Конфигурация браузера влияет на возможности скриншотов
[browser]
enabled = true
backend = "rust_native"

# Конфигурация канала влияет на доставку TTS
[channels_config.telegram]
bot_token = "..."
stream_mode = "partial"

# Отдельного раздела конфигурации для медиа-инструментов нет
# Инструменты зрения всегда доступны в all_tools()

Справочник инструментов

image

Обработка и трансформация изображений. Поддерживает изменение размера, обрезку и конвертацию формата.

Изменение размера изображения:

json
{
  "name": "image",
  "arguments": {
    "action": "resize",
    "path": "/home/user/photo.png",
    "width": 800,
    "height": 600
  }
}

Обрезка изображения:

json
{
  "name": "image",
  "arguments": {
    "action": "crop",
    "path": "/home/user/photo.png",
    "x": 100,
    "y": 50,
    "width": 400,
    "height": 300
  }
}

Конвертация формата:

json
{
  "name": "image",
  "arguments": {
    "action": "convert",
    "path": "/home/user/photo.png",
    "format": "jpeg",
    "output": "/home/user/photo.jpg"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
actionstringДа--Операция: "resize", "crop", "convert"
pathstringДа--Путь к исходному файлу изображения
widthintegerУсловно--Целевая ширина (для resize и crop)
heightintegerУсловно--Целевая высота (для resize и crop)
xintegerУсловно--Смещение X начала обрезки
yintegerУсловно--Смещение Y начала обрезки
formatstringУсловно--Целевой формат конвертации: "png", "jpeg", "webp", "gif"
outputstringНетПерезаписывает исходныйПуть к выходному файлу

image_info

Извлечение метаданных и размеров из файлов изображений без их модификации.

json
{
  "name": "image_info",
  "arguments": {
    "path": "/home/user/photo.png"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
pathstringДа--Путь к файлу изображения

Возвращаемая информация:

ПолеОписание
ШиринаШирина изображения в пикселях
ВысотаВысота изображения в пикселях
ФорматФормат изображения (PNG, JPEG, WebP и т.д.)
Цветовое пространствоRGB, RGBA, Grayscale и т.д.
Размер файлаРазмер на диске
DPIРазрешение (если доступно в метаданных)

screenshot

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

json
{
  "name": "screenshot",
  "arguments": {
    "target": "screen"
  }
}
json
{
  "name": "screenshot",
  "arguments": {
    "target": "window",
    "window_name": "Firefox"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
targetstringНет"screen"Что захватить: "screen" (полный экран) или "window" (конкретное окно)
window_namestringУсловно--Заголовок окна для захвата (обязателен при target = "window")
outputstringНетАвтогенерируемый временный путьПуть к выходному файлу скриншота

Скриншоты сохраняются как PNG-файлы. При использовании с LLM, поддерживающими зрение (GPT-4o, Claude Sonnet и т.д.), скриншот может быть включён в следующее сообщение для визуального анализа.

tts

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

json
{
  "name": "tts",
  "arguments": {
    "text": "Good morning! Here is your daily briefing. Three tasks are due today."
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
textstringДа--Текст для конвертации в речь
languagestringНет"en"Код языка для синтеза речи
voicestringНетПо умолчанию провайдераИдентификатор голоса (зависит от провайдера)

Инструмент TTS требует активного канала с поддержкой голосовых сообщений (Telegram, WhatsApp, Discord). На каналах без поддержки голоса инструмент возвращает ошибку.

Конвейер TTS:

  1. Текст отправляется провайдеру TTS (встроенному или внешнему)
  2. Аудио генерируется в формате MP3
  3. Если канал требует M4A (напр., некоторые мобильные клиенты), выполняется автоматическая конвертация
  4. Аудиофайл доставляется через message_send как голосовое сообщение

canvas

Рендеринг структурированного контента для визуального вывода. Поддерживает таблицы, графики, диаграммы и форматированные макеты.

json
{
  "name": "canvas",
  "arguments": {
    "type": "table",
    "data": {
      "headers": ["Name", "Status", "Score"],
      "rows": [
        ["Module A", "Passed", "98"],
        ["Module B", "Failed", "45"],
        ["Module C", "Passed", "87"]
      ]
    }
  }
}
json
{
  "name": "canvas",
  "arguments": {
    "type": "diagram",
    "content": "graph LR\n  A[Input] --> B[Process]\n  B --> C[Output]"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
typestringДа--Тип контента: "table", "chart", "diagram", "code"
dataobjectУсловно--Структурированные данные для таблиц и графиков
contentstringУсловно--Текстовое содержимое для диаграмм (синтаксис Mermaid) и блоков кода
formatstringНет"png"Формат вывода: "png", "svg", "html"
outputstringНетАвтогенерируемый временный путьПуть к выходному файлу

Паттерны использования

Сценарий визуального анализа

Использование скриншотов с LLM, поддерживающими зрение, для понимания состояния интерфейса:

Агент размышляет: Нужно проверить, что веб-приложение выглядит корректно.
  1. [browser] action="navigate", url="https://app.example.com/dashboard"
  2. [screenshot] target="screen"
  3. [Визуальный анализ скриншота LLM]
  4. "На панели управления отображается 3 активных оповещения и график с падающими метриками..."

Генерация отчётов

Создание визуальных отчётов с графиками и таблицами:

Агент размышляет: Пользователь хочет отчёт о статусе проекта.
  1. [memory_search] query="project status"
  2. [canvas] type="table", data={данные статуса проекта}
  3. [canvas] type="chart", data={данные графика прогресса}
  4. [message_send] media_path="/tmp/status_table.png", caption="Project Status"
  5. [message_send] media_path="/tmp/progress_chart.png", caption="Sprint Progress"

Голосовое взаимодействие

Предоставление аудио-ответов для сценариев без рук:

Агент размышляет: Пользователь попросил голосовое резюме.
  1. [memory_recall] query="today's meetings and tasks"
  2. [tts] text="You have 3 meetings today. The first is at 10 AM with the engineering team..."
  → Голосовое сообщение доставлено через Telegram

Безопасность

Доступ к файловой системе

Инструменты работы с изображениями и скриншотами читают и записывают файлы в локальной файловой системе. Эти операции подчиняются тем же политикам безопасности, что и file_read и file_write:

  • Валидация путей предотвращает доступ за пределами разрешённых каталогов
  • Операции записи файлов подчиняются правилам политики безопасности
  • Временные файлы записываются в TMPDIR по умолчанию

Конфиденциальность TTS

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

  • Содержимое TTS отправляется провайдеру TTS (потенциально внешнему)
  • Генерируемые аудиофайлы временно хранятся на диске
  • Голосовые сообщения доставляются через канал и подчиняются политике конфиденциальности платформы

Безопасность содержимого Canvas

Инструмент canvas рендерит данные, предоставленные пользователем. При рендеринге диаграмм в синтаксисе Mermaid содержимое обрабатывается локально и не затрагивает внешние сервисы.

Политика безопасности

Медиа-инструментами можно управлять индивидуально:

toml
[security.tool_policy.tools]
image = "allow"
image_info = "allow"
screenshot = "supervised"    # Требовать одобрение для скриншотов
tts = "allow"
canvas = "allow"

Связанные разделы

Released under the Apache-2.0 License.