QwenPaw è un framework potente per il costruire e testare agenti di intelligenza artificiale. Seguendo questo tutorial, si implementa un flusso di lavoro pratico e si utilizza QwenPaw per creare e testare un assistente basato sull’agente.

Configurazione Iniziale e Ambiente

Innanzitutto importiamo i moduli Python necessari e impostiamo le directory principali per lo spazio di lavoro QwenPaw su Colab. Configuriamo le variabili d'ambiente per l’autenticazione, i registri, i percorsi di lavoro e l'accesso sicuro alla Console QwenPaw.

Creiamo funzioni di supporto per eseguire comandi shell, controllare le porte, arrestare i processi dell’app esistenti e leggere le chiavi API da Colab secrets o da variabili d'ambiente.

Installazione e Inizializzazione

Prima di procedere, verifichiamo se la directory di lavoro è già inizializzata. Se no, eseguiamo il comando:

run(qwenpaw_cmd("init", "--defaults"), check=False) 

Altrimenti, stampiamo un messaggio che indica che la directory di lavoro è già preparata.

Provider di Modelli

Per rendere QwenPaw compatibile con vari provider, forniamo una lista di candidati per i provider:

    • OpenAI con env: OPENAIAPIKEY
    • OpenRouter con env: OPENROUTERAPIKEY
    • DashScope con env: DASHSCOPEAPIKEY
    • DeepSeek con env: DEEPSEEKAPIKEY
    • Google Gemini con env: GEMINIAPIKEY o env: GOOGLEAPIKEY

    Se un'API key è disponibile, selezioniamo quel provider con una serie di informazioni.

    Accesso e Configurazione

    Utilizziamo funzioni per leggere e scrivere file JSON, fondamentali per la configurazione personalizzata.

    def read_json(path, default):
    

    try:

    if path.exists():

    return json.loads(path.read_text(encoding="utf-8"))

    except Exception:

    pass

    return default

    def write_json(path, data):

    path.parent.mkdir(parents=True, exist_ok=True)

    path.writetext(json.dumps(data, indent=2, ensureascii=False), encoding="utf-8")

    Configuriamo quindi il file di configurazione:

    configpath = WORKINGDIR / "config.json"
    

    config = readjson(configpath, {})

    config.setdefault("agents", {})

    config["agents"].setdefault("active_agent", "default")

    config["agents"].setdefault("agent_order", ["default"])

    config["agents"].setdefault("profiles", {})

    config["agents"]["profiles"].setdefault("default", {})

    Installazione e Test

    Il codice include l’installazione di QwenPaw con:

    pip install -q -U pip setuptools wheel

    Seguito da:

    pip install -q -U qwenpaw

    Eseguiamo il test di importazione:

    try:
    

    import requests

    except:

    pip install -q -U requests

    Creazione dell'Environment

    Vengono configurate le directory e le variabili d’ambiente per gestire:

    • La directory di lavoro principale
    • La protezione con password
    • Il registro degli accessi
    • L'abilitazione alla loggatura
    • L’analisi delle competenze (skills)

Aggiunta di Skill e Conoscenza Locale

Con queste impostazioni, possiamo aggiungere abilità definite e file di conoscenza che QwenPaw utilizzerà per completare le richieste degli utenti.

Esecuzione della Console QwenPaw

Il comando iniziale per avviare il server locale è:

run(["qwenpaw", "run", "--port", "8088"], check=True)

Protezione e Sicurezza

Vengono create password temporanee utilizzando:

passwordfile = SECRETDIR / ".colabuipassword"

password = "qpw-" + secrets.token_urlsafe(18)

Per garantire la riservatezza, si imposta un accesso protetto con:

os.environ["QWENPAWAUTHPASSWORD"] = passwordfile.readtext(encoding="utf-8").strip()

Collaboratività ed Estensione del Server

Se desideriamo condividere l’applicazione esternamente, usiamo:

ngrok_url = "https://qwenpaw.ngrok.io"

requests.get(ngrok_url)

Test API Streaming

Per testare l'API in streaming usiamo:

requests.post(f"{ngrok_url}/v1/chat/completions", json={

"model": "gpt-4o-mini",

"messages": [{"role": "user", "content": "Elabora testo."}]}))

Gestione e Arresto Applicazione

Se necessario, arrestiamo l’app esistente con:

if PID_FILE.exists():

try:

pid = int(PIDFILE.readtext().strip())

os.kill(pid, signal.SIGTERM)

except Exception:

pass

PIDFILE.unlink(missingok=True)

Conclusione

Con queste operazioni, si ha un ambiente completamente funzionante per lo sviluppo e il test di agenti potenziati con competenze personalizzate. L’applicazione ha la flessibilità di essere utilizzata sia come assistente interattivo che come framework agente API-centrico.

Ci si assicura anche di testare il collegamento con diversi provider di modelli di AI, di gestire porte e password, e di integrare l’accesso locale ed esterno.