Узлы, рёбра и состояние
Определите состояние TypedDict, напишите функции узлов, изменяющие его, и соедините узлы направленными рёбрами.
«Узлы, рёбра и состояние» — бесплатный урок AI Agents на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Объект состояния
У каждого агента LangGraph есть типизированное состояние — обычно TypedDict:
from typing import TypedDict
from typing_extensions import Annotated
import operator
class AgentState(TypedDict):
messages: Annotated[list, operator.add] # appends instead of replaces
plan: str
answer: strКак работают обновления состояния
Каждый узел возвращает частичный словарь. LangGraph:
- Считывает текущее состояние
- Вызывает узел с этим состоянием
- Объединяет возвращённый частичный словарь с исходным
Для полей-списков с operator.add новые элементы добавляются, а не заменяют существующие.
Defining a Node
def planner(state: AgentState) -> dict:
prompt = f'User wants: {state["messages"][-1].content}'
plan = llm.invoke(prompt).content
return {'plan': plan}Registering the Node
from langgraph.graph import StateGraph, END
graph = StateGraph(AgentState)
graph.add_node('planner', planner)Определение рёбер
Статические рёбра срабатывают безусловно:
graph.set_entry_point('planner')
graph.add_edge('planner', 'researcher')
graph.add_edge('researcher', 'writer')
graph.add_edge('writer', END)Условные рёбра
Для ветвления зарегистрируйте функцию, которая выбирает следующий узел:
def route(state: AgentState) -> str:
if state['needs_research']:
return 'researcher'
return 'writer'
graph.add_conditional_edges(
'planner',
route,
{'researcher': 'researcher', 'writer': 'writer'}
)END — особый узел
END — конечный узел. Любое ребро, ведущее к END, завершает граф и возвращает текущее состояние.
Compiling the Graph
app = graph.compile()
result = app.invoke({'messages': [...]})
print(result['answer'])Потоковая передача обновлений состояния
Наблюдайте за изменением состояния в реальном времени:
for event in app.stream({'messages': [...]}):
print(event)
# Each event is the state diff from the just-completed node.Функции-редукторы
Для сложного объединения состояния используйте собственный редуктор:
def merge_facts(old, new):
return {**old, **new}
class State(TypedDict):
facts: Annotated[dict, merge_facts]Подграфы
Узел сам может быть другим скомпилированным графом — это удобно для иерархических агентов:
subgraph = StateGraph(SubState).compile()
graph.add_node('subprocess', subgraph)Асинхронные узлы
Узлы могут быть асинхронными функциями:
async def fetch_node(state):
data = await fetch_async(state['url'])
return {'data': data}
result = await app.ainvoke({...})Ошибки в узлах
Если узел возбуждает исключение, LangGraph передаёт ошибку дальше и останавливается. Перехватывайте ошибку в узле, если нужна корректная обработка:
def safe_search(state):
try:
return {'results': search(state['query'])}
except Exception as e:
return {'error': str(e), 'results': []}Обновления состояния
Что происходит, когда узел возвращает словарь {'plan': '...'}?
Итоги
Определите состояние TypedDict, напишите функции, возвращающие частичные обновления, добавьте узлы и рёбра, скомпилируйте граф и запустите его. Так работает LangGraph.
Часто задаваемые вопросы
Урок «Узлы, рёбра и состояние» бесплатный?
Да — полный текст урока «Узлы, рёбра и состояние» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Узлы, рёбра и состояние»?
Определите состояние TypedDict, напишите функции узлов, изменяющие его, и соедините узлы направленными рёбрами. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Узлы, рёбра и состояние»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Почему графы лучше плоских цепочек
- Узлы, рёбра и состояние
- Условная маршрутизация и ветвление
- Сохранение состояния графа (контрольные точки)