# LangGraph с узлом рефлексии LangGraph‑агент, который пишет ответ на вопрос, затем отдельным LLM‑критиком оценивает качество (полнота, конкретика, отсутствие воды). При вердикте `needs_revision` узел rewrite улучшает текст (до `max_rounds` раз). ## Стек | Компонент | Технология | |-----------|------------| | LLM | BroJS gpt-oss-20b | | Граф | LangGraph StateGraph | | Состояние | ReflectState (TypedDict) | ## Установка ```bash pip install -r requirements.txt ``` Добавь в `.env`: ``` JOURNAL_MCP_PAT=твой_токен ``` ## Запуск ```bash python main.py ``` ## Структура проекта | Файл | Назначение | |------|------------| | `graph.py` | Узлы draft_answer, reflect, rewrite и сборка графа | | `main.py` | Точка входа, три демо‑примера | | `requirements.txt` | Зависимости | ## Архитектура графа ``` START -> draft_answer -> reflect | ok ----------+-------> END needs_revision & round < max_rounds -> rewrite -> reflect needs_revision & round >= max_rounds -> END ``` ### Узлы - **draft_answer** — первичный ответ на вопрос (5‑10 предложений) - **reflect** — LLM‑критик: вердикт `ok` / `needs_revision` + замечания в `critique` - **rewrite** — учитывает замечания, обновляет `draft`, увеличивает `round` ### Состояние ReflectState ```python class ReflectState(TypedDict): question: str # исходный вопрос draft: str # текущий вариант ответа critique: str # замечания критика verdict: str # ok | needs_revision round: int # текущий раунд (0 = первый черновик) max_rounds: int # максимум раундов доработки ```