Da OpenAI a DeepSeek (script precedente per OpenSim e SL, con gestione migliorata lettere accentate italiane

Published on

in

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:

  1. Visitare https://platform.deepseek.com/api_keys
  2. Creare una nuova chiave API
  3. 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é:

  1. llUnescapeURL() è progettato per decodificare caratteri URL-escaped (come %20 per spazio), non necessariamente per gestire correttamente le sequenze di escape JSON per caratteri Unicode
  2. La funzione ripete la sostituzione di \\' due volte, ma non gestisce esplicitamente altri caratteri di escape come \\"
  3. 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:

  1. Sostituisce i caratteri di nuova riga (\n) con spazi
  2. Gestisce correttamente le virgolette escapate (\")
  3. 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:

  1. Modificare l’URL dell’API e il nome del modello
  2. Ottenere e inserire una chiave API DeepSeek
  3. Sostituire il blocco http_response con 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


Benvenuto su Salahzar.com

Qui trovi analisi critiche sull’intelligenza artificiale e le sue implicazioni sociali, scritte da chi viene da una impostazione umanistica e ha passato vent’anni a costruire mondi virtuali prima che diventassero “metaverso”.

Niente hype da Silicon Valley o entusiasmi acritici: sul tavolo ci sono le contraddizioni dell’innovazione tecnologica, i suoi miti fondativi, le narrazioni che usiamo per darle senso. Dai diari ucronici (storie alternative come strumento per capire i nostri bias cognitivi) alle newsletter settimanali sugli sviluppi dell’AI che richiedono aggiornamenti continui perché i trimestri sono già preistoria.

Se cerchi guide su come “fare soldi con ChatGPT” o liste di prompt miracolosi, sei nel posto sbagliato. Se invece ti interessa capire cosa sta succedendo davvero – tra hype, opportunità concrete e derive distopiche – sei nel posto giusto.

Umanesimo digitale senza retorica, analisi senza paternalismi, ironia senza cinismo.


Join the Club

Stay updated with our latest tips and other news by joining our newsletter.