ваше сообщение коммита
This commit is contained in:
108
docs/MODULE_ARCHITECTURE.md
Normal file
108
docs/MODULE_ARCHITECTURE.md
Normal file
@@ -0,0 +1,108 @@
|
||||
# Архитектура модулей DLE
|
||||
|
||||
## Обзор
|
||||
|
||||
DLE использует модульную архитектуру, где каждый модуль может иметь свои правила доступа и функциональность.
|
||||
|
||||
## Типы модулей
|
||||
|
||||
### 1. Простые модули (Вариант 1)
|
||||
Модули сами проверяют права доступа токен-холдеров.
|
||||
|
||||
```solidity
|
||||
contract SimpleModule {
|
||||
address public dleContract;
|
||||
|
||||
modifier onlyDLEHolders() {
|
||||
require(IERC20(dleContract).balanceOf(msg.sender) > 0, "Must hold DLE tokens");
|
||||
_;
|
||||
}
|
||||
|
||||
function someFunction() external onlyDLEHolders {
|
||||
// Логика функции
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Сложные модули (Вариант 3)
|
||||
Модули работают через основной контракт DLE.
|
||||
|
||||
```solidity
|
||||
contract ComplexModule {
|
||||
address public dleContract;
|
||||
|
||||
function executeOperation(address caller, bytes calldata operation) external {
|
||||
require(msg.sender == dleContract, "Only DLE can call");
|
||||
require(IERC20(dleContract).balanceOf(caller) > 0, "Must hold tokens");
|
||||
|
||||
// Выполняем операцию
|
||||
_executeOperation(caller, operation);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Рекомендации по выбору
|
||||
|
||||
### Используйте Вариант 1 для:
|
||||
- ✅ Простых операций (чтение данных)
|
||||
- ✅ Модулей с минимальной логикой
|
||||
- ✅ Быстрых операций
|
||||
|
||||
### Используйте Вариант 3 для:
|
||||
- ✅ Сложных финансовых операций
|
||||
- ✅ Модулей с критической логикой
|
||||
- ✅ Операций, требующих аудита
|
||||
|
||||
## Примеры модулей
|
||||
|
||||
### TreasuryModule (Казна)
|
||||
```solidity
|
||||
contract TreasuryModule {
|
||||
address public dleContract;
|
||||
mapping(address => bool) public supportedTokens;
|
||||
|
||||
modifier onlyDLEHolders() {
|
||||
require(IERC20(dleContract).balanceOf(msg.sender) > 0, "Must hold DLE tokens");
|
||||
_;
|
||||
}
|
||||
|
||||
function depositToken(address token, uint256 amount) external onlyDLEHolders {
|
||||
require(supportedTokens[token], "Token not supported");
|
||||
IERC20(token).transferFrom(msg.sender, address(this), amount);
|
||||
}
|
||||
|
||||
function withdrawToken(address token, uint256 amount) external onlyDLEHolders {
|
||||
require(supportedTokens[token], "Token not supported");
|
||||
IERC20(token).transfer(msg.sender, amount);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### GovernanceModule (Управление)
|
||||
```solidity
|
||||
contract GovernanceModule {
|
||||
address public dleContract;
|
||||
|
||||
function executeOperation(address caller, bytes calldata operation) external {
|
||||
require(msg.sender == dleContract, "Only DLE can call");
|
||||
require(IERC20(dleContract).balanceOf(caller) > 0, "Must hold tokens");
|
||||
|
||||
// Выполняем операцию управления
|
||||
_executeGovernanceOperation(caller, operation);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### Общие принципы:
|
||||
1. **Всегда проверяйте** баланс токенов DLE
|
||||
2. **Валидируйте входные данные** в модулях
|
||||
3. **Используйте ReentrancyGuard** для финансовых операций
|
||||
4. **Логируйте важные операции** через события
|
||||
|
||||
### Аудит модулей:
|
||||
- Проверяйте права доступа
|
||||
- Тестируйте граничные случаи
|
||||
- Валидируйте входные параметры
|
||||
- Проверяйте обработку ошибок
|
||||
@@ -50,6 +50,176 @@
|
||||
|
||||
---
|
||||
|
||||
## Многоагентная архитектура AI-ассистента
|
||||
|
||||
### 🎯 Главный AI-координатор
|
||||
- **Роль:** Анализирует входящие сообщения и координирует работу специализированных агентов
|
||||
- **Функции:**
|
||||
- Определяет какие агенты нужны для обработки сообщения
|
||||
- Собирает результаты от всех агентов
|
||||
- Генерирует финальный персонализированный ответ
|
||||
- Управляет контекстом беседы
|
||||
|
||||
### 🤖 Специализированные агенты
|
||||
|
||||
#### 1. Агент "Персонализация пользователя"
|
||||
- **Задача:** Извлечение и управление персональными данными
|
||||
- **Функции:**
|
||||
- Извлекает имя из сообщений ("меня зовут Саша")
|
||||
- Анализирует профиль пользователя (компания, должность, предпочтения)
|
||||
- Отслеживает историю взаимодействий
|
||||
- Определяет стадию в воронке продаж
|
||||
- **Результат:** Персонализированный контекст для ответа
|
||||
|
||||
#### 2. Агент "Анализ запроса"
|
||||
- **Задача:** Классификация и понимание сути обращения
|
||||
- **Функции:**
|
||||
- Определяет тип вопроса (техническая проблема, вопрос о цене, жалоба)
|
||||
- Анализирует эмоциональное состояние клиента
|
||||
- Выявляет скрытые потребности
|
||||
- Определяет приоритетность запроса
|
||||
- **Результат:** Структурированный анализ запроса
|
||||
|
||||
#### 3. Агент "RAG поиск"
|
||||
- **Задача:** Поиск релевантной информации в базе знаний
|
||||
- **Функции:**
|
||||
- Векторный поиск по RAG базе
|
||||
- Фильтрация по тегам пользователя
|
||||
- Поиск похожих случаев и решений
|
||||
- Извлечение контекстной информации
|
||||
- **Результат:** Релевантные ответы и шаблоны
|
||||
|
||||
#### 4. Агент "Контекст беседы"
|
||||
- **Задача:** Анализ истории взаимодействий
|
||||
- **Функции:**
|
||||
- Изучает предыдущие сообщения в беседе
|
||||
- Анализирует все предыдущие обращения пользователя
|
||||
- Определяет повторяющиеся темы и проблемы
|
||||
- Отслеживает прогресс в решении задач
|
||||
- **Результат:** Контекстная картина взаимодействия
|
||||
|
||||
#### 5. Агент "Детализация"
|
||||
- **Задача:** Выяснение недостающей информации
|
||||
- **Функции:**
|
||||
- Формулирует уточняющие вопросы
|
||||
- Определяет какие детали нужны для решения
|
||||
- Адаптирует вопросы под контекст беседы
|
||||
- Отслеживает ответы на уточняющие вопросы
|
||||
- **Результат:** Структурированные уточняющие вопросы
|
||||
|
||||
#### 6. Агент "Персонализация ответа"
|
||||
- **Задача:** Адаптация ответа под конкретного пользователя
|
||||
- **Функции:**
|
||||
- Учитывает стиль общения пользователя
|
||||
- Адаптирует тон (формальный/неформальный)
|
||||
- Использует имя и персональные данные
|
||||
- Ссылается на предыдущие взаимодействия
|
||||
- **Результат:** Персонализированный ответ
|
||||
|
||||
#### 7. Агент "Мультиязычность"
|
||||
- **Задача:** Обработка многоязычных запросов
|
||||
- **Функции:**
|
||||
- Определяет язык входящего сообщения
|
||||
- Ищет ответы на соответствующем языке
|
||||
- Генерирует ответы на языке пользователя
|
||||
- Адаптирует культурные особенности
|
||||
- **Результат:** Локализованный ответ
|
||||
|
||||
#### 8. Агент "Мультимодальность"
|
||||
- **Задача:** Обработка различных типов контента
|
||||
- **Функции:**
|
||||
- Анализ изображений, аудио, видео
|
||||
- Извлечение текста из медиафайлов
|
||||
- Поиск похожих медиа в базе знаний
|
||||
- Генерация мультимодальных ответов
|
||||
- **Результат:** Контекст из медиафайлов
|
||||
|
||||
### ⚙️ Логика работы многоагентной системы
|
||||
|
||||
#### Шаг 1: Получение сообщения
|
||||
- Координатор получает входящее сообщение
|
||||
- Анализирует базовый контекст
|
||||
- Определяет необходимых агентов
|
||||
|
||||
#### Шаг 2: Параллельный запуск агентов
|
||||
- Агент "Персонализация" → извлекает данные пользователя
|
||||
- Агент "Анализ запроса" → классифицирует обращение
|
||||
- Агент "RAG поиск" → ищет релевантную информацию
|
||||
- Агент "Контекст" → анализирует историю
|
||||
- Агент "Мультиязычность" → определяет язык
|
||||
- Агент "Мультимодальность" → обрабатывает медиа
|
||||
|
||||
#### Шаг 3: Сбор и анализ результатов
|
||||
- Координатор собирает данные от всех агентов
|
||||
- Анализирует полноту информации
|
||||
- Определяет необходимость дополнительных уточнений
|
||||
|
||||
#### Шаг 4: Генерация ответа
|
||||
- Если информации достаточно → генерирует персонализированный ответ
|
||||
- Если нужно уточнить → запускает агента "Детализация"
|
||||
- Если требуется дополнительный контекст → запрашивает у других агентов
|
||||
|
||||
#### Шаг 5: Сохранение контекста
|
||||
- Обновляет профиль пользователя
|
||||
- Сохраняет контекст беседы
|
||||
- Логирует использованные знания
|
||||
|
||||
### 🎨 Преимущества многоагентной архитектуры
|
||||
|
||||
1. **Модульность:** Каждый агент решает свою специализированную задачу
|
||||
2. **Масштабируемость:** Легко добавлять новых агентов
|
||||
3. **Эффективность:** Параллельная обработка разных аспектов
|
||||
4. **Гибкость:** Разные комбинации агентов для разных ситуаций
|
||||
5. **Персонализация:** Глубокое понимание каждого пользователя
|
||||
6. **Качество:** Специализированная обработка каждого аспекта
|
||||
|
||||
---
|
||||
|
||||
## Персонализация на уровне аккаунта пользователя
|
||||
|
||||
### 👤 Профиль пользователя
|
||||
- **Базовые данные:** Имя, компания, должность, контактная информация
|
||||
- **История взаимодействий:** Все предыдущие обращения и решения
|
||||
- **Предпочтения:** Стиль общения, технический уровень, приоритеты
|
||||
- **Статус:** Стадия в воронке продаж, статус клиента
|
||||
- **Теги:** Категории, сегменты, специализации
|
||||
|
||||
### 📊 Контекстная картина
|
||||
- **Текущая беседа:** Сообщения в рамках одной сессии
|
||||
- **История обращений:** Все предыдущие взаимодействия
|
||||
- **Решенные проблемы:** Успешно закрытые задачи
|
||||
- **Открытые вопросы:** Незавершенные обращения
|
||||
- **Эмоциональное состояние:** Тон и настроение клиента
|
||||
|
||||
### 🎯 Алгоритм персонализации
|
||||
|
||||
#### 1. Анализ входящего сообщения
|
||||
- Определение типа обращения
|
||||
- Извлечение ключевой информации
|
||||
- Анализ эмоционального контекста
|
||||
|
||||
#### 2. Загрузка профиля пользователя
|
||||
- Получение персональных данных
|
||||
- Анализ истории взаимодействий
|
||||
- Определение текущего статуса
|
||||
|
||||
#### 3. Поиск в RAG базе
|
||||
- Фильтрация по тегам пользователя
|
||||
- Поиск релевантных решений
|
||||
- Анализ похожих случаев
|
||||
|
||||
#### 4. Формирование контекста
|
||||
- Объединение данных профиля и истории
|
||||
- Анализ текущей ситуации
|
||||
- Определение оптимального подхода
|
||||
|
||||
#### 5. Генерация персонализированного ответа
|
||||
- Учет персональных данных
|
||||
- Адаптация под стиль общения
|
||||
- Ссылки на предыдущие взаимодействия
|
||||
|
||||
---
|
||||
|
||||
## Этап 1. Проектирование и подготовка инфраструктуры
|
||||
1. **Проектирование схемы хранения знаний (RAG):**
|
||||
- Описать структуру таблицы `knowledge_documents` (миграция).
|
||||
@@ -69,7 +239,26 @@
|
||||
|
||||
---
|
||||
|
||||
## Этап 3. Интеграция RAG в pipeline ассистента
|
||||
## Этап 3. Разработка многоагентной архитектуры
|
||||
1. **Создание базовой структуры агентов:**
|
||||
- Реализовать главный AI-координатор
|
||||
- Создать базовые классы для специализированных агентов
|
||||
- Настроить систему координации между агентами
|
||||
2. **Разработка специализированных агентов:**
|
||||
- Агент "Персонализация пользователя"
|
||||
- Агент "Анализ запроса"
|
||||
- Агент "RAG поиск"
|
||||
- Агент "Контекст беседы"
|
||||
- Агент "Детализация"
|
||||
- Агент "Персонализация ответа"
|
||||
3. **Интеграция с существующей системой:**
|
||||
- Подключение агентов к текущему pipeline
|
||||
- Настройка логирования и мониторинга
|
||||
- Тестирование взаимодействия агентов
|
||||
|
||||
---
|
||||
|
||||
## Этап 4. Интеграция RAG в pipeline ассистента
|
||||
1. **Модификация логики ответа ассистента:**
|
||||
- При получении сообщения пользователя — искать релевантные знания и включать их в prompt LLM.
|
||||
- Обеспечить мультиязычность поиска и генерации ответа.
|
||||
@@ -78,7 +267,7 @@
|
||||
|
||||
---
|
||||
|
||||
## Этап 4. Интерфейс для админа
|
||||
## Этап 5. Интерфейс для админа
|
||||
1. **UI для управления знаниями:**
|
||||
- Добавить на фронте раздел для просмотра, добавления, редактирования и удаления знаний.
|
||||
2. **UI для модерации ответов ассистента:**
|
||||
@@ -87,7 +276,7 @@
|
||||
|
||||
---
|
||||
|
||||
## Этап 5. Поддержка мультимодальности и мультиязычности
|
||||
## Этап 6. Поддержка мультимодальности и мультиязычности
|
||||
1. **Обработка вложений (аудио, видео, картинки):**
|
||||
- Решить, как хранить и индексировать такие данные (например, хранить ссылки и метаданные, а не сами файлы).
|
||||
2. **Мультиязычный поиск и генерация:**
|
||||
@@ -95,7 +284,7 @@
|
||||
|
||||
---
|
||||
|
||||
## Этап 6. Тестирование и оптимизация
|
||||
## Этап 7. Тестирование и оптимизация
|
||||
1. **Покрытие тестами ключевых сценариев (unit, интеграционные).**
|
||||
2. **Оптимизация скорости поиска и генерации.**
|
||||
3. **Документация для команды.**
|
||||
|
||||
@@ -25,7 +25,8 @@ DLE.sol (Один контракт)
|
||||
├── Система голосования (проверка баланса токенов)
|
||||
├── Мультиподпись (через токен-холдеров)
|
||||
├── Модули (добавляемые через голосование)
|
||||
└── Мультичейн синхронизация
|
||||
├── Мультичейн синхронизация
|
||||
└── Полное управление данными DLE через кворум
|
||||
```
|
||||
|
||||
### Требования
|
||||
@@ -42,7 +43,7 @@ DLE.sol (Один контракт)
|
||||
- **Описание**: Процент от общего количества токенов для принятия решений
|
||||
- **Функции**:
|
||||
- Настройка кворума при создании DLE
|
||||
- Изменение кворума через голосование
|
||||
- **Изменение кворума через голосование** ✅
|
||||
- Расчет кворума: `(totalSupply * quorumPercentage) / 100`
|
||||
- Проверка достижения кворума для каждого решения
|
||||
|
||||
@@ -55,7 +56,21 @@ DLE.sol (Один контракт)
|
||||
- Выполнение предложений после достижения кворума
|
||||
- **НЕТ админских ролей - только коллективное управление**
|
||||
|
||||
#### 4. Мультиподпись через токен-холдеров
|
||||
#### 4. Полное управление данными DLE через кворум ✅
|
||||
- **Описание**: Все данные DLE можно изменить через систему голосования
|
||||
- **Функции**:
|
||||
- **Изменение названия DLE** через кворум
|
||||
- **Изменение символа токена** через кворум
|
||||
- **Изменение местонахождения** через кворум
|
||||
- **Изменение координат** через кворум
|
||||
- **Изменение юрисдикции** через кворум
|
||||
- **Изменение ОКТМО** через кворум
|
||||
- **Изменение КПП** через кворум
|
||||
- **Изменение кодов ОКВЭД** через кворум
|
||||
- **Изменение процента кворума** через кворум
|
||||
- **Изменение текущей цепочки** через кворум
|
||||
|
||||
#### 5. Мультиподпись через токен-холдеров
|
||||
- **Описание**: Система подписей для критических операций
|
||||
- **Функции**:
|
||||
- Подписание операций токен-холдерами
|
||||
@@ -63,7 +78,7 @@ DLE.sol (Один контракт)
|
||||
- Сбор подписей до достижения кворума
|
||||
- Выполнение операций после сбора подписей
|
||||
|
||||
#### 5. Казначейские функции
|
||||
#### 6. Казначейские функции
|
||||
- **Описание**: Управление финансами DLE через голосование
|
||||
- **Функции**:
|
||||
- Внесение токенов в казну
|
||||
@@ -71,7 +86,7 @@ DLE.sol (Один контракт)
|
||||
- Распределение дивидендов
|
||||
- Бюджетирование через предложения
|
||||
|
||||
#### 6. Модульная система
|
||||
#### 7. Модульная система
|
||||
- **Описание**: Добавление новых функций через модули
|
||||
- **Функции**:
|
||||
- Добавление модулей через голосование
|
||||
@@ -79,7 +94,7 @@ DLE.sol (Один контракт)
|
||||
- Изоляция модулей от основного контракта
|
||||
- Обновление модулей через голосование
|
||||
|
||||
#### 7. Коммуникационные функции
|
||||
#### 8. Коммуникационные функции
|
||||
- **Описание**: Прием сообщений и звонков
|
||||
- **Функции**:
|
||||
- Прием текстовых сообщений
|
||||
@@ -98,6 +113,114 @@ DLE может владеть токенами других DLE и участв
|
||||
3. Для участия в голосовании **DLE B** холдеры **DLE A** должны собрать **кворум мультиподписей** внутри **DLE A**
|
||||
4. После достижения кворума подписей **DLE A** может голосовать в **DLE B** как единое целое
|
||||
|
||||
### Новые возможности изменения данных DLE ✅
|
||||
|
||||
#### 1. Обновление основной информации DLE
|
||||
```solidity
|
||||
function _updateDLEInfo(
|
||||
string memory _name,
|
||||
string memory _symbol,
|
||||
string memory _location,
|
||||
string memory _coordinates,
|
||||
uint256 _jurisdiction,
|
||||
uint256 _oktmo,
|
||||
string[] memory _okvedCodes,
|
||||
uint256 _kpp
|
||||
) internal
|
||||
```
|
||||
|
||||
#### 2. Изменение процента кворума
|
||||
```solidity
|
||||
function _updateQuorumPercentage(uint256 _newQuorumPercentage) internal
|
||||
```
|
||||
|
||||
#### 3. Изменение текущей цепочки
|
||||
```solidity
|
||||
function _updateCurrentChainId(uint256 _newChainId) internal
|
||||
```
|
||||
|
||||
#### 4. События для отслеживания изменений
|
||||
```solidity
|
||||
event DLEInfoUpdated(string name, string symbol, string location, string coordinates, uint256 jurisdiction, uint256 oktmo, string[] okvedCodes, uint256 kpp);
|
||||
event QuorumPercentageUpdated(uint256 oldQuorumPercentage, uint256 newQuorumPercentage);
|
||||
event CurrentChainIdUpdated(uint256 oldChainId, uint256 newChainId);
|
||||
```
|
||||
|
||||
### Процесс изменения данных DLE
|
||||
|
||||
#### 1. Создание предложения
|
||||
- Любой токен-холдер создает предложение об изменении данных
|
||||
- Выбирает цепочку для сбора голосов
|
||||
- Указывает новые значения для изменения
|
||||
|
||||
#### 2. Голосование
|
||||
- Токен-холдеры голосуют за/против изменения
|
||||
- Голосующая сила = количество токенов
|
||||
- Проверка баланса при каждом голосе
|
||||
|
||||
#### 3. Исполнение
|
||||
- При достижении кворума предложение исполняется
|
||||
- Данные DLE обновляются
|
||||
- Событие эмитится для отслеживания
|
||||
|
||||
#### 4. Синхронизация
|
||||
- Изменения синхронизируются во все поддерживаемые цепочки
|
||||
- Merkle proofs обеспечивают безопасность cross-chain операций
|
||||
|
||||
### Примеры использования
|
||||
|
||||
#### Изменение названия DLE
|
||||
```
|
||||
1. Создание предложения: "Изменить название на 'Новое DLE'"
|
||||
2. Голосование в выбранной цепочке
|
||||
3. При кворуме: обновление названия
|
||||
4. Синхронизация во все цепочки
|
||||
```
|
||||
|
||||
#### Изменение кворума
|
||||
```
|
||||
1. Создание предложения: "Изменить кворум с 51% на 60%"
|
||||
2. Голосование в выбранной цепочке
|
||||
3. При кворуме: обновление процента кворума
|
||||
4. Синхронизация во все цепочки
|
||||
```
|
||||
|
||||
#### Изменение текущей цепочки
|
||||
```
|
||||
1. Создание предложения: "Изменить текущую цепочку на Polygon"
|
||||
2. Голосование в выбранной цепочке
|
||||
3. При кворуме: обновление currentChainId
|
||||
4. Синхронизация во все цепочки
|
||||
```
|
||||
|
||||
### Безопасность
|
||||
|
||||
#### Валидация данных
|
||||
- Проверка корректности всех входящих данных
|
||||
- Валидация адресов и числовых значений
|
||||
- Проверка поддержки цепочек перед изменением
|
||||
|
||||
#### Защита от злоупотреблений
|
||||
- Все изменения только через кворум
|
||||
- Проверка баланса токенов при голосовании
|
||||
- Merkle proofs для cross-chain безопасности
|
||||
|
||||
#### Аудит изменений
|
||||
- Все изменения логируются в событиях
|
||||
- Возможность отслеживания истории изменений
|
||||
- Прозрачность всех операций
|
||||
|
||||
### Иерархическая система голосования DLE
|
||||
|
||||
#### Концепция
|
||||
DLE может владеть токенами других DLE и участвовать в их голосовании через систему кворума подписей.
|
||||
|
||||
#### Механизм работы
|
||||
1. **DLE A** владеет токенами **DLE B**
|
||||
2. **Голос DLE A** в **DLE B** прямо пропорционален количеству токенов **DLE B** на балансе **DLE A**
|
||||
3. Для участия в голосовании **DLE B** холдеры **DLE A** должны собрать **кворум мультиподписей** внутри **DLE A**
|
||||
4. После достижения кворума подписей **DLE A** может голосовать в **DLE B** как единое целое
|
||||
|
||||
#### Пример
|
||||
- **DLE A** владеет **10% токенов DLE B**
|
||||
- Кворум в **DLE B** = **51%**
|
||||
|
||||
Reference in New Issue
Block a user