Esegui gli agenti Letta su un endpoint compatibile OpenAI.
Updated 2026-07-29
Letta self-hosted legge OPENAI_API_BASE e OPENAI_API_KEY dall'ambiente, quindi due variabili puntano i suoi agenti stateful verso un gateway. Upstream definisce gli endpoint proxy non ufficiali, e questa pagina lo prende sul serio: cosa funziona, quali sono i requisiti, e dove sono stati gli spigoli vivi.
Risposta rapida: due variabili d'ambiente sul server.
Il percorso documentato di Letta per gli endpoint compatibili OpenAI è la configurazione d'ambiente sul server self-hosted: imposta OPENAI_API_BASE sull'URL dell'endpoint e OPENAI_API_KEY sulla sua chiave all'avvio del server, e Letta registra i modelli serviti da quell'endpoint. Per APIsRouter la base è https://api.apisrouter.com/v1. Non c'è alcun campo base-URL per agente nella UI; l'endpoint è una decisione a livello server, ed è per questo che l'ambiente è la superficie che conta. Un requisito è non negoziabile e vale la pena leggerlo prima di ogni altra cosa: la documentazione di Letta afferma che gli endpoint compatibili OpenAI devono supportare il function calling, perché il loop dell'agente è costruito su chiamate a strumenti. Un endpoint che fa solo semplici chat completions non può eseguire affatto un agente Letta. I modelli del catalogo su APIsRouter parlano tool calling standard su /v1/chat/completions, che è la forma che Letta si aspetta.
docker run \
-v ~/.letta/.persist/pgdata:/var/lib/postgresql/data \
-p 8283:8283 \
-e OPENAI_API_KEY="$APISROUTER_API_KEY" \
-e OPENAI_API_BASE="https://api.apisrouter.com/v1" \
letta/letta:latestPerché Letta si appoggia al suo modello più pesantemente di una chat app.
Letta (letta-ai su GitHub, circa 24K stelle) è cresciuto a partire dal progetto di ricerca MemGPT e costruisce agenti stateful: agenti con memoria persistente e auto-modificabile che sopravvive tra le sessioni. Dove un client di chat invia il tuo messaggio e stampa la risposta, un agente Letta esegue un loop interno a ogni interazione, ragionando su ciò che sa, chiamando strumenti di memoria per leggere e riscrivere la propria memoria centrale e l'archivio, e solo dopo produce una risposta. Quell'architettura ha due conseguenze per il routing dell'endpoint. Primo, ogni passo del loop è una richiesta di tool-calling, ed è per questo che il function calling è un requisito rigido piuttosto che un vantaggio piacevole; un modello che sbaglia gli schemi degli strumenti qui non degrada con grazia, rompe la capacità dell'agente di ricordare. Secondo, il volume delle richieste per interazione è più alto di quanto suggerisca la trascrizione della conversazione, perché la gestione della memoria scatta insieme alla risposta visibile. L'id del modello che serve tutto questo è una stringa semplice per l'endpoint, quindi con un gateway multi-vendor dietro OPENAI_API_BASE, un id Claude può eseguire il loop dell'agente mentre un id veloce serve agenti più leggeri sullo stesso server, ciascuno indirizzato dal proprio handle.
Lo stato onesto del supporto, direttamente da upstream.
La documentazione di Letta stessa afferma che gli endpoint proxy OpenAI non sono ufficialmente supportati e che è probabile incontrare errori, raccomandando invece connessioni dirette ai provider. Quell'avviso merita di essere citato piuttosto che sepolto, perché la maggior parte delle pagine su questo argomento fa finta che non esista. Ciò che significa in pratica è più ristretto di quanto sembri: Letta testa contro le API di prima parte, e un endpoint che devia dalla semantica OpenAI, specialmente attorno al tool calling, produce fallimenti a cui upstream non darà priorità. Un endpoint che implementa genuinamente la specifica, chiamate a strumenti incluse, funziona bene, ed è esattamente la soglia di compatibilità da cui dipende un gateway. Anche la storia del supporto ha avuto un bug reale che vale la pena conoscere. Fino ai primi mesi del 2026, i modelli registrati tramite OPENAI_API_BASE venivano auto-prefissati come provider openai-proxy mentre la creazione dell'agente validava contro un elenco più corto di prefissi accettati, quindi i modelli proxy si registravano ma non potevano essere usati per creare agenti. Il problema è stato chiuso con una correzione a gennaio 2026; se esegui un server più vecchio bloccato a una versione fissa e la creazione dell'agente rifiuta modelli che il server elenca chiaramente, quella discrepanza è ciò che stai incontrando, e l'aggiornamento è la soluzione. Un altro bersaglio mobile: la superficie di prodotto di Letta si è spostata, e la sua documentazione attualmente indirizza i nuovi utenti verso nuove modalità di deployment notando che l'immagine Docker classica non è più la superficie attivamente mantenuta. Le variabili d'ambiente sopra sono il meccanismo documentato per il server self-hosted; controlla la documentazione attuale per capire quale artefatto server upstream raccomanda nella settimana in cui fai il deployment.
# after the server is up, list models Letta knows about
curl -s http://localhost:8283/v1/models/ | head -50
# use the handle exactly as listed when creating agentsScegliere i modelli per agenti stateful.
La valutazione che conta è la fedeltà del loop: crea un agente di test, fai una conversazione che forza aggiornamenti di memoria, poi leggi la memoria centrale dell'agente e verifica che sia effettivamente cambiata. Un modello può scrivere risposte accattivanti e comunque fallire il contratto della memoria, e solo il test del loop lo cattura.
- La modifica della memoria è lavoro strutturato con strumenti. claude-sonnet-4-6 e gpt-5.5 gestiscono in modo affidabile il loop di riscrittura della propria memoria, che è la competenza principale di cui un agente Letta ha bisogno.
- Gli agenti a lunga vita accumulano contesto. I modelli che restano coerenti in profondità dentro una finestra di contesto contano più qui che nella chat stateless, ed è dove claude-opus-4-7 guadagna il suo posto per assistenti ad alto rischio.
- Flotte di agenti leggeri, uno per utente o per task, sono carichi di lavoro in volume. claude-haiku-4-5-20251001 mantiene basso il costo per agente pur facendo comunque chiamate a strumenti competenti.
- deepseek-v4-pro vale la pena testarlo per agenti che mescolano ragionamento con traffico bilingue; il requisito del tool-calling è il cancello, quindi testa il loop, non solo la prosa.
- Qualunque cosa tu scelga, scegli per agente. Il server registra l'intero catalogo, e ogni agente si lega a un handle, quindi un concierge ad alta intensità di memoria e un agente task usa e getta possono girare su id diversi fianco a fianco.
Pagamento a consumo · sotto i prezzi ufficiali
Selected models are priced below official list prices. Exact input, output, cache, and per-request prices are shown for each model.
| Modello | Prezzo ufficiale | Il nostro prezzo |
|---|---|---|
| Claude Sonnet 4.6 | $3.00 / $15.00 per M | $2.40 / $12.00 per M |
| Claude Opus 4.7 | $5.00 / $25.00 per M | $4.00 / $20.00 per M |
| GPT-5.5 | $5.00 / $30.00 per M | $4.00 / $24.00 per M |
| Claude Haiku 4.5 20251001 | $1.00 / $5.00 per M | $0.80 / $4.00 per M |
| DeepSeek V4 Pro | $0.43 / $0.87 per M | $0.40 / $0.90 per M |
Modalità di errore specifiche di Letta.
La creazione dell'agente che rifiuta un modello elencato dal server è lo storico bug del prefisso. I modelli registrati tramite un proxy portavano un prefisso di provider che la creazione dell'agente rifiutava di accettare sulle versioni affette. La correzione è arrivata a gennaio 2026; sulle release attuali, l'handle mostrato nell'elenco dei modelli è l'handle che funziona. Se sei bloccato su un'immagine più vecchia, questa è la ragione più forte per aggiornare prima di fare debug di qualsiasi altra cosa. Un agente che risponde ma non ricorda mai è un fallimento del tool-calling. O l'endpoint non implementa il function calling, oppure il modello dietro l'id gestisce male gli schemi degli strumenti. Il sintomo sono conversazioni che funzionano mentre la memoria centrale non si aggiorna mai. Testa lo stesso agente su claude-sonnet-4-6 per separare i problemi di endpoint da quelli di modello. Le variabili d'ambiente impostate nel posto sbagliato sono il classico di Docker: OPENAI_API_BASE esportata nella tua shell non fa nulla per un container avviato senza i flag -e. Le variabili devono raggiungere il processo del server stesso. E poiché l'endpoint è a livello server, ricorda il raggio d'azione: cambiare OPENAI_API_BASE sposta ogni agente su quel server. Non c'è alcun override dell'endpoint per agente, quindi un server per gateway è la topologia pulita, con la scelta del modello per agente che fa la differenziazione.
Chi instrada Letta tramite un gateway.
- Builder di assistenti persistenti che vogliono modifica della memoria di qualità Claude senza un account fornitore separato, chiave e superficie di fatturazione per ogni modello che provano.
- Team che eseguono flotte di agenti dove ogni utente riceve un agente, e il tracciamento dell'utilizzo per chiave trasforma il vero costo del livello di memoria in un report leggibile.
- Ricercatori che confrontano come i modelli gestiscono la memoria auto-modificabile, dove ogni candidato è un cambio di handle su un agente di test piuttosto che una migrazione di provider.
- Self-hoster in ambienti dove l'accesso diretto alle API dei fornitori è bloccato e un singolo endpoint gateway è ciò che la policy di rete consente.
- Sviluppatori senza accesso alla fatturazione di un dato fornitore. L'accesso basato su ricarica senza obbligo di carta rimuove la dipendenza dalla registrazione per provider.
Verifica il gateway e fai debug del primo agente.
Verifica il gateway prima del server: elenca i modelli con la chiave, ed esegui un completamento chat con una definizione di strumento allegata, perché il tool calling è la capacità da cui Letta dipende davvero. Se il round trip della chiamata a strumento funziona in curl, la metà dell'endpoint è provata. Poi avvia il server con le due variabili e leggi il suo elenco di modelli. I modelli che appaiono lì provano la registrazione; un agente creato con successo da un handle elencato prova il percorso del prefisso; una conversazione che aggiorna la memoria centrale prova il loop end to end. Fai debug in quell'ordine, perché ogni fase ha un insieme distinto di fallimenti: le variabili d'ambiente, la versione del server, e la competenza del modello con gli strumenti rispettivamente. Una volta che gli agenti girano, la console di APIsRouter mostra il modello per richiesta, i conteggi dei token e la spesa. Gli agenti stateful fatturano più per interazione di quanto suggeriscano le loro trascrizioni, poiché la gestione della memoria gira dietro ogni risposta, e il log di utilizzo è dove quel moltiplicatore nascosto diventa un numero che puoi mettere a budget.
curl -s https://api.apisrouter.com/v1/chat/completions \
-H "Authorization: Bearer $APISROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-4-6",
"messages":[{"role":"user","content":"What is 2+3?"}],
"tools":[{"type":"function","function":{
"name":"calc","description":"add numbers",
"parameters":{"type":"object","properties":{
"a":{"type":"number"},"b":{"type":"number"}}}}}]}'Domande frequenti
Come punto Letta verso un endpoint compatibile OpenAI personalizzato?
Imposta OPENAI_API_BASE e OPENAI_API_KEY nell'ambiente del server Letta self-hosted, per esempio come flag -e su docker run. Non c'è alcun campo base-URL per agente; l'endpoint è configurato a livello server e ogni agente su quel server lo usa.
Letta supporta ufficialmente gli endpoint proxy?
Upstream li definisce non ufficialmente supportati e avverte che potresti incontrare errori, raccomandando provider diretti. In pratica il requisito è una rigorosa compatibilità OpenAI incluso il function calling; un endpoint che implementa la specifica completa esegue il loop dell'agente, che è la soglia contro cui APIsRouter è costruito.
Perché il function calling è richiesto?
Gli agenti Letta gestiscono la propria memoria tramite chiamate a strumenti: leggere, riscrivere e archiviare la memoria sono funzioni che il modello invoca a ogni interazione. Un endpoint o modello senza un tool calling solido non può eseguire il loop, e il sintomo è un agente che chatta ma non ricorda mai.
Perché la creazione dell'agente rifiuta i modelli elencati dal mio server?
Le versioni più vecchie del server registravano i modelli proxy sotto un prefisso di provider che la creazione dell'agente rifiutava di validare, un bug chiuso con una correzione a gennaio 2026. Aggiorna il server, poi usa l'handle esattamente come appare nell'elenco dei modelli.
Agenti Letta diversi possono usare modelli diversi tramite un endpoint?
Sì. Il server registra ogni id servito dall'endpoint, e ogni agente si lega a un handle di modello alla creazione. Un agente concierge su claude-opus-4-7 e una flotta di agenti task su claude-haiku-4-5-20251001 possono condividere un server e una chiave.
Questo si applica a Letta Cloud o al server self-hosted?
Il server self-hosted, dove controlli l'ambiente. Letta Cloud gestisce le proprie chiamate al modello lato server. Nota anche che gli artefatti self-hosting raccomandati da Letta si sono spostati, quindi controlla la documentazione attuale per la modalità di deployment che mantengono oggi.