Risparmiamo (DeepSeek costa circa la meta’ e meno nelle ore non di punta)
Introduzione
Gli script LSL (Linden Scripting Language) possono essere utilizzati in ambienti virtuali come Second Life per integrare funzionalità di intelligenza artificiale tramite API esterne. Questo articolo spiega in dettaglio come modificare uno script LSL originariamente progettato per OpenAI per utilizzarlo con l’API di DeepSeek, con particolare attenzione alla gestione dei caratteri speciali e accentati.
Modifiche Principali per la Compatibilità con DeepSeek
1. URL dell’API e Nome del Modello
Le prime modifiche essenziali riguardano l’endpoint dell’API e il nome del modello:
// Configurazione per OpenAI
string API_URL = "https://api.openai.com/v1/chat/completions";
string MODEL = "gpt-4o-mini";
// Modificare in:
string API_URL = "https://api.deepseek.com/v1/chat/completions";
string MODEL = "deepseek-chat";
L’URL dell’API deve puntare al server di DeepSeek invece che a quello di OpenAI. Inoltre, è necessario specificare un modello supportato da DeepSeek.
2. Chiave API
Per utilizzare DeepSeek, è necessario ottenere una chiave API specifica dalla piattaforma DeepSeek:
- Visitare https://platform.deepseek.com/api_keys
- Creare una nuova chiave API
- Salvare questa chiave in un notecard chiamato “api_key” all’interno dell’inventario dell’oggetto in Second Life
3. Gestione della Risposta HTTP
La differenza più significativa tra i due script riguarda la gestione della risposta HTTP e l’estrazione del contenuto dal JSON ricevuto:
Script per DeepSeek:
http_response(key request_id, integer status, list metadata, string body)
{
if (request_id == http_request_id)
{
if (status == 200)
{
// Look for the content field directly with a simple pattern match
integer content_start = llSubStringIndex(body, "\"content\":\"");
if (content_start != -1)
{
// Move past the "content":" part
content_start += 11;
// Find the closing quote, accounting for escaped quotes
integer content_end = content_start;
integer escaped = FALSE;
integer found_end = FALSE;
while (content_end < llStringLength(body) && !found_end)
{
string char = llGetSubString(body, content_end, content_end);
if (char == "\\")
{
escaped = !escaped;
}
else if (char == "\"" && !escaped)
{
// Found the end quote
found_end = TRUE;
}
else
{
escaped = FALSE;
}
if (!found_end)
{
content_end++;
}
}
// Extract and process the content
string response_content = llGetSubString(body, content_start, content_end - 1);
// Handle escaped characters
response_content = llDumpList2String(llParseString2List(response_content, ["\\n"], []), " ");
response_content = llDumpList2String(llParseString2List(response_content, ["\\\""], []), "\"");
response_content = llDumpList2String(llParseString2List(response_content, ["\\\\"], []), "\\");
// Add to memory and display
add_to_memory("assistant", response_content);
llSay(0, "AI: " + response_content);
}
else
{
llSay(0, "Error: Content field not found in API response.");
}
}
else
{
llSay(0, "API Error: " + (string)status + " - " + body);
}
}
}
Gestione dei Caratteri Speciali e Accentati
Una differenza cruciale tra i due script riguarda la gestione dei caratteri speciali, in particolare i caratteri accentati utilizzati in lingue come l’italiano.
Problemi con il Metodo OpenAI
Lo script OpenAI utilizza llUnescapeURL() per gestire la decodifica:
response_content = llUnescapeURL(response_content); // Handle basic escaping
response_content = llDumpList2String(llParseString2List(response_content, ["\\n"], []), " ");
response_content = llDumpList2String(llParseString2List(response_content, ["\\'"], []), "'");
response_content = llDumpList2String(llParseString2List(response_content, ["\\'"], []), "'");
Questo approccio può causare problemi con i caratteri accentati perché:
llUnescapeURL()è progettato per decodificare caratteri URL-escaped (come %20 per spazio), non necessariamente per gestire correttamente le sequenze di escape JSON per caratteri Unicode- La funzione ripete la sostituzione di
\\'due volte, ma non gestisce esplicitamente altri caratteri di escape come\\" - Non gestisce esplicitamente la sequenza di escape backslash (
\\)
Soluzione DeepSeek
Lo script DeepSeek utilizza un approccio più completo:
// Handle escaped characters
response_content = llDumpList2String(llParseString2List(response_content, ["\\n"], []), " ");
response_content = llDumpList2String(llParseString2List(response_content, ["\\\""], []), "\"");
response_content = llDumpList2String(llParseString2List(response_content, ["\\\\"], []), "\\");
Questo metodo:
- Sostituisce i caratteri di nuova riga (
\n) con spazi - Gestisce correttamente le virgolette escapate (
\") - Gestisce esplicitamente i backslash escapati (
\\)
Questa gestione più accurata delle sequenze di escape permette una migliore preservazione dei caratteri UTF-8, inclusi quelli accentati utilizzati in italiano (come à, è, ì, ò, ù).
Implementazione Completa
Per modificare completamente lo script OpenAI per utilizzarlo con DeepSeek, ecco tutte le modifiche necessarie:
- Modificare l’URL dell’API e il nome del modello
- Ottenere e inserire una chiave API DeepSeek
- Sostituire il blocco
http_responsecon la versione DeepSeek per una migliore gestione dei caratteri
Lo script completo modificato dovrebbe funzionare correttamente con l’API DeepSeek e visualizzare correttamente i caratteri accentati italiani in Second Life.
Conclusione
La modifica di uno script LSL da OpenAI a DeepSeek richiede alcune modifiche chiave, in particolare nell’URL dell’API, nel nome del modello e nella gestione della risposta. La differenza più significativa è nella gestione dei caratteri speciali, dove l’approccio DeepSeek offre una migliore preservazione dei caratteri accentati e speciali.
Quando si sviluppano script LSL per API di intelligenza artificiale, è sempre importante considerare come vengono gestiti i caratteri non ASCII, specialmente quando si lavora con lingue diverse dall’inglese.

Leave a comment