Product
Socket Now Supports uv.lock Files
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
@dialogai/dialog-supervisor
Advanced tools
Агент-координатор, который либо ведет сам общение с пользователем на общие темы, либо переключает на диалоги со специализированными агентами, ответственными за ведение диалога на определенную тему или с заданной задачей.
Используемый промпт:
Ты являешься главным ассистентом, которому поручено вести диалог с пользователем.
В процессе диалога ты привлекаешь помощников - ассистентов, которые ведут диалог на
отдельно взятую тему, а также используешь инструменты, с помощью которых решаешь
отдельные задачи.
Вот перечень помощников-ассистентов:
{0}
Вот перечень инструментов:
{1}
Исходя из вопросов или желаний пользователя ты либо вызываешь помощника-ассистента,
и он сам ведет диалог, либо используешь представленные инструменты и ведешь диалог
по этому поводу самостоятельно.
При создании экземпляра класса добавляется история общения, после которой, в свою очередь, добавляется следующий системный промпт:
Учитывая приведенный выше разговор, используй подходящий инструмент или помощника,
или продолжай общение самостоятельно.
const thread_id = ""; // Идентификатор диалога
const systemPrompt = ""; // Стартовая инструкция. Необязательный параметр.
const supervisor = new DialogSupervisor(thread_id, {systemPrompt})
// Дополнительные данные идут как объект с конфигурацией.
Пример использования в контексте телеграм-бота:
async function get_supervisor(ctx) {
let userUuid = await getUser(ctx),
supervisor = new DialogSupervisor(userUuid);
GettingUserProfileDialog.buildFor(supervisor); // Добавляется экземпляр диалога
await supervisor.build();
return supervisor;
}
- tools - массив инструментов @langchain/core/tools.DynamicStructuredTool
- dialog_tools - массив инструментов, связанных с отдельными диалогами @dialogai/dialog-class.{Dialog}
- dialogs - массив задействованных диалогов, которые подключены через dialog_tools.
Используется для вспомогательных целей, если нужно получить доступ к
данным диалога в процессе отладки
- app - объект langchain CompiledStateGraph - скомпилированный граф данного ИИ-агента
- thread_id - идентификатор основного диалога. Как правило указывается UUID пользователя
- systemPrompt - стартовая инструкция агента.
- config - Объект вида { configurable: { thread_id: this.thread_id } }, используемый
для считывания и идентификации состояния диалога из хранилища (checkpointer).
- is_active - boolean (default true). В случае True - агент ведет диалог от своего имени,
в ином случае подключает вспомогательный диалог.
Основные:
- build() - вызывается ПОСЛЕ того, как к агенту подключены все иснтрументы и диалоги.
1. Компилирует граф для агента
2. Восстанавливает состояние данных из хранилища
- invoke(message) - Обрабатывает сообщение пользователя. Параметр message: string | undefined
Подробнее см. описание ниже.
- reg_tool
- reg_dialog_tool - методы регистрации инструментов и диалогов, используемые в агенте.
- getObserver - метод передачи наблюдателя, который наблюдает за вспомогательным диалогом.
См. раздел "SupervisorObserver".
Вспомогательные методы:
- get_state - получить данные текущего состояния диалога
- get_system_prompt - получить текст системного соообщения (с уже подставленными данными
об инструментах)
- store / restore - сохранить/восстановить метаданные диалога (на данном этапе сохраняется
только поле is_active, остальные данные хранятся в checkpointer
invoke(message)
При запуске метода возможны следующие варианты:
SystemMessage('Пользователь только что начал диалог. Расскажи ему, что ты умеешь, и предложи
начать со знакомства и рассказа о его профессиональном опыте и интересах. Если он согласится,
задействуй соответствующего помощника из тех, которые тебе доступны.')
Диалог уже был начат ранее. В этом случае проверяется значение поля is_active
:
Исходя из значения этого поля либо агент общается сам, либо восстанавливает работу соответствующего вспомогательного диалога и инициирует его.
tool
и dialog_tool
tool
- стандартный инструмент, используемый в ИИ-агентах. Граф взаимодействия agent -> tool -> agent
,
предусматривает, что агент возвращает пользователю результаты выполнения соответствующей функции.
dialog_tool
- инструмент, в основе которого работает отдельно настроенная LLM. В этом случае
граф взаимодействия agent -> dialog_tool -> END
, поскольку dialog_tool
перехватывает диалог.
Используется в качестве наблюдателя (паттерн программирования "Observer") от "супервайзера"
при работе отдельного вспомогательного диалога. Является наследником класса Observer
из библиотеки
@dialogai/dialog-observers
Используемый промпт:
Сейчас диалог ведется от имени помощника, который {0}
Ниже в блоке, ограниченном символами === представлено текущее сообщение пользователя.
Твоя задача - определить, хочет ли пользователь перейти к диалогу на другую тему,
за которую отвечает другой помощник, или хочет воспользоваться каким-то из инструментов.
===
{1}
===
Ответь "False", если сообщение пользователя не содержит желания перейти к другому диалогу
или решать другую задачу.
Если пользователь хочет перейти к диалогу на другую тему, за которую отвечает другой помощник,
или хочет воспользоваться каким-то из инструментов, верни имя этого помощника или инструмента.
Или верни "САМОСТОЯТЕЛЬНО", если запрос пользователя не относится к какому-то из твоих помощников
или инструментов.
Больше ничего не отвечай.
В плейсхолдер {0} подставляется описание (description
) для соответствующего dialog_tool
,
которое обычно (и этого нужно придерживаться) начинается со слов: "Используется для..."
.
При создании экземпляра наблюдателя в качестве параметра передается экземпляр "супервайзора",
от имени которого работает наблюдатель.
Например, метод getObserver
класса DialogSupervisor
выглядит следующим образом:
getObserver(){
return new SupervisorObserver(this);
}
Класс наследует свойства класса Observer
, дополнительно в нем предусмотрено свойство supervisor
.
Также в классе переопределяется метод pre_check
, который анализирует пользовательское сообщение.
В случае, если наблюдатель посчитает, что пользователь хочет переключиться на другую задачу или прервать
выполнение текущей задачи, наблюдатель выполняет следующие действия:
true
свойству is_interrupted
текущего диалога и свойству is_active
"супервайзора".invoke
в экземпляре "супервайзора", с передачей в него сообщения пользователя.interruption_message
текущего диалога.Свойство is_interrupted
дает текущему диалогу сигнал прекратить работу и вернуть значение свойства interruption_message
.
FAQs
Main Netto dialog supervisor class
The npm package @dialogai/dialog-supervisor receives a total of 26 weekly downloads. As such, @dialogai/dialog-supervisor popularity was classified as not popular.
We found that @dialogai/dialog-supervisor demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.