Files
HadTavern/PROJECT_OVERVIEW.md
2025-09-07 22:33:51 +03:00

5.7 KiB
Raw Blame History

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.
      • Автоопределение провайдера.
    • ProviderCallNode:
      • Унифицированный вызов LLMпровайдеров.
      • Преобразует внутренний формат сообщений в специфический формат для OpenAI, Gemini, Anthropic.
      • Поддерживает параметры temperature, max_tokens, top_p, stop (или аналоги).
  • Поддержка макросов:
    • {{ 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).

Важные файлы