Skip to content

Core — Поток данных

Жизненный цикл запроса

1. Приложение вызывает:
   dispatcher.process("chat", text="Привет!")

2. LLMDispatcher ищет билдер:
   builder = self._builders["chat"]  # зарегистрирован через @router.prompt

3. Билдер строит PromptResult:
   prompt = await builder(text="Привет!")
   # → PromptResult(messages=[LLMMessage(role="user", content="Привет!")])

4. Диспетчер вызывает провайдер:
   response = await self._provider.answer(prompt, **kw)

5. Провайдер возвращает текст:
   "Привет! Чем могу помочь?"

Взаимодействие компонентов

Приложение
    │
    ▼
LLMDispatcher.process(mode, **kw)
    │
    ├── LLMRouter.builders[mode] ──► PromptBuilder(**kw)
    │                                       │
    │                               PromptResult (frozen)
    │                                       │
    └── LLMProviderProtocol.answer(prompt) ◄┘
                │
                ▼
           Ответ: str

Поля PromptResult

Поле Тип Описание
messages list[LLMMessage] Упорядоченная история сообщений
system str Системная инструкция (опционально)
model str \| None Переопределение модели для запроса
temperature float \| None Температура сэмплинга
max_tokens int \| None Лимит токенов