129 lines
4.0 KiB
Markdown
129 lines
4.0 KiB
Markdown
# Dynamic Instructions for Agent Transfers - TODO
|
|
|
|
## Current Behavior
|
|
Currently, when the supervisor transfers control to an agent:
|
|
- ❌ No specific instructions are passed
|
|
- ❌ Agent only sees the original user query
|
|
- ❌ Agent uses its static, pre-defined prompt
|
|
|
|
## Proposed Enhancement: Dynamic Instructions
|
|
|
|
### Why It Matters
|
|
The supervisor often has context about WHY it's transferring to a specific agent. For example:
|
|
- "Transfer to network_diag because user mentioned DNS issues - focus on DNS diagnostics"
|
|
- "Transfer to cert_checker because certificates might be expiring - check all certs urgently"
|
|
|
|
### Implementation Approach
|
|
|
|
#### 1. Modify Transfer Tools
|
|
```python
|
|
def transfer_to_network_diag(instructions: str = "") -> str:
|
|
"""Transfer control to network diagnostics agent.
|
|
|
|
Args:
|
|
instructions: Specific guidance for the agent
|
|
"""
|
|
return f"Successfully transferred to network_diag. Instructions: {instructions}"
|
|
```
|
|
|
|
#### 2. Update State to Include Instructions
|
|
```python
|
|
class State(BaseModel):
|
|
messages: List[AnyMessage]
|
|
next_agent: str = "supervisor"
|
|
supervisor_instructions: Optional[str] = None # NEW FIELD
|
|
```
|
|
|
|
#### 3. Modify Agent Creation to Check for Instructions
|
|
```python
|
|
def create_network_worker():
|
|
return create_react_agent(
|
|
model="openai:gpt-4o-mini",
|
|
tools=[get_shell_tool()],
|
|
prompt="""
|
|
{base_prompt}
|
|
|
|
SUPERVISOR INSTRUCTIONS (if any): {supervisor_instructions}
|
|
|
|
Always prioritize supervisor instructions when provided.
|
|
""",
|
|
name="network_diag"
|
|
)
|
|
```
|
|
|
|
#### 4. Update Router Logic
|
|
```python
|
|
def route_agent(state):
|
|
# Extract supervisor instructions from last ToolMessage
|
|
last_message = state["messages"][-1]
|
|
if isinstance(last_message, ToolMessage) and "Instructions:" in last_message.content:
|
|
# Parse and store instructions
|
|
instructions = extract_instructions(last_message.content)
|
|
state["supervisor_instructions"] = instructions
|
|
|
|
return state["next_agent"]
|
|
```
|
|
|
|
### Example Flow
|
|
|
|
1. **User Query**: "My website is slow"
|
|
|
|
2. **Supervisor Analysis**:
|
|
```
|
|
"Website slowness could be DNS or certificate related.
|
|
Let me transfer to network_diag with specific focus."
|
|
```
|
|
|
|
3. **Supervisor Transfer**:
|
|
```python
|
|
transfer_to_network_diag(
|
|
instructions="Focus on DNS resolution times and latency to common websites.
|
|
Check if DNS servers are responding slowly."
|
|
)
|
|
```
|
|
|
|
4. **Network Agent Receives**:
|
|
- Original query: "My website is slow"
|
|
- Supervisor instructions: "Focus on DNS resolution times..."
|
|
- Can now prioritize DNS diagnostics over general network checks
|
|
|
|
### Benefits
|
|
|
|
1. **More Targeted Diagnostics**: Agents focus on what matters
|
|
2. **Better Context Sharing**: Supervisor's analysis isn't lost
|
|
3. **Efficient Execution**: Avoid running unnecessary commands
|
|
4. **Improved Results**: More relevant output for user's specific issue
|
|
|
|
### Alternative: Context in Messages
|
|
|
|
Instead of modifying tools, append supervisor analysis to the message history:
|
|
|
|
```python
|
|
# Before transfer, supervisor adds a system message
|
|
state["messages"].append(
|
|
SystemMessage(content=f"[SUPERVISOR GUIDANCE]: Focus on {specific_issue}")
|
|
)
|
|
```
|
|
|
|
### Decision Points
|
|
|
|
1. **Tool Parameters vs State**: Where to store instructions?
|
|
2. **Prompt Injection vs Message History**: How to pass instructions?
|
|
3. **Optional vs Required**: Should all transfers include instructions?
|
|
4. **Persistence**: Should instructions carry through multiple agent hops?
|
|
|
|
### Next Steps
|
|
|
|
1. [ ] Decide on implementation approach
|
|
2. [ ] Modify transfer tool signatures
|
|
3. [ ] Update state model
|
|
4. [ ] Enhance agent prompts to use instructions
|
|
5. [ ] Test with various scenarios
|
|
6. [ ] Document the new pattern
|
|
|
|
### Example Test Cases
|
|
|
|
- "Check network" → No specific instructions needed
|
|
- "Website is slow" → "Focus on DNS and latency"
|
|
- "Certificate expiring?" → "Check all certs, prioritize those expiring soon"
|
|
- "Port 443 issues" → "Focus on HTTPS connectivity and certificate validation" |