Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
@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 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.
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.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.