Torna ai casi d’uso
Strumenti per sviluppatori

Assistente di programmazione IA — costruire strumenti simili a Cursor con Claude e GPT

Cursor, Aider, Cline, Continue.dev — sono tutti alimentati dallo stesso ristretto gruppo di LLM frontier. Se stai costruendo uno strumento di programmazione (o un copilota dentro il tuo prodotto per sviluppatori), ecco l'architettura e la realtà dei costi.

Ultima revisione: .

Il panorama dell'AI per il codice, in breve

Cursor, Aider, Cline, Continue.dev, Claude Code stesso: tutti si basano sugli stessi tre o quattro LLM di frontiera. Il fattore distintivo non è il modello, ma il ciclo agentico che lo circonda, l'indicizzazione dei file, l'applicazione dei diff e l'esperienza utente. Se stai costruendo uno di questi prodotti (o un copilota di codice nel tuo prodotto per sviluppatori), questa pagina è il menu dei modelli, la realtà dei costi e il budget di latenza.

Menu dei modelli per i flussi di lavoro del codice

  • Claude Haiku 4.5 (claude-haiku-4-5) — completamento automatico (circa 0,0001-0,0005 $ per completamento). Il vincitore in latenza, con time-to-first-token in streaming paragonabile alla chiamata diretta al provider
  • Claude Sonnet 5 (claude-sonnet-5) — chat con il codebase, modifiche multi-file e cicli agentici. Il modello di riferimento al livello di Cursor, a $1,40 / $7,00 per 1M
  • Claude Opus 5 (claude-opus-5) — revisione approfondita, critica dell'architettura e audit di sicurezza. Più lento (P50 circa 3 s), ma il miglior ragionatore, a $3,50 / $17,50 per 1M
  • GPT-5.6 Sol (gpt-5-6-sol) — modello di OpenAI ottimizzato per il codice: qualità comparabile, preferenze stilistiche diverse

I due flussi principali

code_assistant.py
import json
from openai import OpenAI
client = OpenAI(api_key="sk-kn-...", base_url="https://api.kunavo.com/v1")

# Code completion (autocomplete-as-you-type)
def complete(file_content: str, cursor_offset: int, file_path: str) -> str:
    before = file_content[:cursor_offset]
    after = file_content[cursor_offset:]
    resp = client.chat.completions.create(
        model="claude-haiku-4-5",   # FAST for IDE latency
        messages=[
            {"role": "system", "content": (
                "Complete the code at the cursor. Output ONLY the inserted "
                "text — no markdown, no explanation."
            )},
            {"role": "user", "content": (
                f"<file path=\"{file_path}\">\n{before}<CURSOR>{after}\n</file>"
            )},
        ],
        max_tokens=200,
        stop=["<CURSOR>", "</file>"],
    )
    return resp.choices[0].message.content

# Code review (heavier model). Claude enforces a json_schema
# response_format; json_object it does not.
REVIEW = {
    "type": "object",
    "properties": {
        "comments": {"type": "array", "items": {
            "type": "object",
            "properties": {"file": {"type": "string"},
                           "line": {"type": "integer"},
                           "comment": {"type": "string"}},
            "required": ["file", "line", "comment"],
            "additionalProperties": False,
        }},
        "verdict": {"type": "string", "enum": ["approve", "request_changes"]},
    },
    "required": ["comments", "verdict"],
    "additionalProperties": False,
}

def review(diff: str, conventions: str) -> dict:
    resp = client.chat.completions.create(
        model="claude-opus-5",
        messages=[
            {"role": "system", "content": [{
                "type": "text",
                "text": conventions,  # team style guide, security policy
                "cache_control": {"type": "ephemeral"},
            }]},
            {"role": "user", "content": f"Review this diff.\n\n{diff}"},
        ],
        response_format={"type": "json_schema",
                         "json_schema": {"name": "review", "schema": REVIEW}},
        max_tokens=2000,
    )
    return json.loads(resp.choices[0].message.content)

