← Query Engine

Стек и структура

query engine · workzone
Backend
стек — библиотеки
Фреймворк / стриминг
FastAPI StreamingResponse · SSE Pydantic v2
chat-client · tool-calling RRF-rerank ← KS → Knowledge Store
Хранилище диалога → Модель данных
SQLAlchemy 2.0 · async asyncpg Alembic Redis · точный кэш → Cache & Workers
структура — файлы · achilles/query_engine/
query_engine/      модуль = отдельный пакет
├── *.py           service (оркестратор + SSE) · models · schemas · constants
├── routes/        HTTP-поверхность: conversations · feedback · chat/models
├── rag/           тело search_knowledge: cache_gate → retrieve → augment · citations
└── conversation/  хранилище диалога (store поверх ORM) + бюджет окна (budget)
Почему rag/ отдельной папкой
Маршрут поиска — самостоятельный слой поверх сервиса: вызов примитивов KS как инструмента search_knowledge, сборка контекста и стриминг grounding-генерации. Сами примитивы поиска и их слияние — в Knowledge Store, не здесь.
Frontend
Своего фронтенда у Query Engine нет. UI диалога и ответа рендерят surface'ы (Web App · Slack · Telegram · Mattermost · Extension · MCP) как тонкие клиенты единого API: один SSE-поток ответа, одна схема диалога на всех. Стек и чат-оболочку (assistant-ui) каждый surface ведёт у себя — у веба это Web App. Сессии и surface'ы →
Tool-calling харнесс — общий слой, не наш. Chat-client с инструментом под движком — один на платформу, общий с Agent Engine; дом вынесен отдельной страницей Tool-calling харнесс. Query Engine берёт вырожденную параметризацию — один инструмент search_knowledge и один вызов без петли.