Programma
DeepSeek torna con un potente aggiornamento: DeepSeek V3-0324, una versione messa a punto del già notevole DeepSeek-V3. Questa release porta miglioramenti significativi nel ragionamento, nello sviluppo frontend e nelle capacità di utilizzo degli strumenti.
In questo post, ti spiegherò passo dopo passo come costruire un generatore di componenti UI con DeepSeek-V3-0324. Ma prima, lascia che ti presenti le novità di DeepSeek-V3-0324.
Che cos'è DeepSeek-V3-0324?
DeepSeek-V3-0324 si basa sul suo predecessore, DeepSeek-V3, con importanti miglioramenti nel ragionamento, nella generazione front-end e nelle capacità aumentate da strumenti.
Se vuoi la mia opinione, credo che avrebbero potuto fare molto più rumore chiamando il nuovo modello 3.5 invece di 0324, che è difficile da ricordare. A giudicare dal nome, la nuova versione suggerisce solo un miglioramento incrementale, ma i benchmark raccontano un'altra storia:

Fonte: DeepSeek
I risultati nel grafico a barre sopra riflettono notevoli miglioramenti nel ragionamento logico, nella risoluzione di problemi matematici e nella generazione di codice.
DeepSeek-V3-0324 mostra miglioramenti concreti nella generazione di HTML/CSS/JS utilizzabile, in particolare per attività come:
- Componenti UI basati su Tailwind
- Front-end di giochi interattivi
- Codice web eseguibile
Il modello aggiornato offre anche funzionalità di utilizzo degli strumenti potenziate, tra cui:
- Le chiamate di funzione sono ora più accurate grazie alla correzione di incoerenze nelle versioni V3 precedenti.
- Migliore riscrittura multi-turno, traduzione e qualità della scrittura in cinese.
Proprio come DeepSeek-R1, V3-0324 è:
- Open-source (pesi disponibili su Hugging Face)
- Con licenza MIT (gratuito per uso commerciale)
Panoramica del progetto: generatore di UI con DeepSeek in Streamlit
Per mettere alla prova le capacità frontend di DeepSeek-V3-0324, ho realizzato una piccola demo con Streamlit e Tailwind CSS. Il progetto è un generatore da linguaggio naturale a componente UI, e funziona così:
- Accetta un prompt in linguaggio naturale, ad esempio: "Un pulsante rosso con la scritta Hello in bianco"
- Poi lo invia a DeepSeek-V3-0324 tramite API
- Renderizza i seguenti componenti:
- Il componente HTML generato con Tailwind.
- Un'anteprima live in un iframe.
Passo 1: Prerequisiti
Prima di iniziare, assicuriamoci di avere installati i seguenti strumenti e librerie:
python3 --version # Python 3.8+
pip install requests streamlit
Controlla la versione di Python, che dovrebbe essere almeno 3.8 o superiore. Poi installa tutte le altre dipendenze indicate sopra.
Successivamente, dobbiamo impostare la chiave API di DeepSeek come variabile d'ambiente tramite terminale. Per ottenere la tua chiave API:
- Vai alla piattaforma API di DeepSeek e crea un account.
- Clicca sulla scheda API keys a sinistra

- Clicca sul pulsante Create new API key e segui le istruzioni a schermo.

