Общий агент ErisPulse-QvQChat
ErisPulse-QvQChat — это модуль общего агента, построенный вокруг цикла инструментов: получение и отправка сообщений, вызов сервисов экосистемных модулей, написание и выполнение кода, управление компьютером, генерация изображений и голоса, управление расписанием задач и долгосрочной памятью — всё это выполняется с помощью единой протокола инструментов.
Important
QvQChat необходимо установить отдельно:
epsdk install ErisPulse-QvQChat
Также необходимо добавить хотя бы один совместимый с OpenAI модель в «пул моделей» (Base URL, API Key, имя модели).
Основные возможности
| Возможность | Описание |
|---|---|
| Цикл инструментов | Модель генерирует вызов инструмента → параллельное выполнение → результат возвращается → продолжение вывода, пока не будет получен окончательный ответ |
| Потоковая беседа | SSE выводит по одному символу, шаги инструментов видны в реальном времени; при обновлении / переходе и возвращении прогресс не теряется |
| Сжатие контекста | При превышении порога токенов старый диалог автоматически сжимается в резюме (по умолчанию 128000 оценочных токенов, можно изменить) |
| Мост экосистемных сервисов | Автоматически обнаруживает объявленные модулем сервисы и преобразует их в инструменты, добавление/удаление модуля увеличивает/уменьшает возможности |
| Клиент MCP | stdio и Streamable HTTP, инструменты MCP объединяются в один набор инструментов |
| Подагенты | spawn_agent запускает независимый сеанс подагент для исследования задачи, возвращает только вывод |
| Выполнение в процессе | run_python_sdk выполняет Python в основном процессе, напрямую обращаясь к объектам среды выполнения |
| Управление компьютером | Трехуровневый безопасный песочник (strict / standard / permissive), подтверждение опасных операций, полный аудит |
| Визуальное восприятие | Изображения автоматически вставляются в модель (при отсутствии поддержки изображений автоматически удаляются и повторяется попытка) |
| Вложения | Любые файлы по hash-значению сохраняются на диск, путь передается ИИ для самостоятельного обработки; вставка скриншотов через Ctrl+V |
| Общий доступ к сеансу | Временная ссылка только для чтения (срок действия + бюджет токенов), экспорт в Markdown |
| Планировщик задач | cron / одноразовые / периодические, сохраняются, права доступа привязаны к создателю |
| Перехват сеанса | Администратор может предоставить агенту полный доступ к сеансу |
| Система личности | Системный промт + начальный диалог + белый список инструментов, может быть привязан к сеансу |
| Долгосрочная память | Каждый сеанс имеет записи памяти, которые вставляются по поиску по схожести |
| Автоматическое наименование ИИ | После первого ответа сеанса автоматически генерируется краткое название |
Модульное расширение
Любой модуль ErisPulse, объявляющий services, автоматически становится инструментом QvQChat без необходимости специального интерфейса:
from ErisPulse.Core.Bases import BaseModule, ModuleMeta
class Main(BaseModule):
@staticmethod
def get_meta() -> ModuleMeta:
return ModuleMeta(name="Draw", services=[
{"name": "draw", "description": "Генерирует изображение по описанию и возвращает URL изображения"},
])
async def draw(self, prompt: str, size: str = "1024x1024"):
return {"image_url": "https://..."}
Подпись метода автоматически сопоставляется с определением параметров JSON Schema инструмента, а первая строка docstring используется как описание параметра.
Глубокая интеграция (необязательно)
Модуль может дополнительно реализовать любую из следующих служб, каждая из которых необязательна — один модуль может быть предназначен только для расширения персонажа, а может только внедрять системные подсказки:
qvq_prompts() → Внедрение системных подсказок
Возвращает list[str] или list[{"text": str, "priority": int}], объединяя подсказки по возрастанию priority.
async def qvq_prompts(self):
return [
{"text": "Отправьте пользователю изображение с помощью send_message после рисования.", "priority": 10},
{"text": "Поддерживаемые стили: аниме, реализм, акварель, пиксель.", "priority": 20},
]
qvq_personas() → Регистрация предустановленных персонажей
Возвращает список персонажей, id автоматически добавляется префикс ext.<имя_модуля>., модуль при отключении автоматически очищается. Подходит для модулей, специально предоставляющих расширение персонажей (например, эмоциональное сопровождение, переводчик, рецензент кода и т.д.).
async def qvq_personas(self):
return [
{"id": "companion", "name": "Теплый парень", "system": "Ты — тёплый и внимательный собеседник..."},
{"id": "coder", "name": "Код-наставник", "system": "...", "tools": ["read_file", "run_python"]},
]
Параметр tools необязательно может ограничивать набор доступных инструментов для этого персонажа.
qvq_schemas() → Явное определение схемы параметров
Возвращает dict[имя_службы, JSON Schema], перезаписывая вывод из сигнатуры метода. Используется, когда параметры сложные или требуется строгая проверка.
async def qvq_schemas(self):
return {
"draw": {
"type": "object",
"properties": {
"prompt": {"type": "string", "description": "Описание изображения"},
"size": {"type": "string", "enum": ["512x512", "1024x1024"]},
},
"required": ["prompt"],
},
}
Время обновления
Время обновления глубоких интеграционных служб: запуск, установка и удаление модуля, ручное обновление на странице Dashboard «Инструменты».
Подписка на события
QvQChat транслирует два события жизненного цикла:
| Событие | Время | Параметры |
|---|---|---|
qvq.message |
Получено сообщение от пользователя | chat_key platform sender_id sender_name text is_group |
qvq.replied |
Отправлен ответ | chat_key reply tools |
async def setup(self):
sdk.lifecycle.on("qvq.message", self.on_message)
Вызов как сервис
| Сервис | Подпись | Описание |
|---|---|---|
chat |
(session_id, prompt, persona="") |
Диалог с агентом, возвращает текст |
run_prompt |
(chat_key, prompt, ...) |
Выполнение подсказки, результат может быть отправлен в целевой сеанс |
get_status |
() |
Сводка о состоянии выполнения |
Интерфейс
Доступ к интерфейсу осуществляется по отдельному адресу /QvQChat/view или встраивается в боковую панель панели управления.

