182 lines
4.8 KiB
Markdown
182 lines
4.8 KiB
Markdown
# Тестирование LangGraph Streaming
|
||
|
||
Эти скрипты помогут проверить, как работает стриминг событий из LangGraph.
|
||
|
||
## Скрипты
|
||
|
||
### 1. `test_simple_graph.py` - Простой тест (БЕЗ БД)
|
||
|
||
**Рекомендуется запустить ПЕРВЫМ** для понимания как работает стриминг.
|
||
|
||
Тестирует простой граф с 3 нодами без реального review.
|
||
|
||
```bash
|
||
# Активировать venv
|
||
cd backend
|
||
source venv/Scripts/activate # Windows Git Bash
|
||
# или
|
||
source venv/bin/activate # Linux/Mac
|
||
|
||
# Запустить
|
||
python ../test_simple_graph.py
|
||
```
|
||
|
||
**Что тестирует:**
|
||
- ✅ `stream_mode=['updates']` - обновления нод
|
||
- ✅ `stream_mode=['messages']` - сообщения (LLM calls)
|
||
- ✅ `stream_mode=['updates', 'messages']` - оба режима
|
||
- ✅ `stream_mode=['values']` - значения состояния
|
||
- ✅ `stream_mode=['debug']` - режим отладки
|
||
- ✅ Callback обработка событий
|
||
|
||
**Ожидаемый результат:**
|
||
Должны появиться события для каждой ноды (node_1, node_2, node_3).
|
||
|
||
---
|
||
|
||
### 2. `test_langgraph_events.py` - Полный тест (С БД)
|
||
|
||
Тестирует реальный ReviewerAgent с настоящими данными из БД.
|
||
|
||
⚠️ **Требует:**
|
||
- Работающую БД с данными
|
||
- Существующий Review ID, PR Number, Repository ID
|
||
- Настроенный `.env` файл
|
||
|
||
```bash
|
||
# Активировать venv
|
||
cd backend
|
||
source venv/Scripts/activate # Windows
|
||
# или
|
||
source venv/bin/activate # Linux/Mac
|
||
|
||
# Запустить
|
||
python ../test_langgraph_events.py
|
||
```
|
||
|
||
**Перед запуском:**
|
||
Отредактируйте в файле `test_langgraph_events.py`:
|
||
|
||
```python
|
||
TEST_REVIEW_ID = 1 # ID существующего review
|
||
TEST_PR_NUMBER = 5 # Номер PR
|
||
TEST_REPOSITORY_ID = 1 # ID репозитория
|
||
```
|
||
|
||
**Что тестирует:**
|
||
- ✅ Полный цикл review с callback
|
||
- ✅ RAW стриминг напрямую из графа
|
||
- ✅ Все режимы: `updates`, `messages`, `updates + messages`
|
||
|
||
---
|
||
|
||
## Запуск локально (быстрый старт)
|
||
|
||
### Шаг 1: Простой тест
|
||
```bash
|
||
cd backend
|
||
source venv/Scripts/activate
|
||
python ../test_simple_graph.py
|
||
```
|
||
|
||
Смотрите вывод - должны быть события от каждой ноды.
|
||
|
||
### Шаг 2: Проверка формата событий
|
||
|
||
Обратите внимание на **тип** и **структуру** событий:
|
||
|
||
```
|
||
📨 Event #1
|
||
Type: <class 'dict'>
|
||
Keys: ['node_1']
|
||
Content: {'node_1': {...}}
|
||
```
|
||
|
||
или
|
||
|
||
```
|
||
📨 Event #1
|
||
Type: <class 'tuple'>
|
||
Tuple[0]: 'messages'
|
||
Tuple[1]: [AIMessage(...)]
|
||
```
|
||
|
||
### Шаг 3: Полный тест (если нужно)
|
||
|
||
Отредактируйте параметры в `test_langgraph_events.py` и запустите:
|
||
|
||
```bash
|
||
python ../test_langgraph_events.py
|
||
```
|
||
|
||
---
|
||
|
||
## Что искать в выводе
|
||
|
||
### ✅ ХОРОШО:
|
||
|
||
```
|
||
📨 Event #1
|
||
Type: <class 'dict'>
|
||
Content: {'node_1': {...}}
|
||
|
||
📨 Event #2
|
||
Type: <class 'dict'>
|
||
Content: {'node_2': {...}}
|
||
```
|
||
|
||
**События приходят!** Граф работает.
|
||
|
||
### ❌ ПЛОХО:
|
||
|
||
```
|
||
✅ Получено событий: 0
|
||
```
|
||
|
||
**События НЕ приходят!** Проблема с графом или версией LangGraph.
|
||
|
||
---
|
||
|
||
## Отладка
|
||
|
||
Если события не приходят:
|
||
|
||
1. **Проверьте версию LangGraph:**
|
||
```bash
|
||
pip show langgraph
|
||
```
|
||
Должна быть >= 0.1.0
|
||
|
||
2. **Проверьте, что граф компилируется:**
|
||
```python
|
||
graph = workflow.compile()
|
||
print(graph) # Должен вывести информацию о графе
|
||
```
|
||
|
||
3. **Попробуйте `ainvoke` вместо `astream`:**
|
||
```python
|
||
result = await graph.ainvoke(initial_state)
|
||
print(result) # Должен вернуть финальное состояние
|
||
```
|
||
|
||
4. **Проверьте логи:**
|
||
Включите DEBUG логирование:
|
||
```python
|
||
import logging
|
||
logging.basicConfig(level=logging.DEBUG)
|
||
```
|
||
|
||
---
|
||
|
||
## Результаты
|
||
|
||
После запуска тестов вы узнаете:
|
||
|
||
1. ✅ **Работает ли стриминг вообще?**
|
||
2. ✅ **Какой формат у событий?**
|
||
3. ✅ **Какие режимы стриминга поддерживаются?**
|
||
4. ✅ **Как правильно обрабатывать события?**
|
||
|
||
Это поможет понять, почему события не доходят до фронтенда.
|
||
|