Se ti serve saperne di più sull'uso dell'API, questo tutorial sulla DeepSeek API è ottimo.
Ora dobbiamo impostare la chiave API di DeepSeek come variabile d'ambiente tramite terminale:
export DEEPSEEK_API_KEY=”Your_API_Key”
Ora abbiamo tutte le dipendenze per la nostra applicazione, quindi costruiamo il generatore di UI.
Passo 2: Costruire il generatore di UI
Iniziamo creando un file frontend_generator.py, che funge da wrapper backend per generare codice di componenti frontend usando DeepSeek-V3-0324.
1. Import
Partiamo configurando gli import delle nostre dipendenze.
import requests
import json
import os
Le librerie requests, json e os vengono importate per gestire la comunicazione HTTP, la serializzazione JSON e l'accesso alle variabili d'ambiente per la chiave API.
2. Impostare la chiave API e l'URL
Poi impostiamo la chiave API di DeepSeek e l'URL dell'API per l'applicazione.
API_KEY = os.getenv("DEEPSEEK_API_KEY")
API_URL = "https://api.deepseek.com/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
Le variabili API_KEY e API_URL (già impostate prima) vengono definite per autenticarsi e puntare all'endpoint di chat completions di DeepSeek. Le intestazioni della richiesta specificano il tipo di contenuto e includono il token Bearer per l'autorizzazione.
3. Prompt di sistema
Il SYSTEM_PROMPT definisce il comportamento dell'assistente. Guida il modello a generare HTML leggibile e ben strutturato usando classi Tailwind CSS, assicurando che gli elementi siano gradevoli alla vista e correttamente centrati.
SYSTEM_PROMPT = """
Generate clean HTML with Tailwind CSS classes. Focus on:
1. Use appropriate Tailwind utility classes
2. Ensure text is centered
3. Use clear, visible colors
4. Make content readable
Example for "red button with white text":
<button class="bg-red-500 text-white px-4 py-2 rounded">Click me</button>
Prompt: "A gray box with the text "Hello World" centered inside"
Expected Output:
<div class="bg-gray-300 flex items-center justify-center p-6 rounded-lg">
<p class="text-black text-xl">Hello World</p>
</div>
"""
4. Creare il payload
Infine, costruiamo il payload (i dati strutturati che invieremo all'API di DeepSeek per richiedere una risposta).
def get_component_code(user_prompt: str) -> str:
payload = {
"model": "deepseek-chat",
"messages": [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": user_prompt}
],
"stream": False
}
response = requests.post(API_URL, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
content = response.json()['choices'][0]['message']['content']
# Remove markdown code block markers if present
if "```"in content:
content = content.split("```")[1].strip()
return content.strip() or f"""
<div class="bg-gray-300 flex items-center justify-center p-6 rounded-lg">
<p class="text-black text-xl">{user_prompt}</p>
</div>
"""
else:
raise Exception(f"DeepSeek API error {response.status_code}: {response.text}")
La funzione get_component_code() accetta un prompt definito dall'utente (per esempio: “Una card blu con testo bianco”) e costruisce un payload adatto al formato di messaggistica compatibile con OpenAI di DeepSeek. Il payload include:
- Il nome del modello, cioè “deepseek-chat”
- Una cronologia di messaggi in due parti, cioè “system + user”
- L'impostazione
stream=Falseper ricevere una risposta completa in un'unica soluzione
La funzione invia una richiesta POST all'API di DeepSeek usando la funzione requests.post(). Se la richiesta va a buon fine, estrae l'output del modello dal campo choices[0].message.content.
Nota: “deepseek-chat” usa di default l'ultima versione di DeepSeek V3-0324 (non è necessario specificare esattamente il modello).
Passo 3: Costruire la UI con Streamlit
Ora che il nostro generatore di codice frontend è pronto, costruiamo l'interfaccia Streamlit che mette insieme il tutto.
1. Import
Iniziamo importando le dipendenze dell'applicazione. Streamlit costruisce la UI e gestisce le interazioni dell'utente, mentre html incorpora in sicurezza contenuti HTML in un iframe.
import streamlit as st
from frontend_generator import get_component_code
import html
2. Anteprima del componente
Costruiamo la funzione di anteprima dei componenti della nostra applicazione, che permette agli utenti di visualizzare l'anteprima dei loro componenti nella finestra di Streamlit.
def create_component_preview(raw_code: str) -> str:
clean_code = raw_code.strip()
return f"""
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.tailwindcss.com"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
html, body {{
height: 100%;
display: flex;
justify-content: center;
align-items: center;
background-
}}
.preview-container {{
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
}}
.component-wrapper {{
width: 100%;
max-width: 300px;
display: flex;
justify-content: center;
align-items: center;
}}
</style>
</head>
<body>
<div class="preview-container">
<div class="component-wrapper">
{clean_code}
</div>
</div>
</body>
</html>
"""
La funzione get_component_code() è importata dal file frontend_generator.py creato in precedenza. Si collega all'API di DeepSeek e genera un componente Tailwind CSS in base a un prompt dell'utente.
Quindi, la funzione create_component_preview() incapsula il codice HTML grezzo restituito dal modello in un documento HTML completo con Tailwind abilitato. Applica uno stile di base per centrare e contenere il componente UI all'interno di un layout reattivo.
3. UI di Streamlit
Ora che abbiamo tutti i componenti, dobbiamo unirli nella nostra applicazione Streamlit.
st.set_page_config(page_title="UI Generator", layout="centered")
st.markdown("## Generate UI Components with AI")
prompt = st.text_input("Describe your component", value="A red button with Hello text")
if st.button("⚡ Generate"):
try:
code = get_component_code(prompt)
st.subheader("Generated Code")
st.code(code, language="html")
preview_html = create_component_preview(code)
iframe_html = f'<iframe srcdoc="{html.escape(preview_html)}" width="100%" height="300" style="border:none;"></iframe>'
st.subheader("Live Preview")
st.components.v1.html(iframe_html, height=320)
except Exception as e:
st.error(f"Error generating component: {str(e)}")
La funzione st.text_input() usa un valore precompilato con un esempio come "A red button with Hello text" per guidare l'utente. Quando l'utente clicca il pulsante "Generate", l'app fa quanto segue:
- Chiama la funzione
get_component_code(prompt)per recuperare l'HTML generato. - Mostra l'HTML grezzo usando st.code() e racchiude l'HTML in un layout di anteprima completo usando la funzione
create_component_preview(). - Infine, incorpora il risultato in un iframe usando la funzione
st.components.v1.html()per il rendering live.
L'uso di srcdoc all'interno dell'iframe permette allo script e agli stili di Tailwind di caricarsi nel frame di anteprima isolato, superando i limiti del rendering HTML grezzo in Streamlit.
Questa configurazione abilita un flusso fluido dal prompt all'anteprima, in cui gli utenti possono descrivere i componenti UI in linguaggio naturale e vedere subito sia il codice sottostante sia il risultato renderizzato.
Passo 4: Testare l'app Streamlit
Ora che abbiamo tutti i componenti a posto, avviamo la nostra applicazione Streamlit. Esegui il seguente comando nel terminale:
streamlit run streamlit_app.py

Possiamo descrivere a parole il nostro componente e cliccare Generate. Questo porterà DeepSeek V3-0324 a produrre codice HTML basato su Tailwind, che verrà poi visualizzato come anteprima live.


Conclusione
DeepSeek V3-0324 compie passi concreti in avanti nel ragionamento pratico, nell'esecuzione di codice, nella generazione di UI e nell'prompt engineering multimodale. Con la sua natura open-source e l'elevata velocità, è un'ottima opzione per sviluppatori che lavorano su:
- App con strumenti integrati
- Assistenti multi-turno
- Generatori di UI
- Copilot basati sul ragionamento
Per esplorare altri nuovi strumenti e modelli di AI, ti consiglio questi blog:
Sono una Google Developers Expert in ML (Gen AI), una Kaggle 3x Expert e una Women Techmakers Ambassador con oltre 3 anni di esperienza nel tech. Ho co-fondato una startup health-tech nel 2020 e sto conseguendo un master in informatica al Georgia Tech, con specializzazione in machine learning.


