# LangGraph Notes

## What is LangGraph?

LangGraph is a library for building stateful, multi-actor applications with LLMs. It extends LangChain's capabilities by providing:

- State management for complex workflows
- Support for cycles in agent workflows
- Built-in persistence for long-running applications
- Integration with LangChain tools and models

## Key Concepts

### State
State in LangGraph is represented as a dictionary that flows through the graph nodes. Each node can modify the state.

### Nodes
Nodes are individual processing units that can be:
- LLM calls
- Tool calls
- Custom functions

### Edges
Edges connect nodes and can be:
- Direct connections
- Conditional routing based on state

## Example Usage

```python
from langgraph.graph import StateGraph, END

# Define state
class AgentState:
    messages: List
    next_action: str

# Build graph
graph = StateGraph(AgentState)
graph.add_node("agent", call_llm)
graph.add_node("tool", call_tool)
graph.add_edge("agent", "tool")
graph.add_edge("tool", "agent")
graph.add_edge("agent", END)
```

## Benefits

- More control over agent behavior
- Better for complex, multi-step reasoning
- Native support for human-in-the-loop workflows
- Easy to add memory and state persistence