feat: aggiungi ReAct Agent Loop per trasformare chatbot in agente
- Nuovo ReActAgent con loop Pensa->Agisci->Osserva - Usa intent detection esistente per affidabilità - Supporta tutti i tool built-in - Planning e memory integration point - docs/AGENT_ROADMAP.md: gap analysis e roadmap
This commit is contained in:
1 parent
e5ce70c68e
commit
1c7781a68f
2 files changed
+625
No files matched your search
@@ -0,0 +1,227 @@
|
||||
# Da Chatbot ad Agente AI: Gap Analysis e Roadmap
|
||||
|
||||
## Stato Attuale del Progetto
|
||||
|
||||
L'attuale LangCode Agent è classificabile come **chatbot avanzato con tool calling**, non come agente AI autonomo.
|
||||
|
||||
---
|
||||
|
||||
## Chatbot vs Agente: Gap Analysis
|
||||
|
||||
| Caratteristica | Chatbot (Attuale) | Agente AI (Obiettivo) | Stato Attuale |
|
||||
|----------------|-------------------|----------------------|---------------|
|
||||
| **Input/Output** | Turn-by-turn | Goal-oriented | ⚠️ Parziale |
|
||||
| **Planning** | Nessuno | Scomposizione in task | ❌ Assente |
|
||||
| **Loop operativo** | Singola risposta | Pensa → Agisci → Osserva → Ripianifica | ❌ Assente |
|
||||
| **Memoria** | Solo cronologia sessione | A lungo termine, persistente | ⚠️ Esiste ma non integrato |
|
||||
| **Autonomia** | Dipende da input utente | Esegue autonomamente | ❌ Assente |
|
||||
| **Tool use** | Arricchisci risposta | Agisci sull'ambiente | ⚠️ Parziale |
|
||||
| **Goal tracking** | Nessuno | Tiene traccia obiettivi | ❌ Assente |
|
||||
|
||||
---
|
||||
|
||||
## Componenti Esistenti ma Non Integrati
|
||||
|
||||
### 1. Planning System (`enhancements/planning_enhancement.py`)
|
||||
- **Esiste**: Task, priorità, dipendenze, progress tracking
|
||||
- **Non usato**: Nessun tool nell'agente lo sfrutta
|
||||
- **Stato**: Codice pronto, mai integrato in `OllamaToolAgent`
|
||||
|
||||
### 2. Simple Memory (`enhancements/simple_memory.py`)
|
||||
- **Esiste**: Memorizzazione fatti, preferenze, cronologia
|
||||
- **Non usato**: I tool `remember`, `recall` non sono nell'agente
|
||||
- **Stato**: Implementato ma isolato
|
||||
|
||||
### 3. Enhanced Memory (`enhancements/memory_enhancement.py`)
|
||||
- **Esiste**: Vector store con FAISS, semantic search
|
||||
- **Non usato**: Dipende da `nomic-embed-text` non installato
|
||||
- **Stato**: Parzialmente funzionante
|
||||
|
||||
---
|
||||
|
||||
## Cosa Manca per Diventare Agente
|
||||
|
||||
### 1. **Agent Loop (CORE)**
|
||||
L'agente deve poter iterare:
|
||||
```
|
||||
WHILE goal NOT achieved:
|
||||
1. THINK: Pianifica prossimo step
|
||||
2. ACT: Esegui tool
|
||||
3. OBSERVE: Leggi risultato
|
||||
4. EVALUATE: Goal raggiunto? Ripianifica se necessario
|
||||
```
|
||||
|
||||
### 2. **Goal Decomposition**
|
||||
- LLM deve scomporre richieste complesse in task sequenziali
|
||||
- Es: "Prepara un report delle vendite" → cerca file → analizza dati → scrivi report
|
||||
|
||||
### 3. **Self-Reflection**
|
||||
- L'agente deve valutare se il risultato è soddisfacente
|
||||
- Se un tool fallisce, provare approccio alternativo
|
||||
|
||||
### 4. **Persistent Memory Integration**
|
||||
- Memoria deve essere доступна in ogni conversazione
|
||||
- L'agente deve poter salvare e recuperare informazioni
|
||||
|
||||
### 5. **Multi-Step Execution Context**
|
||||
- L'agente deve mantenere stato tra diverse chiamate tool
|
||||
- Non ripetere azioni già completate
|
||||
|
||||
---
|
||||
|
||||
## Roadmap di Implementazione
|
||||
|
||||
### Fase 1: Agent Loop Base
|
||||
**Obiettivo**: Abilitare esecuzione multi-step
|
||||
|
||||
```
|
||||
enhancements/agent_loop.py
|
||||
├── ThinkStep: LLM decide prossima azione
|
||||
├── ActStep: Esegui tool
|
||||
├── ObserveStep: Leggi risultato
|
||||
├── EvaluateStep: Goal raggiunto?
|
||||
└── ReplanStep: Ripianifica se fallito
|
||||
```
|
||||
|
||||
**Modifiche a `ollama_agent.py`**:
|
||||
- Aggiungere metodo `run()` con loop
|
||||
- Aggiungere parametro `max_iterations`
|
||||
- Integrare `enhanced_planner` per task tracking
|
||||
|
||||
### Fase 2: Memory Integration
|
||||
**Obiettivo**: Rendere memoria parte dell'agente
|
||||
|
||||
- Integrare `simple_memory` in `OllamaToolAgent`
|
||||
- Aggiungere tool: `remember`, `recall`
|
||||
- Salvare conversazioni automaticamente
|
||||
- Recuperare fatti rilevanti per contesto
|
||||
|
||||
### Fase 3: Goal-Oriented Interaction
|
||||
**Obiettivo**: LLM pianifica autonomamente
|
||||
|
||||
- Aggiungere system prompt per goal decomposition
|
||||
- LLM decide quali tool usare in sequenza
|
||||
- Mantenere "memory of plans" per long-term goals
|
||||
|
||||
### Fase 4: Enhanced Observability
|
||||
**Obiettivo**: Tracciare e mostrare progresso
|
||||
|
||||
- Logging delle azioni
|
||||
- Report progresso task
|
||||
- Feedback visivo all'utente
|
||||
|
||||
---
|
||||
|
||||
## Implementazione Proposta: Nuovo `ReActAgent`
|
||||
|
||||
```python
|
||||
# enhancements/react_agent.py (nuovo)
|
||||
|
||||
class ReActAgent:
|
||||
"""
|
||||
Agente con Loop Pensa→Agisci→Osserva→Ripianifica
|
||||
"""
|
||||
|
||||
def __init__(self, llm, tools, max_iterations=10):
|
||||
self.llm = llm
|
||||
self.tools = {t.name: t for t in tools}
|
||||
self.max_iterations = max_iterations
|
||||
self.planner = EnhancedPlanner() # Esistente
|
||||
self.memory = SimplePersistentMemory() # Esistente
|
||||
|
||||
def run(self, goal: str) -> Dict:
|
||||
"""
|
||||
Esegue un goal attraverso il loop ReAct.
|
||||
"""
|
||||
context = f"Goal: {goal}\n\n"
|
||||
|
||||
for i in range(self.max_iterations):
|
||||
# 1. THINK: LLM decide prossima azione
|
||||
thought = self._think(context, goal)
|
||||
|
||||
# 2. ACT: Esegui tool se necessario
|
||||
if thought.get("action"):
|
||||
result = self._act(thought["action"], thought["args"])
|
||||
context += f"\nAzione: {thought['action']}\nRisultato: {result}\n"
|
||||
|
||||
# Salva in memoria se rilevante
|
||||
if thought["action"] in ["read_file", "execute"]:
|
||||
self.memory.add_fact(f"Azione completata: {thought['action']}")
|
||||
|
||||
# 3. OBSERVE & EVALUATE
|
||||
if self._goal_achieved(context, goal):
|
||||
return {"success": True, "result": context}
|
||||
|
||||
return {"success": False, "result": context, "error": "Max iterations"}
|
||||
|
||||
def _think(self, context, goal) -> Dict:
|
||||
"""LLM decide prossima azione basata su contesto"""
|
||||
# Prompt ingegnerizzato per decision-making
|
||||
...
|
||||
|
||||
def _act(self, action_name, args) -> str:
|
||||
"""Esegue azione tramite tool"""
|
||||
if action_name in self.tools:
|
||||
return self.tools[action_name].invoke(args)
|
||||
return f"Tool {action_name} non trovato"
|
||||
|
||||
def _goal_achieved(self, context, goal) -> bool:
|
||||
"""Valuta se goal è stato raggiunto"""
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dipendenze per Implementazione
|
||||
|
||||
### Già nel progetto:
|
||||
- `planning_enhancement.py` ✅
|
||||
- `simple_memory.py` ✅
|
||||
- `langchain_core` ✅
|
||||
|
||||
### Da installare:
|
||||
```bash
|
||||
# Per enhanced memory (già parzialmente presente)
|
||||
# Nominic-embed-text model deve essere scaricato in Ollama
|
||||
ollama pull nomic-embed-text
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Comandi per Test Futuro
|
||||
|
||||
```bash
|
||||
# Test futuro dell'agente
|
||||
source venv/bin/activate
|
||||
./venv/bin/python -c "
|
||||
from enhancements.react_agent import ReActAgent
|
||||
from ollama_agent import get_builtin_tools
|
||||
from langchain_ollama import ChatOllama
|
||||
|
||||
llm = ChatOllama(model='qwen3.5:4b', base_url='http://192.168.0.50:11434')
|
||||
agent = ReActAgent(llm, tools=get_builtin_tools())
|
||||
|
||||
# Goal complesso
|
||||
result = agent.run('Leggi il file requirements.txt e creane uno backup')
|
||||
print(result)
|
||||
"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Conclusione
|
||||
|
||||
**Il progetto attuale è un chatbot funzionante con tool calling avanzato.**
|
||||
|
||||
**Per diventare agente AI servono**:
|
||||
1. Agent Loop (ReAct pattern) - **Da implementare**
|
||||
2. Integrazione planning esistente - **Da completare**
|
||||
3. Integrazione memory esistente - **Da completare**
|
||||
4. Goal decomposition via LLM - **Da implementare**
|
||||
|
||||
Le fondamenta (planning, memory) esistono già nel progetto. Mancano l'integrazione e il loop operativo.
|
||||
|
||||
---
|
||||
|
||||
*Documento generato: 23 Marzo 2026*
|
||||
*Autore: OpenAgent*
|
||||
Reference in new issue
Block a user