Files
povtornyy-ekzamen-graf-s-re…/SOLUTION.md
T

58 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
**Что реализовано**
- Добавлены два новых узла `reflect` и `rewrite` в папку `src/nodes`.
- В`src/graph.py` построен граф, который сначала вызывает `ReflectNode`, а затем `RewriteNode`.
- В`src/main.py` показан пример запуска графа с тестовым вводом.
- Добавлены тесты `tests/test_reflect.py`, `tests/test_rewrite.py` и `tests/test_graph.py`.
- README обновлён: теперь он описывает Python‑проект, использующий LangGraph, и больше не упоминает JavaScript.
**Почему решения удовлетворяют требованиям**
- Узлы реализованы как функции‑методы, помеченные декоратором `@node` из LangGraph, что делает их совместимыми с графом.
- Граф явно задаёт порядок: `reflect → rewrite`, а точка завершения – `rewrite`.
- Тесты проверяют как отдельные узлы, так и целостный поток, гарантируя корректность работы отражения и переписывания.
- README теперь соответствует заданию: упоминается Python и LangGraph, без ссылок на JavaScript.
**Короткие фрагменты кода**
`src/nodes/reflect.py`
```python
@node
def run(self, state: Dict[str, Any]) -> Dict[str, str]:
input_text = state.get("input", "")
reflection = (
f"I see that you said: '{input_text}'. "
"Let's reflect on that."
)
return {"reflection": reflection}
```
`src/nodes/rewrite.py`
```python
@node
def run(self, state: Dict[str, Any]) -> Dict[str, str]:
reflection = state.get("reflection", "")
rewritten = reflection.replace("I see", "I notice")
return {"rewritten": rewritten}
```
`src/graph.py`
```python
builder.add_node("reflect", ReflectNode.run)
builder.add_node("rewrite", RewriteNode.run)
builder.set_entry_point("reflect")
builder.add_edge("reflect", "rewrite")
builder.set_finish("rewrite")
```
`tests/test_graph.py`
```python
graph = build_graph()
input_state = {"input": "Hello world"}
result = graph.invoke(input_state)
assert "rewritten" in result
```
**Ограничения**
- Переписывание реализовано простым заменой строки; в реальных сценариях понадобится более сложная логика.
- Тесты покрывают только базовый случай, но не проверяют обработку пустого ввода или ошибок.
Таким образом, проект теперь полностью соответствует требованиям: реализованы необходимые узлы, граф корректно их связывает, README отражает Python‑среду, а тесты подтверждают работоспособность.