You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
6.0 KiB
Markdown
158 lines
6.0 KiB
Markdown
# Human-in-the-Loop: Deep Agents Pattern with Follow-up
|
|
|
|
This example demonstrates the **Deep Agents** multi-agent pattern combined with the **Follow-up** human-in-the-loop pattern.
|
|
|
|
It showcases how to build a deep reasoning agent system that proactively asks clarifying questions when user requirements are ambiguous, ensuring accurate and personalized analysis results.
|
|
|
|
## How It Works
|
|
|
|
1. **Deep Agent Architecture**: The system uses a deep agent that coordinates specialized sub-agents:
|
|
- **ResearchAgent**: Searches for market, technology, and finance information
|
|
- **AnalysisAgent**: Performs trend, comparison, and statistical analysis
|
|
- **FollowUpTool**: Asks clarifying questions to gather missing information
|
|
|
|
2. **Follow-up Tool**: The `FollowUpTool` triggers an interrupt to ask the user questions when:
|
|
- The analysis requirements are unclear
|
|
- Specific parameters are needed (time period, sectors, risk tolerance)
|
|
- The agent needs to confirm user preferences
|
|
|
|
3. **Workflow**:
|
|
- User requests analysis (e.g., "Analyze market trends and provide recommendations")
|
|
- Deep agent recognizes ambiguity → uses `FollowUpTool` → **interrupt**
|
|
- User answers clarifying questions → resume
|
|
- Agent proceeds with research and analysis using clarified requirements
|
|
- Final comprehensive report is generated
|
|
|
|
4. **Instruction-Driven**: The deep agent is explicitly instructed to use `FollowUpTool` FIRST before any analysis to ensure all necessary information is gathered.
|
|
|
|
## Practical Example
|
|
|
|
Here's what the follow-up flow looks like:
|
|
|
|
```
|
|
========================================
|
|
User Query: Analyze the market trends and provide investment recommendations.
|
|
========================================
|
|
|
|
name: DataAnalysisAgent
|
|
path: [{DataAnalysisAgent}]
|
|
tool name: FollowUpTool
|
|
arguments: {"questions":["What specific market sectors are you interested in?","What time period should the analysis cover?","What is your risk tolerance?"]}
|
|
|
|
========================================
|
|
CLARIFICATION NEEDED
|
|
========================================
|
|
The agent needs more information to proceed:
|
|
|
|
1. What specific market sectors are you interested in (e.g., technology, finance, healthcare)?
|
|
2. What time period should the analysis cover (e.g., last quarter, year-to-date)?
|
|
3. What type of analysis do you need (e.g., trend, comparison, statistical)?
|
|
4. What is your risk tolerance for investment recommendations (e.g., conservative, moderate, aggressive)?
|
|
|
|
----------------------------------------
|
|
Answer for Q1 (What specific market sectors...): technology and finance
|
|
Answer for Q2 (What time period...): last quarter
|
|
Answer for Q3 (What type of analysis...): trend analysis
|
|
Answer for Q4 (What is your risk tolerance...): moderate
|
|
|
|
========================================
|
|
Resuming with your answers...
|
|
========================================
|
|
|
|
name: DataAnalysisAgent
|
|
path: [{DataAnalysisAgent}]
|
|
action: transfer to ResearchAgent
|
|
|
|
name: ResearchAgent
|
|
path: [{DataAnalysisAgent} {ResearchAgent}]
|
|
tool name: search
|
|
arguments: {"query":"technology market trends Q3 2025","category":"technology"}
|
|
|
|
name: ResearchAgent
|
|
path: [{DataAnalysisAgent} {ResearchAgent}]
|
|
tool response: {"results":[{"title":"AI Industry Report 2025",...}]}
|
|
|
|
name: DataAnalysisAgent
|
|
path: [{DataAnalysisAgent}]
|
|
action: transfer to AnalysisAgent
|
|
|
|
name: AnalysisAgent
|
|
path: [{DataAnalysisAgent} {AnalysisAgent}]
|
|
tool name: analyze
|
|
arguments: {"data":"...","analysis_type":"trend"}
|
|
|
|
name: DataAnalysisAgent
|
|
path: [{DataAnalysisAgent}]
|
|
answer: Based on your preferences for technology and finance sectors with moderate risk tolerance...
|
|
```
|
|
|
|
This trace demonstrates:
|
|
- **Proactive Clarification**: Agent asks questions before starting analysis
|
|
- **Structured Questions**: Multiple questions gathered in a single interrupt
|
|
- **User Answers**: All answers collected and used to guide the analysis
|
|
- **Targeted Analysis**: Research and analysis tailored to user's specific requirements
|
|
|
|
## How to Configure Environment Variables
|
|
|
|
Before running the example, you need to set up the required environment variables for the LLM API. You have two options:
|
|
|
|
### Option 1: OpenAI-Compatible Configuration
|
|
```bash
|
|
export OPENAI_API_KEY="{your api key}"
|
|
export OPENAI_BASE_URL="{your model base url}"
|
|
# Only configure this if you are using Azure-like LLM providers
|
|
export OPENAI_BY_AZURE=true
|
|
# 'gpt-4o' is just an example, configure the model name provided by your LLM provider
|
|
export OPENAI_MODEL="gpt-4o-2024-05-13"
|
|
```
|
|
|
|
### Option 2: ARK Configuration
|
|
```bash
|
|
export MODEL_TYPE="ark"
|
|
export ARK_API_KEY="{your ark api key}"
|
|
export ARK_MODEL="{your ark model name}"
|
|
```
|
|
|
|
Alternatively, you can create a `.env` file in the project root with these variables.
|
|
|
|
## How to Run
|
|
|
|
Ensure you have your environment variables set (e.g., for the LLM API key). Then, run the following command from the root of the `eino-examples` repository:
|
|
|
|
```sh
|
|
go run ./adk/human-in-the-loop/7_deep-agents
|
|
```
|
|
|
|
You will see the deep agent asking clarifying questions about your analysis requirements, and after you provide answers, it will proceed with a tailored market analysis.
|
|
|
|
## Workflow Diagram
|
|
|
|
```mermaid
|
|
graph TD
|
|
A[User Request] --> B{Deep Agent};
|
|
B --> C[Recognize Ambiguity];
|
|
C --> D[FollowUpTool];
|
|
D --> E[Interrupt: Questions];
|
|
E --> F{User Answers};
|
|
F --> G[Resume with Answers];
|
|
G --> H[Delegate to ResearchAgent];
|
|
H --> I[Search Market Data];
|
|
I --> J[Return Research Results];
|
|
J --> B;
|
|
B --> K[Delegate to AnalysisAgent];
|
|
K --> L[Analyze Data];
|
|
L --> M[Return Analysis];
|
|
M --> B;
|
|
B --> N[Generate Final Report];
|
|
N --> O[Final Response];
|
|
```
|
|
|
|
## Key Differences from Other Patterns
|
|
|
|
| Aspect | Approval | Review-Edit | Follow-up |
|
|
|--------|----------|-------------|-----------|
|
|
| **Trigger** | Sensitive action | Booking/modification | Ambiguous requirements |
|
|
| **User Action** | Yes/No | Approve/Edit/Reject | Answer questions |
|
|
| **Purpose** | Authorization | Parameter validation | Information gathering |
|
|
| **Timing** | Before execution | Before execution | Before planning |
|