From 8102b96bdbd63ef9c33ba3739e5c8008d68c43b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B8=D1=80=D0=B8=D0=BB=D0=BB=20=D0=9A=D1=83=D1=82?= =?UTF-8?q?=D0=BB=D0=B0=D1=85=D0=BC=D0=B5=D1=82=D0=BE=D0=B2?= Date: Thu, 4 Jun 2026 16:16:22 +0000 Subject: [PATCH] add README.md --- README.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d347ed6..6399e05 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,62 @@ -# task-6a219d2dfd30e81cf3146bae +# 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 # максимум раундов доработки +```