Costruire Agenti in Casa Gratuitamente: Strumenti e Modelli Open Source
Puoi costruire un sistema multi-agente funzionante sul tuo laptop usando solo strumenti gratuiti e modelli open source. Nessuna carta di credito, nessun limite di rate API, nessun lock-in con il vendor. Il compromesso? Inferenza più lenta e capacità leggermente inferiore. Ma per imparare, sperimentare e automazioni su piccola scala, è più che sufficiente.
Alla fine di questa guida, avrai un agente di ricerca locale in esecuzione sul tuo hardware — ricerca web, lettura file e sintesi di informazioni — completamente gratis.
Il Caso per lo Sviluppo di Agenti Open Source
Realtà dei Costi
I prezzi dell’API Claude sono ragionevoli per carichi di lavoro in produzione, ma imparare e sperimentare si accumula rapidamente. L’inferenza locale elimina completamente questa preoccupazione — iterazioni infinite a costo marginale zero.
Privacy e Controllo dei Dati
Alcuni carichi di lavoro non possono andare alle API cloud. Dati dei pazienti, codice proprietario, logica di business sensibile — tutti beneficiano di rimanere sulla tua macchina. I modelli locali forniscono lo stesso comportamento intelligente senza che alcun dato lasci il tuo hardware.
Il Controllo di Realtà
I modelli open source con 7–13B parametri sono notevolmente indietro rispetto ai modelli frontier nel ragionamento complesso, generazione di codice e rispetto delle istruzioni. Per la produzione dove la precisione conta, le API commerciali restano la scelta migliore. Per imparare e fare prototipi, i modelli locali sono ottimi.
Scegliere il Tuo LLM Open Source
Le Famiglie LLM
- Llama (Meta): La famiglia più ampiamente supportata. Llama 3 è particolarmente capace.
- Mistral: Eccellente rapporto qualità/parametri. Mistral-7B supera le sue dimensioni.
- Phi (Microsoft): Modelli piccoli estremamente efficienti. Phi-3 Mini funziona senza GPU.
- Qwen (Alibaba): Prestazioni multilingue solide.
Dimensioni del Modello e Requisiti Hardware
| Modello | Parametri | Quantizzazione | VRAM | Velocità | Qualità |
|---|---|---|---|---|---|
| Phi-3 Mini | 3,8B | 4-bit | 4GB | Molto Veloce | Buona |
| Mistral-7B | 7B | 4-bit | 8GB | Veloce | Buona |
| Llama-3-8B | 8B | 4-bit | 8GB | Veloce | Molto Buona |
| Llama-3-13B | 13B | 4-bit | 10GB | Media | Molto Buona |
| Mixtral-8x7B | 46,7B (MoE) | 4-bit | 24GB | Lenta | Eccellente |
Quantizzazione: Perché È Importante
La quantizzazione comprime i pesi del modello per usare meno memoria. Un modello da 7B parametri in piena precisione richiede ~28GB di RAM. Lo stesso modello con quantizzazione a 4-bit ne richiede ~4GB, con minima perdita di qualità.
Punti di partenza per hardware:
- Laptop (8–16GB RAM): Phi-3 Mini o Mistral-7B a 4-bit
- Desktop con GPU media: Mistral-7B o Llama-3-8B con accelerazione GPU
- Desktop con GPU high-end: Mixtral-8x7B o Llama-3-70B a 4-bit
Configurazione dell’Inferenza Locale
Ollama: Il Punto di Ingresso Più Semplice
# Installa su macOSbrew install ollama
# Installa su Linuxcurl -fsSL https://ollama.com/install.sh | sh
# Scarica Mistral-7Bollama pull mistral
# Opzione più leggera per hardware lentoollama pull phi3
# Avvia il server di inferenzaollama serveVerifica che funzioni:
curl http://localhost:11434/api/generate -d '{ "model": "mistral", "prompt": "Cos'\''è un agente AI in una frase?", "stream": false}'LM Studio: Alternativa con Interfaccia Grafica
LM Studio è un’applicazione desktop che fornisce un’interfaccia grafica per scaricare ed eseguire modelli. Espone un endpoint API compatibile con OpenAI.
Framework per Agenti Open Source
| Framework | Migliore Per | Curva di Apprendimento |
|---|---|---|
| LangChain | Ampio supporto strumenti | Moderata |
| LangGraph | Workflow con macchine a stati | Moderata-Alta |
| AutoGen | Conversazioni multi-agente | Bassa |
| CrewAI | Sistemi multi-agente basati su ruoli | Bassa-Moderata |
Inizia con AutoGen o LangChain. AutoGen è più veloce per prototipare; LangChain dà più controllo sul loop dell’agente.
Costruire il Tuo Primo Agente: Assistente di Ricerca Locale
Configurazione dell’Ambiente
python3 -m venv agent-envsource agent-env/bin/activatepip install langchain langchain-ollama langchain-community duckduckgo-searchL’Agente Completo
#!/usr/bin/env python3"""Agente di Ricerca Locale con Ollama + LangChainPrerequisiti: - ollama serve (in esecuzione in background) - ollama pull mistral - pip install langchain langchain-ollama langchain-community duckduckgo-search"""
import jsonfrom langchain_core.tools import toolfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_ollama import ChatOllamafrom langchain.agents import AgentExecutor, create_react_agentfrom duckduckgo_search import DDGS
@tooldef search_web(query: str) -> str: """Cerca informazioni sul web usando DuckDuckGo.""" try: with DDGS() as ddgs: results = list(ddgs.text(query, max_results=5)) if not results: return "Nessun risultato trovato." return json.dumps( [{"title": r["title"], "snippet": r["body"], "url": r["href"]} for r in results], indent=2 ) except Exception as e: return f"Ricerca fallita: {e}"
@tooldef read_file(filepath: str) -> str: """Legge un file locale e restituisce il suo contenuto.""" try: with open(filepath, "r") as f: return f.read() except FileNotFoundError: return f"File non trovato: {filepath}"
@tooldef calculate(expression: str) -> str: """Valuta in modo sicuro una semplice espressione aritmetica.""" try: result = eval(expression, {"__builtins__": {}}, {}) return str(result) except Exception as e: return f"Errore di calcolo: {e}"
llm = ChatOllama( model="mistral", base_url="http://localhost:11434", temperature=0.3,)
prompt = ChatPromptTemplate.from_messages([ ("system", """Sei un assistente di ricerca. Rispondi alle domande usando i tuoi strumenti.
Strumenti disponibili: {tool_names}Descrizioni degli strumenti: {tools}
Segui esattamente questo formato:Thought: Cosa devo scoprire?Action: nome_strumentoAction Input: l'input per lo strumentoObservation: risultato dello strumento... (ripeti secondo necessità)Thought: Ora ho abbastanza informazioni.Final Answer: la tua risposta completa"""), ("user", "{input}"), ("placeholder", "{agent_scratchpad}"),])
tools = [search_web, read_file, calculate]agent = create_react_agent(llm, tools, prompt)agent_executor = AgentExecutor( agent=agent, tools=tools, verbose=True, max_iterations=8, handle_parsing_errors=True,)
if __name__ == "__main__": result = agent_executor.invoke({ "input": "Quali sono i tre LLM open source più popolari adesso? Dai i nomi e una caratteristica chiave di ciascuno." }) print(f"\nRISPOSTA FINALE:\n{result['output']}")Esecuzione
# Terminale 1: Avvia Ollamaollama serve
# Terminale 2: Esegui l'agentepython research_agent.pyEspandere le Capacità: Strumenti Senza API
Accesso al Database Locale
import sqlite3
@tooldef query_database(sql: str) -> str: """Esegue una query SQL in sola lettura sul database locale.""" try: conn = sqlite3.connect("data.db") cursor = conn.cursor() cursor.execute(sql) rows = cursor.fetchall() columns = [desc[0] for desc in cursor.description] conn.close() return json.dumps([dict(zip(columns, row)) for row in rows], indent=2) except Exception as e: return f"Errore database: {e}"Ricerca Locale di Documenti con Embedding
pip install sentence-transformers chromadbfrom sentence_transformers import SentenceTransformerimport chromadb
model = SentenceTransformer("all-MiniLM-L6-v2")client = chromadb.Client()collection = client.create_collection("docs")
@tooldef search_docs(query: str) -> str: """Cerca documenti locali per similarità semantica.""" results = collection.query( query_embeddings=[model.encode(query).tolist()], n_results=3 ) return json.dumps(results["documents"][0], indent=2)Limitazioni del Mondo Reale e Soluzioni
Latenza
Aspettati 2–30 secondi per ogni passo di inferenza. Strategie:
- Progetta agenti con meno passaggi; più semplice è più veloce
- Raggruppa le chiamate agli strumenti dove possibile
Lacune di Precisione
Strategie di mitigazione:
- Prompt più brevi ed espliciti — Specifica esattamente il formato atteso
- Suddividi i compiti complessi in passaggi
- Valida gli output degli strumenti prima di restituirli all’agente
- Usa temperatura 0,1–0,3 per l’uso degli strumenti
Deployment: Dal Laptop a Sempre Attivo
Docker
FROM python:3.12-slimRUN pip install langchain langchain-ollama langchain-community duckduckgo-searchCOPY research_agent.py .ENV OLLAMA_HOST=host.docker.internal:11434CMD ["python3", "research_agent.py"]Servizio Systemd (Linux)
sudo systemctl enable ollamasudo systemctl start ollamaApprofondire: Sistemi Multi-Agente in Casa
def run_pipeline(question: str) -> str: research_result = researcher.invoke({"input": question}) final_output = writer.invoke({ "input": f"Basandoti su questa ricerca, scrivi un riassunto chiaro:\n{research_result['output']}" }) return final_output["output"]Lo sviluppo di agenti open source è pratico oggi. Il percorso è: Ollama per l’inferenza, LangChain o AutoGen per il loop dell’agente, DuckDuckGo per la ricerca, e il filesystem della tua macchina per tutto il resto.
Inizia in modo semplice — con l’agente di ricerca sopra. Fallo funzionare. Poi aggiungi un secondo strumento. Poi un secondo agente.
Articoli Correlati
- Introduzione allo Sviluppo Agentico
- Pattern di Utilizzo degli Strumenti: Interfacce Agente-Strumento Affidabili
- Pattern Multi-Agente: Orchestratori, Worker e Pipeline
- Costruire il Tuo Primo Server MCP