Update README.md

This commit is contained in:
2026-06-03 12:44:40 +00:00
parent 1d27b02481
commit df8fc357f0
+43 -46
View File
@@ -1,64 +1,61 @@
# SelfCorrecting LangGraph Agent
This repository contains a minimal example of a **selfcorrecting agent** built with
[LangGraph](https://langchain-ai.github.io/langgraph/) and
[LangChain](https://langchain.com/). The agent:
## Overview
1. **Receives a naturallanguage task** from the user.
2. **Executes the task** via an *unreliable* tool that fails 30% of the time.
3. **Asks an LLM** (OpenAI GPT4omini) to judge whether the result is correct.
4. **Retries automatically** until the judge says *success* or the maximum number
of attempts is reached.
This project implements a **selfcorrecting agent** using LangGraph. The agent
performs a task, asks an LLM to judge the result, and retries automatically until
the result is judged **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.
The key components are:
## Setup
| Component | Purpose |
|-----------|---------|
| `AgentState` | Typed state that tracks the task, result, attempts, status, error and max_attempts |
| `unreliable_tool` | Simulates a tool that fails 30% of the time (used to demonstrate retry logic) |
| `verify_result` | LLM judge that must reply with the single word `success` or `failed` |
| `handle_error` | Resets the error and sets the status back to `pending` for a retry |
| `execute_task` | Runs the unreliable tool and updates the state |
| `create_agent` | Builds the LangGraph with the above nodes and a retry loop |
| `create_agent_executor` | Compiles the graph into a runnable executor |
| CLI | Run the agent from the command line: `python agent.py "2+2" --max 5` |
## How It Works
1. **Start** The graph begins at `execute_task`.
2. **Execute** The tool runs. If it throws an exception, the state status becomes `failed`.
3. **Check attempts** If the number of attempts is >= `max_attempts`, the graph ends with status `max_attempts`.
4. **Verify** The LLM judges the result. If the verdict is `success`, the graph ends. If `failed`, it goes to `handle_error`.
5. **Retry** `handle_error` clears the error and sets status to `pending`, then the graph loops back to `execute_task`.
## Usage
```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
# Run the agent
python agent.py "2+2" --max 5
```
## 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
The console will show the final state, e.g.:
```
Введите задачу: 2+2
Попытка 1: результат Result of 2+2
Попытка 2: результат Result of 2+2
--- Final State ---
result: 4
attempts: 2
status: success
error: None
max_attempts: 5
```
Итог:
Успех за 2 попыток. Результат: Result of 2+2
## Requirements
```text
langchain>=1.0.0
langgraph>=1.0.0
langchain-openai>=1.0.0
```
The exact number of attempts may vary because the tool fails randomly.
## Note
---
### 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.
The agent uses the OpenAI API. Make sure the environment variable `OPENAI_API_KEY` is set.