Budget di latenza per funzionalità

  • Completamento inline: TTFT deve essere <200ms. Claude Haiku 4.5. Trasmetti l'output in streaming, interrompilo quando il cursore si sposta
  • Chat con il codebase: TTFT <500ms è accettabile. Sonnet + streaming. Mostra la risposta mentre viene generata
  • Modifica / refactoring multi-file: 5-30 s è normale. Mostra l'avanzamento, esegui in background e presenta il diff per la revisione
  • Revisione di una PR: 10-60 s è accettabile. Opus esegue l'analisi approfondita; formatta il risultato come commenti operativi

Economia dei costi per un prodotto di codice

Consumo realistico per sviluppatore al mese (utente intensivo):

  • ~500 completamenti/giorno × Haiku ~0,0003 $ = 0,15 $/giorno = 4-5 $/mese
  • ~30 sessioni di chat/giorno × Sonnet ~0,05 $ = 1,50 $/giorno = 30-45 $/mese
  • ~3 revisioni PR/settimana × Opus ~0,30 $ = 1 $/settimana = 4 $/mese
  • Utente intensivo: ~40-55 $/mese di costi API
  • Utente medio: ~10-15 $/mese

La maggior parte dei prodotti di AI per il codice applica 20 $ per utente al mese: c'è margine, ma è ridotto per gli utenti intensivi. Il caching dei prompt è essenziale: il contesto del workspace (struttura dei file, convenzioni, file recenti) viene inserito nella cache; a ogni chiamata viene inviato fresco solo il contesto della modifica immediata. Risparmia il 50-70% sugli input. Come configurare il caching.

Pattern architetturali da copiare

  • Prompting FIM (Fill-in-Middle): invece di "completa da qui", passa before<CURSOR>after così il modello usa entrambi i lati
  • Sequenze di arresto: stop=["<CURSOR>", "</file>", "```\n"] impedisce al modello di inventare contenuti oltre il completamento richiesto
  • Uso degli strumenti per modifiche multi-file: non chiedere al modello di produrre 5 file in una risposta. Usa tools=[{name: 'edit_file', ...}] per ottenere modifiche strutturate da applicare atomicamente
  • Decodifica speculativa tramite streaming: mostra i primi ~50 token appena arrivano; gli utenti sceglieranno quello giusto anche prima che la risposta completa sia terminata

Cambiare provider in pochi secondi

Kunavo è compatibile con il protocollo OpenAI. Se hai creato il tuo assistant con l'SDK OpenAI, sostituisci base_url e avrai accesso a Claude e GPT con lo stesso codice. Consulta Chiamare Claude con l'SDK OpenAI per la migrazione.

Inizia da: /app/signup — pagamento a consumo con una ricarica da 10 $ (circa 30.000 chiamate di completamento automatico), il saldo non scade mai. Riferimento dell'endpoint in /docs/chat e API Messages nativa Anthropic in /docs/messages.

FAQ

Quanto costa in API un utente intensivo di un assistente di programmazione AI?

Circa $40–55 al mese con un prezzo di $20 per utente. Questo margine è sostenibile solo perché il prompt caching riduce del 50–70% i costi di input.

Quale modello è adatto a ciascun caso d’uso di un assistente di programmazione?

Il completamento automatico in linea richiede un tempo al primo token inferiore a 200ms, per cui è indicato Claude Haiku 4.5. La chat con codebase richiede meno di 500ms, perciò è adatto Claude Sonnet 4.6. La revisione PR può richiedere da 10 a 60 secondi, quindi è adatto Claude Opus 4.7.

Come vanno formattati i prompt per il completamento automatico?

Usa il prompting Fill-in-Middle: formatta la richiesta come before<CURSOR>after affinché il modello veda entrambi i lati del cursore, e imposta stop=['<CURSOR>', '</file>'] per evitare che l’output superi il limite.

Come dovrebbe gestire un assistente le modifiche a più file?

Passa una definizione dello strumento, ad esempio tools=[{name:'edit_file', ...}], e applica le modifiche in modo atomico, invece di chiedere al modello di generare diversi file completi in un’unica risposta.