llm-agent-backend/docs/tech_assignment/TechSpecification.md
2026-06-06 19:29:23 +03:00

119 lines
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## ТЗ: Интерактивный Агент с LLM и Визуализацией Графа Диалогов
**Цель:** Создать десктопное приложение-агента, позволяющее взаимодействовать с внешними LLM (Gemini, Mistral) через API, выполнять сложные действия по слеш-командам и визуализировать историю диалогов в виде графа.
**1. LLM:**
* Использовать только внешние модели: Gemini (через LangChain), Mistral (через HTTP API).
* Заглушка для Ollama (пустой словарь `LOCAL_MODELS`).
**2. Веб-интерфейс (React):**
* Три панели:
* История диалогов (различные графы запросов), по умолчанию слева.
* Визуализация активного графа сообщений (React Flow + Dagre), по умолчанию по центру.
* Чат с выбранной веткой активного графа, по умолчанию справа.
* Активный чат = выбранный лист графа.
* Клик по ноду = показ сообщений от корня до нода.
* Разные цвета для нодов пользователя и LLM.
**3. Хранение:**
* Бэкенд хранит историю графов запросов.
* IndexedDB (dexie.js или idb) для временного хранения активного графа на фронтенде (опционально).
**4. Суммаризация истории:**
* Комбинация: последние N сообщений + суммаризация старой истории через LLM (Gemini).
**5. Анализ изображений:**
* Gemini Vision API, заглушка для расширения.
**6. Платформы субтитров:**
* Google Meet и Microsoft Teams: возможность получения текущих, не финальных субтитров (API или polling/webhook).
**7. Генерация изображений:**
* Вызов удаленного эндпоинта bingart.
Эндпоинт генерации изображений
* **URL:** `<URL_удаленного_ресурса>/generate-images`
* **Метод:** GET или POST.
* **Параметры:**
* `prompt` (строка): Текст запроса для генерации изображения. Передается либо как query parameter в GET-запросе, либо как form data в POST-запросе.
* **Результат (JSON):**
* `image_urls` (массив строк): Список URL сгенерированных изображений (до 4 штук).
* `error` (строка, опционально): Сообщение об ошибке, если генерация не удалась.
Пример успешного ответа:
```json
{
"image_urls": [
"url1",
"url2",
"url3",
"url4"
]
}
```
**Пример ответа с ошибкой:**
```json
{
"error": "Не удалось получить изображения."
}
```
**8. Команды:**
* Слеш-команды (`/`) с автодополнением (React Autosuggest).
* Команды хранятся в базе данных на бэкенде.
* Запуск workflow через LangGraph.
**9. LangGraph:**
* Оркестрация сложных workflow по слеш-командам.
* Узлы: генерация, LLM, анализ изображений, субтитры, управление состоянием.
**10. Реализация:**
* **Frontend:** React, React Flow, Dagre, React Autosuggest.
* **Backend:** API для LLM, субтитров, bingart, LangGraph, база данных (хранение истории графов).
**11. Язык:**
* Русский.
**Типичный workflow:**
1. Пользователь вводит `/команда`.
2. Frontend отправляет запрос на бэкенд.
3. Бэкенд запускает LangGraph workflow, соответствующий команде:
* Подставляет релевантный команде промпт (если необходимо).
* Вызывает LLM (Gemini или Mistral).
* Анализирует изображения (если необходимо).
* Запрашивает текущие субтитры (если необходимо в рамках команды, это одна из команд).
* Запрашивает генерацию изображений на удалённом эндпоинте и ждёт ответа.
* Обрабатывает результаты и формирует ответ.
4. Бэкенд сохраняет новый граф запроса в базе данных (или обновляет существующий).
5. Бэкенд отправляет данные активного графа на фронтенд.
6. Frontend отображает граф и чат.
**Приоритеты:**
1. Базовая функциональность чата с Gemini/Mistral и визуализацией графа.
2. Реализация слеш-команд через LangGraph.
3. Интеграция с Google Meet/MS Teams (получение текущих субтитров).
**Использовать:**
* React Flow (с примерами Dagre).
* LangGraph.
* dexie.js или idb (опционально, для временного хранения на фронтенде).
* React Autosuggest.