Добавлен README.md
This commit is contained in:
@@ -1,3 +1,119 @@
|
||||
# human-in-the-loop-cherez-middleware
|
||||
# Human‑in‑the‑Loop Middleware Demo
|
||||
|
||||
Решение: Human-in-the-Loop через middleware
|
||||
This repository contains a minimal **LangChain** agent that demonstrates how to pause execution at every tool call and ask the user for approval or rejection before continuing.
|
||||
The core of this behaviour is provided by `HumanInTheLoopMiddleware`, which automatically injects a confirmation step into the agent’s workflow.
|
||||
|
||||
> ⚠️ The example uses the open‑source **Ollama** LLM backend.
|
||||
> If you don’t have Ollama installed, follow the instructions in the *Prerequisites* section.
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Description](#description)
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Installation](#installation)
|
||||
- [Running the Demo](#running-the-demo)
|
||||
- [Example Interaction](#example-interaction)
|
||||
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
`solution.py` implements a LangChain agent that:
|
||||
|
||||
1. **Creates** an LLM chain using `ChatOllama`.
|
||||
2. **Wraps** it with a `MemorySaver` checkpoint for state persistence.
|
||||
3. **Adds** the `HumanInTheLoopMiddleware`, which:
|
||||
- Intercepts every tool call,
|
||||
- Prints the intended action to the terminal (via `rich`),
|
||||
- Prompts the user for `"approve"` or `"reject"`,
|
||||
- Resumes execution based on the response.
|
||||
|
||||
This pattern is useful when you want a human operator to supervise or validate each step of an automated workflow, without having to manually interrupt the agent.
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
| Item | Version | Notes |
|
||||
|------|---------|-------|
|
||||
| Python | ≥ 3.10 | Tested with 3.11 |
|
||||
| pip | – | Standard package installer |
|
||||
| **Ollama** | Latest | Install from https://ollama.ai/ and run `ollama serve` before starting the demo. |
|
||||
| **OpenAI‑compatible model** | e.g., `llama2:7b` | Pull via `ollama pull llama2:7b`. |
|
||||
|
||||
> **Tip:** If you prefer a different LLM, replace `ChatOllama` with any LangChain-compatible LLM (e.g., OpenAI, Anthropic).
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# 1. Clone the repo
|
||||
git clone https://github.com/your-username/human-in-the-loop-demo.git
|
||||
cd human-in-the-loop-demo
|
||||
|
||||
# 2. Create a virtual environment (optional but recommended)
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # On Windows: .\.venv\Scripts\activate
|
||||
|
||||
# 3. Install dependencies
|
||||
pip install --upgrade pip
|
||||
pip install langchain langgraph langchain-ollama rich
|
||||
```
|
||||
|
||||
> **Note:**
|
||||
> `langgraph` is required for the checkpointing and middleware support.
|
||||
|
||||
---
|
||||
|
||||
## Running the Demo
|
||||
|
||||
```bash
|
||||
# Make sure Ollama server is running:
|
||||
# ollama serve
|
||||
|
||||
# Run the agent script
|
||||
python solution.py
|
||||
```
|
||||
|
||||
You will be prompted to enter a question. The agent will then:
|
||||
|
||||
1. Generate a plan.
|
||||
2. For each tool call, pause and display the intended action.
|
||||
3. Await your `"approve"` or `"reject"` input before proceeding.
|
||||
|
||||
---
|
||||
|
||||
## Example Interaction
|
||||
|
||||
```text
|
||||
$ python solution.py
|
||||
Enter your question: What is the capital of France?
|
||||
|
||||
[Agent] Thinking...
|
||||
[HumanInTheLoopMiddleware] Tool call planned: "search" with query "capital of France"
|
||||
Approve? (yes/no): yes
|
||||
|
||||
[Agent] Executing tool...
|
||||
Result: Paris
|
||||
|
||||
[Agent] Continuing...
|
||||
|
||||
Final answer: The capital of France is Paris.
|
||||
```
|
||||
|
||||
If you type `no` instead of `yes`, the agent will skip that tool call and attempt to continue with its plan, potentially leading to a different outcome.
|
||||
|
||||
---
|
||||
|
||||
## Customization
|
||||
|
||||
- **Different tools** – Add more tools via `@tool` decorators or by passing a list to `create_agent`.
|
||||
- **Custom prompt** – Modify the middleware’s confirmation message by subclassing `HumanInTheLoopMiddleware`.
|
||||
- **Persist state** – The `MemorySaver` checkpoint can be swapped for a database-backed store if you need long‑term persistence.
|
||||
|
||||
---
|
||||
|
||||
Happy experimenting! 🚀
|
||||
Reference in New Issue
Block a user