Files

132 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HumanintheLoop Middleware Demo
A minimal Python project that demonstrates how to add a **HumanintheLoop (HITL)** experience to a LangChain agent using the builtin `HumanInTheLoopMiddleware`.
When the agent is about to invoke an external tool, it pauses and asks for user approval (`approve` or `reject`) before continuing.
> **Why use middleware?**
> Unlike the older `interrupt_before=['tools']` approach, the middleware automatically builds the confirmation prompt, handles the response, and resumes execution via a `Command(resume={…})`. This keeps your agent logic clean and declarative.
---
## 📦 Project Structure
```
├── agent.py # Agent definition + HITL middleware
├── client.py # Simple CLI that runs the agent
├── requirements.txt
└── README.md
```
- `agent.py` creates a LangChain agent with a single tool (`get_weather`) and attaches the HITL middleware.
- `client.py` launches the agent in an interactive loop.
---
## ⚙️ Prerequisites
| Component | Minimum Version | Notes |
|-----------|-----------------|-------|
| Python | 3.11+ | Tested on 3.12 |
| Ollama | latest | Local LLM (e.g., `llama3`) |
| LangChain | 0.2.x or newer | Provides agents & middleware |
| LangGraph | 0.1.x or newer | For checkpointing (optional) |
> **Ollama** must be running locally and the model (`llama3` in this repo) should be pulled beforehand:
> ```bash
> ollama pull llama3
> ```
---
## 📦 Installation
```bash
# Clone the repository
git clone https://github.com/your-username/hitl-middleware-demo.git
cd hitl-middleware-demo
# Create a virtual environment (recommended)
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
```
`requirements.txt` contains:
```text
langchain==0.2.*
langgraph==0.1.*
langchain-ollama==0.2.*
```
---
## 🚀 Running the Project
### 1️⃣ Start the Agent (CLI)
```bash
python client.py
```
You will see a prompt like:
```
Agent: What would you like to know?
> Tell me the weather in Paris tomorrow.
...
[HITL] The agent wants to call tool `get_weather` with arguments:
{
"city": "Paris",
"date": "2024-06-01"
}
Approve? (approve/reject):
```
Type **`approve`** or **`reject`** and press Enter.
If approved, the tool runs; if rejected, the agent will rethink.
### 2️⃣ Run a Single File Directly
You can also run each file individually:
```bash
# Agent definition (no output)
python agent.py
# Client that uses the agent
python client.py
```
---
## 🔍 Example Interaction
```
Agent: Tell me the weather in Tokyo tomorrow.
[HITL] The agent wants to call tool `get_weather` with arguments:
{
"city": "Tokyo",
"date": "2024-06-01"
}
Approve? (approve/reject): approve
Tool output: "Tomorrow in Tokyo, expect a high of 28°C and light showers."
Agent: The weather in Tokyo tomorrow will be around 28°C with light showers.
```
If you type `reject`, the agent will ask for clarification or try a different approach.
---
## 📚 Further Reading
- [HumanintheLoop — LangChain](https://docs.langchain.com/docs/middleware/human_in_the_loop)
- [LangGraph Checkpoints](https://langgraph.org/docs/checkpointing)
Feel free to extend the toolset or replace `ChatOllama` with an OpenAI model by swapping imports.
---
Happy hacking! 🚀