Перейти к содержанию

Как собрать бэкенд

Редактор рисует граф, проверяет его и отлаживает — но не исполняет ничего. За всем, чего он не умеет сам, он идёт на бэкенд, и бэкенд этот ваш: что пайплайн вообще может сделать в вашем продукте, знает только ваш код.

Дело тут не в том, как удобнее разложить файлы. Семантика исполнения — CEL, фрейм, try/except, parallel, бюджет — живёт в ядре. Вторая её реализация на JavaScript означала бы, что отладчик показывает не то, что произойдёт на самом деле. Поэтому реализация одна, редактор — всего лишь её клиент, а между ними — HTTP-контракт из семи эндпоинтов.

Здесь мы такой бэкенд и соберём. Это тот самый пример из README этого репозитория, разобранный в том порядке, в каком его писали: бот поддержки, который берёт готовый тикет, ищет ответ в базе знаний и либо отвечает сам, либо отдаёт тикет человеку.

Пятый пайплайн бота на прогоне

Шаги

Шаг Что добавляем На какой вопрос отвечает
1. Ваши стадии register_stage, спеки, события что пайплайн здесь вообще умеет
2. Эндпоинты FastAPI, настоящая Session, SSE как редактор до этого доберётся
3. Что разрешено собирать своя Policy для каждого вызова что сможет нарисовать тот, кому вы не полностью доверяете
4. Во что обходится прогон reserve: и charge() сколько ему разрешено израсходовать
5. Чей это запрос тарифы и ключ доступа к кому что из перечисленного относится

Первых двух шагов достаточно, чтобы поднять свой бэкенд. Последние три превращают его в площадку, где пайплайны может собирать кто-то ещё, — и прочитать их стоит, даже если второго клиента у вас никогда не будет. У фразы «реестр стадий глобальный» есть последствия.

Что понадобится

pip install "stageflow-framework>=0.12" fastapi uvicorn

Если хочется сразу пощупать готовое:

git clone https://github.com/leo-need-more-coffee/stageflow-example
cd stageflow-example && pip install -r requirements.txt && python main.py

и редактор на leo-need-more-coffee.github.io/stageflow-ui, с адресом http://127.0.0.1:8765 в настройках подключения. Все скриншоты дальше сняты именно с этой пары, запущенной локально.