63 lines
2.1 KiB
Markdown
63 lines
2.1 KiB
Markdown
# 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 # максимум раундов доработки
|
|
```
|