Security News
38% of CISOs Fear They’re Not Moving Fast Enough on AI
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
@dialogai/dialog-supervisor
Advanced tools
Агент-координатор, который либо ведет сам общение с пользователем на общие темы, либо переключает на диалоги со специализированными агентами, ответственными за ведение диалога на определенную тему или с заданной задачей.
Используемый промпт:
Ты являешься главным ассистентом, которому поручено вести диалог с пользователем.
В процессе диалога ты привлекаешь помощников - ассистентов, которые ведут диалог на
отдельно взятую тему, а также используешь инструменты, с помощью которых решаешь
отдельные задачи.
Вот перечень помощников-ассистентов:
{0}
Вот перечень инструментов:
{1}
Исходя из вопросов или желаний пользователя ты либо вызываешь помощника-ассистента,
и он сам ведет диалог, либо используешь представленные инструменты и ведешь диалог
по этому поводу самостоятельно.
При создании экземпляра класса добавляется история общения, после которой, в свою очередь, добавляется следующий системный промпт:
Учитывая приведенный выше разговор, используй подходящий инструмент или помощника,
или продолжай общение самостоятельно.
const {DialogSupervisor} = require("@dialogai/dialog-supervisor");
const thread_id = ""; // Идентификатор диалога
const systemPrompt = ""; // Стартовая инструкция. Необязательный параметр.
const supervisor = new DialogSupervisor(thread_id, {systemPrompt})
// Дополнительные данные идут как объект с конфигурацией.
Пример использования в контексте телеграм-бота:
const {Dialog} = require("@dialogai/dialog-class");
const {DialogSupervisor} = require("@dialogai/dialog-supervisor");
async function get_supervisor(userUuid) {
let supervisor = new DialogSupervisor(userUuid);
/* Добавляется экземпляр диалога, в ходе которого пользователь рассказывает о себе */
setUserProfileDialogFor(supervisor);
await supervisor.build();
return supervisor;
}
function setUserProfileDialogFor(supervisor){
let dialog = new Dialog({
dialog_code: 'GUPD',
start_system_msg: `...`, // Промпт для диалога
tool_name: 'discuss_skills_experience_and_hobbies',
tool_description: 'Используется, когда нужно узнать опыт работы и интересы пользователя (по запросу пользователя или если это требуется в ходе диалога).'
});
if (supervisor) {
dialog
.reg_observer(supervisor.getObserver())
.set_session_id(supervisor.thread_id)
.get_tool_for(supervisor);
}
dialog
// Регистрируются наблюдатели...
.reg_observer(new IsDialogFinishedObserver())
.reg_observer(new DiscussProfessionalIntentObserver());
//...
console.log('DIALOG :: ', dialog.toString());
}
async function processDialog(userUuid, msg) {
let ai = await get_supervisor(userUuid),
ai_msg = await ai.invoke(msg);
console.log('AI :: REPLY :: ', ai_msg);
}
tools
- массив инструментов @langchain/core/tools.DynamicStructuredTooldialog_tools
- массив инструментов, связанных с отдельными диалогами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, остальные данные хранятся в checkpointerinvoke(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 11 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.
Security News
CISOs are racing to adopt AI for cybersecurity, but hurdles in budgets and governance may leave some falling behind in the fight against cyber threats.
Research
Security News
Socket researchers uncovered a backdoored typosquat of BoltDB in the Go ecosystem, exploiting Go Module Proxy caching to persist undetected for years.
Security News
Company News
Socket is joining TC54 to help develop standards for software supply chain security, contributing to the evolution of SBOMs, CycloneDX, and Package URL specifications.