65 lines
1.9 KiB
Markdown
65 lines
1.9 KiB
Markdown
# Self‑Correcting LangGraph Agent
|
||
|
||
This repository contains a minimal example of a **self‑correcting agent** built with
|
||
[LangGraph](https://langchain-ai.github.io/langgraph/) and
|
||
[LangChain](https://langchain.com/). The agent:
|
||
|
||
1. **Receives a natural‑language task** from the user.
|
||
2. **Executes the task** via an *unreliable* tool that fails 30 % of the time.
|
||
3. **Asks an LLM** (OpenAI GPT‑4o‑mini) to judge whether the result is correct.
|
||
4. **Retries automatically** until the judge says *success* or the maximum number
|
||
of attempts is reached.
|
||
|
||
The code demonstrates how to build a small state machine with LangGraph, how to
|
||
use a LLM as a *judge*, and how to implement retry logic.
|
||
|
||
## Setup
|
||
|
||
```bash
|
||
# Optional: create a virtual environment
|
||
python -m venv venv
|
||
source venv/bin/activate # Windows: venv\Scripts\activate
|
||
|
||
# Install dependencies
|
||
pip install -r requirements.txt
|
||
|
||
# Set your OpenAI API key
|
||
export OPENAI_API_KEY=YOUR_KEY # Windows: set OPENAI_API_KEY=YOUR_KEY
|
||
```
|
||
|
||
## Running the agent
|
||
|
||
```bash
|
||
python agent.py "Вычисли 2+2"
|
||
```
|
||
|
||
You can also run the script without arguments – it will prompt you for a task.
|
||
|
||
## Example output
|
||
|
||
```
|
||
Введите задачу: 2+2
|
||
Попытка 1: результат Result of 2+2
|
||
Попытка 2: результат Result of 2+2
|
||
|
||
Итог:
|
||
Успех за 2 попыток. Результат: Result of 2+2
|
||
```
|
||
|
||
The exact number of attempts may vary because the tool fails randomly.
|
||
|
||
---
|
||
|
||
### How it works
|
||
|
||
- **State** – `AgentState` tracks the task, result, number of attempts, status and
|
||
any error.
|
||
- **Nodes** – `execute_task`, `verify_result`, `handle_error`.
|
||
- **LLM judge** – a simple prompt that forces the model to answer only
|
||
"success" or "failed".
|
||
- **Graph** – a conditional router that loops back to `execute_task` on failure
|
||
until the maximum attempts are reached.
|
||
|
||
Feel free to adapt the tool, the judge prompt, or the retry policy to fit your
|
||
needs.
|