@lvx74/openrrouter-ai-agent
Version:
A powerful AI agent toolkit compatible with @openai/agents for building conversational AI with tool calling support using OpenRouter
374 lines (287 loc) • 9.66 kB
Markdown
# AI Agent Toolkit
Un toolkit completo per creare agenti AI con tool calling, compatibile con l'interfaccia `@openai/agents`. **Funziona principalmente con OpenRouter** per accesso a modelli multipli con una singola API key.
## 🚀 Caratteristiche
- **Compatibile con @openai/agents**: Segue l'interfaccia standard per agenti AI
- **OpenRouter Ready**: Ottimizzato per OpenRouter con supporto per modelli multipli
- **Tool System Avanzato**: Supporto per tools con validazione Zod
- **Chat Interattiva**: Interfacce ready-to-use per console
- **NPM Package**: Utilizzabile come dipendenza in altri progetti
- **Debug & Verbose Mode**: Modalità dettagliate per sviluppo
- **Gestione Errori**: Gestione robusta degli errori nei tool calls
## 📦 Installazione
### Come pacchetto npm
```bash
npm install ai-agent-toolkit
```
### Sviluppo locale
```bash
# Clona il repository
git clone <repo-url>
cd simpleAgent
# Installa le dipendenze
npm install
# Configura le variabili d'ambiente
cp .env.example .env
# Modifica .env con la tua OpenRouter API key
```
## 🔧 Configurazione
### OpenRouter (Raccomandato)
```env
OPENROUTER_API_KEY=your_openrouter_api_key_here
```
### OpenAI (Alternativa)
```env
OPENAI_API_KEY=your_openai_api_key_here
```
> **💡 Perché OpenRouter?**
> - Accesso a modelli multipli (GPT-4, Claude, Gemini, etc.) con una singola API key
> - Costi ridotti rispetto alle API dirette
> - Stesso formato API di OpenAI
> - Failover automatico tra modelli
## 🔧 Uso Base
### Importa le classi principali
```javascript
import { Agent, Tool } from 'ai-agent-toolkit'
// Crea un tool personalizzato
const myTool = new Tool({
name: 'get_time',
description: 'Ottiene l\'ora attuale',
parameters: {
type: 'object',
properties: {
timezone: { type: 'string', description: 'Timezone (opzionale)' }
}
},
handler: async ({ timezone = 'UTC' }) => {
return new Date().toLocaleString('it-IT', { timeZone: timezone })
}
})
// Crea l'agent
const agent = new Agent({
model: 'qwen/qwen3-coder:free', // Modello gratuito su OpenRouter
apiKey: process.env.OPENROUTER_API_KEY,
instructions: 'Sei un assistente utile.',
tools: [myTool]
})
// Usa l'agent
const response = await agent.run('Che ore sono?')
console.log(response.content)
```
### Chat interattiva con utilities
```javascript
import { Agent, createChatInterface } from 'ai-agent-toolkit'
const agent = new Agent({
model: 'anthropic/claude-3-haiku', // Claude via OpenRouter
apiKey: process.env.OPENROUTER_API_KEY,
instructions: 'Sei un assistente AI utile e amichevole.',
verbose: true
})
// Avvia chat interattiva
createChatInterface(agent, {
welcomeMessage: '🤖 Ciao! Come posso aiutarti?',
prompt: 'Tu: '
})
```
## 🖥️ Modalità d'uso: CLI, API server e Web GUI
Puoi usare questo toolkit in tre modi principali:
### 1. Interfaccia CLI (console)
Esegui la chat interattiva direttamente da terminale:
```bash
node example/basic.js
```
- Chatta con l'agente AI e prova i tool direttamente da console
- Ideale per sviluppo, debug e test rapidi
### 2. API server compatibile OpenAI/OpenRouter
Avvia il server API compatibile OpenAI (con tool calling):
```bash
node example/server.js
```
- Espone endpoint `/v1/chat/completions` e `/v1/models` compatibili con OpenAI
- Puoi collegare qualsiasi client OpenAI, plugin, o frontend custom
### 3. Web GUI (OpenWebUI)
Collega il server a una web UI moderna come [OpenWebUI](https://github.com/open-webui/open-webui):
- Interfaccia grafica user-friendly
- Supporta tool calling, history, modelli multipli
- **Guida dettagliata**: [openwebui.md](./openwebui.md)
> Consulta il file [`openwebui.md`](./openwebui.md) per istruzioni dettagliate su come collegare OpenWebUI al server e sfruttare tutte le funzionalità avanzate.
## 🎯 Modelli Supportati
Tramite **OpenRouter**, puoi usare tutti questi modelli:
### Gratuiti
- `qwen/qwen3-coder:free` - Ottimo per coding
- `microsoft/phi-3-mini-128k-instruct:free` - Veloce e leggero
- `mistralai/mistral-7b-instruct:free` - Bilanciato
### A Pagamento (Costi Ridotti)
- `anthropic/claude-3-haiku` - Veloce ed economico
- `openai/gpt-4o-mini` - GPT-4 economico
- `google/gemini-pro` - Google Gemini
- `anthropic/claude-3-sonnet` - Claude bilanciato
- `openai/gpt-4` - GPT-4 completo
### Enterprise
- `anthropic/claude-3-opus` - Claude più potente
- `openai/gpt-4-turbo` - GPT-4 avanzato
## 🛠 Tools Disponibili
### get_weather
Restituisce informazioni meteo per una città specifica.
**Parametri:**
- `city` (string): Nome della città
- `unit` (string, opzionale): Unità di temperatura ('celsius' o 'fahrenheit')
**Esempio:**
```
Che tempo fa a Roma?
```
### echo
Ripete il testo fornito dall'utente.
**Parametri:**
- `text` (string): Testo da ripetere
- `repeat_count` (number, opzionale): Numero di ripetizioni
**Esempio:**
```
Ripeti "Ciao mondo" 3 volte
```
### calculate
Esegue calcoli matematici semplici.
**Parametri:**
- `operation` (string): Operazione ('add', 'subtract', 'multiply', 'divide')
- `a` (number): Primo numero
- `b` (number): Secondo numero
**Esempio:**
```
Calcola 15 + 25
```
## 🎮 Comandi della Chat
- `exit` / `quit` - Esci dalla chat
- `reset` - Resetta la conversazione
- `history` - Mostra cronologia messaggi
- `tools` - Lista dei tools disponibili
- `debug on/off` - Attiva/disattiva modalità debug
- `help` - Mostra l'aiuto
## 🏗 Architettura
### Struttura del Progetto
```
simpleAgent/
├── agent.js # Chat interattiva principale
├── AgentClass.js # Classe Agent compatibile @openai/agents
├── Tool.js # Classe base per tools
├── functions.js # Definizione dei tools disponibili
├── package.json # Configurazione npm
└── README.md # Documentazione
```
### Classe Agent
La classe `Agent` è compatibile con l'interfaccia `@openai/agents` e supporta:
```javascript
// Inizializzazione con options object
const agent = new Agent({
model: 'anthropic/claude-3-haiku', // Qualsiasi modello OpenRouter
apiKey: process.env.OPENROUTER_API_KEY,
instructions: 'Sei un assistente AI...',
tools: availableTools,
temperature: 0.7,
maxIterations: 10,
debug: false
})
// Metodi principali
await agent.run(message) // Esegue una conversazione completa
await agent.step() // Esegue un singolo step
agent.reset() // Resetta la conversazione
agent.getHistory() // Ottiene la cronologia
agent.addTool(tool) // Aggiunge un tool
agent.setDebug(true) // Attiva debug
```
### Classe Tool
La classe `Tool` supporta sia schema Zod che JSON Schema tradizionali:
```javascript
// Con schema Zod
const weatherTool = new Tool({
name: 'get_weather',
description: 'Restituisce il meteo per una città',
schema: z.object({
city: z.string().describe('Nome della città'),
unit: z.enum(['celsius', 'fahrenheit']).optional()
}),
handler: async ({ city, unit }) => {
// Implementazione del tool
}
})
// Con JSON Schema
const echoTool = new Tool({
name: 'echo',
description: 'Ripete un testo',
parameters: {
type: 'object',
properties: {
text: { type: 'string', description: 'Testo da ripetere' }
},
required: ['text']
},
handler: async ({ text }) => {
return `Echo: ${text}`
}
})
```
## 🔄 Aggiungere Nuovi Tools
1. **Crea il tool:**
```javascript
export const myTool = new Tool({
name: 'my_tool',
description: 'Descrizione del mio tool',
schema: z.object({
param1: z.string().describe('Descrizione parametro'),
param2: z.number().optional()
}),
handler: async ({ param1, param2 }) => {
// La tua logica qui
return 'Risultato del tool'
}
})
// Aggiungi all'array dei tools disponibili
export const availableTools = [weatherTool, echoTool, calculateTool, myTool]
```
2. **Il tool sarà automaticamente disponibile nella chat!**
## 🔗 Setup OpenRouter
1. **Registrati su [OpenRouter.ai](https://openrouter.ai)**
2. **Ottieni la tua API key** dal dashboard
3. **Aggiungi crediti** (anche solo $5 durano mesi)
4. **Usa qualsiasi modello** con la stessa API key
### Vantaggi di OpenRouter:
- ✅ **Una sola API key** per tutti i modelli
- ✅ **Costi ridotti** fino al 50% rispetto alle API dirette
- ✅ **Modelli gratuiti** disponibili per testing
- ✅ **Failover automatico** se un modello non è disponibile
- ✅ **Stesso formato** delle API OpenAI
- ✅ **Rate limiting** migliore
## 🐛 Debug
Attiva la modalità debug per vedere i dettagli delle chiamate API:
```bash
# Nella chat, digita:
debug on
```
Questo mostrerà:
- Risposte complete del modello
- Tool calls con parametri
- Risultati dei tools
- Numero di iterazioni
## 📚 Dipendenze
- `openai` - Client OpenAI (compatibile con OpenRouter)
- `dotenv` - Gestione variabili d'ambiente
- `zod` - Validazione schema e type safety
- `@openai/agents` - Interfaccia standard per agenti AI
## 🌐 API Supportate
### OpenRouter (Raccomandato)
- **URL**: `https://openrouter.ai/api/v1`
- **Modelli**: 50+ modelli disponibili
- **Costi**: Ridotti fino al 50%
- **Setup**: Una sola API key
### OpenAI (Supporto diretto)
- **URL**: `https://api.openai.com/v1`
- **Modelli**: GPT-3.5, GPT-4 serie
- **Costi**: Listino OpenAI standard
### Altri Provider
Il toolkit è compatibile con qualsiasi API che segue il formato OpenAI.
## 🤝 Contribuire
1. Fork del repository
2. Crea un branch per la tua feature
3. Commit delle modifiche
4. Push al branch
5. Apri una Pull Request
## 📄 Licenza
ISC License - vedi file LICENSE per dettagli.