5.7 KiB
5.7 KiB
AgentUI Project Overview
Цель проекта
AgentUI — это прокси‑сервер с визуальным редактором пайплайнов (на базе Drawflow), который нормализует запросы от различных клиентов в единый формат и выполняет их через цепочку узлов (nodes). Это позволяет гибко собирать пайплайны обработки текстовых/LLM‑запросов без необходимости вручную интегрировать каждый провайдер.
Основные компоненты
Фронтенд: Визуальный редактор
- Построен на Drawflow.
- Поддерживает узлы, входы/выходы и соединения.
- Реализована надёжная сериализация/десериализация:
toPipelineJSON()сохраняет структуру + все соединения.fromPipelineJSON()восстанавливает узлы и соединения с учётом времени рендера DOM (retry‑логика).
- Исправлены баги исчезающих соединений.
- В инспекторе узлов отображается оригинальный ID узла, а не runtime ID от Drawflow.
- UI подсказки: макрохинты в синтаксисе
[[...]](например[[VAR:system.prompt]],[[OUT:node1.text]]).
Бэкенд: Исполнение пайплайна
- Основной код:
agentui/pipeline/executor.py. - Выполняется топологическая сортировка графа для правильного порядка исполнения и предотвращения циклов.
- Узлы:
- RawForwardNode:
- Прямой HTTP‑форвардинг с макросами в
base_url,override_path,headers. - Автоопределение провайдера.
- Прямой HTTP‑форвардинг с макросами в
- ProviderCallNode:
- Унифицированный вызов LLM‑провайдеров.
- Преобразует внутренний формат сообщений в специфический формат для OpenAI, Gemini, Anthropic.
- Поддерживает параметры
temperature,max_tokens,top_p,stop(или аналоги).
- RawForwardNode:
- Поддержка макросов:
{{ path }}— Jinja‑подобный.[[VAR:...]]— доступ к данным контекста (system, chat, params).[[OUT:nodeId(.attr)]]— ссылки на вывод других узлов.{{ OUT.node.* }}— альтернативная форма.
API сервер (agentui/api/server.py)
- Нормализует запросы под форматы
/v1/chat/completions, Gemini, Anthropic. - Формирует контекст макросов (vendor, model, params, incoming).
Текущий прогресс
- Исправлены баги сериализации соединений во фронтенде.
- Добавлены подсказки по макросам.
- Реализована топологическая сортировка исполнения.
- Создан универсальный рендер макросов
render_template_simple. - Интегрирован RawForward с макроподстановкой.
- ProviderCall теперь преобразует сообщения под формат конкретного провайдера.
Текущая задача (для нового разработчика)
В проекте мы начинаем реализацию Prompt Manager, который станет частью узла ProviderCall.
Что уже решено:
- Архитектура пайплайна, сериализация/десериализация, макросная система, базовые конвертеры форматов.
Что нужно сделать:
- Спроектировать структуру prompt‑менеджера: массив блоков
{ name, role, prompt, enabled, order }. - Добавить универсальный рендер макросов, который применяется ко всем блокам перед конвертацией.
- Доработать конвертеры форматов под OpenAI, Gemini, Anthropic, чтобы они учитывали эти блоки.
- Интегрировать prompt‑менеджер в
ProviderCallNode:- Сборка последовательности сообщений.
- Подстановка макросов.
- Конвертация в провайдерский формат.
- Реализовать UI prompt‑менеджера во фронтенде:
- CRUD операций над блоками.
- Drag&Drop сортировку.
- Возможность включать/выключать блок.
- Выбор роли (
user,system,assistant,tool).
Важные файлы
static/editor.html— визуальный редактор пайплайнов.agentui/pipeline/executor.py— логика исполнения пайплайнов, макросов и узлов.agentui/api/server.py— REST API для внешних клиентов.pipeline.json— сохранённый пайплайн по умолчанию.