Mi sono creato un componente chatGPT in Inde foundation


Il progetto:
image

La classe con tutto quel che serve per gestire l’assistente OpenAI
image

Dal progetto basta chiamare Crea thread e AddMessage le altre funzioni vengono eseguite automaticamente.

Lo sto collaudando.

5 Mi Piace

molto interessante, tale componente

@poidomani47 sei veramente infaticabile e direi che la cosa ti appassiona molto, facci sapere gli esiti del collaudo che stai svolgendo.

L’A.I. è la più importante novità informatica dopo l’ENIAC. Fino ad oggi non c’era stato nulla di nuovo sotto il sole.
Devo completare il collaudo, poi devo provocare appositamente tutti i possibili errori e migliorare il log.

2 Mi Piace

Il collaudo procede bene,


Un esempio di richiesta che attiva una funzione che restituisce una collection in formato JSON e che chatGPT formatta per l’utente. Comodo! Ho pensato a un esempio semplice ma non banale.

Non ho ancora capito come fargli leggere sul web:


Potrei aggiungere una funzione che legge da un servizio meteo ma sarebbe più comodo trovare il modo di fargli eseguire le ricerche sul web.

1 Mi Piace

Ecco ho trovato come chiedere all’assistente di utilizzare il browser (che meraviglia poter parlare con l’I.A. ed essere capiti, con una documentazione non posso dialogare, questo è un suggerimento per Progamma):

Ho chiesto: "ho un caso in cui devo usare contemporaneamente una funzione “ModificaTemperatura(“zona giorno”, “21°”) e mostrami il meteo a Milano”

Passo 1: Creazione dell’Assistente con browser e una funzione personalizzata

Quando crei l’assistente, oltre ad abilitare il browser, definisci anche la tua funzione personalizzata (ModificaTemperatura). Ecco un esempio di richiesta curl per configurarlo:

bash

Copia codice

curl "https://api.openai.com/v1/assistants" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "OpenAI-Beta: assistants=v2" \
  -d '{
    "instructions": "You are a smart home assistant. You can adjust home temperature and check the weather.",
    "name": "SmartHome Assistant",
    "tools": [
      {"type": "browser"}
    ],
    "functions": [
      {
        "name": "ModificaTemperatura",
        "description": "Adjusts the temperature in a specified area of the home.",
        "parameters": {
          "type": "object",
          "properties": {
            "area": {"type": "string", "description": "The area of the home to adjust, e.g., 'zona giorno'"},
            "temperature": {"type": "string", "description": "Desired temperature, e.g., '21°'"}
          },
          "required": ["area", "temperature"]
        }
      }
    ],
    "model": "gpt-4"
  }'

In questo modo, l’assistente potrà utilizzare sia il tool di browsing che la tua funzione ModificaTemperatura.

Passo 2: Invocare entrambe le funzionalità in una singola richiesta

Dopo aver creato l’assistente e ottenuto l’assistant_id, puoi fare una richiesta all’assistente per usare entrambi i tool. Ecco come potrebbe apparire la richiesta:

bash

Copia codice

curl "https://api.openai.com/v1/assistants/{assistant_id}/messages" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "messages": [
      {"role": "user", "content": "Modifica la temperatura della zona giorno a 21° e mostrami il meteo a Milano"}
    ],
    "functions": [
      {"name": "ModificaTemperatura", "parameters": {"area": "zona giorno", "temperature": "21°"}},
      {"name": "browser"}
    ],
    "function_call": "auto"
  }'

Spiegazione

  • "functions": Qui definisci le due funzioni che vuoi utilizzare. La ModificaTemperatura ha già i parametri richiesti impostati. Il browser invece sarà utilizzato automaticamente per rispondere alla richiesta di informazioni meteo.
  • "function_call": "auto": Questo consente al modello di decidere quale funzione usare per ogni parte della richiesta, attivando il browsing per il meteo e ModificaTemperatura per l’aggiornamento della temperatura.

Con questa configurazione, l’assistente dovrebbe:

  1. Eseguire la funzione ModificaTemperatura per impostare la temperatura.
  2. Usare il tool di browsing per recuperare le informazioni sul meteo a Milano e restituirle nella risposta.

In questo modo ottieni entrambe le azioni in un’unica richiesta!
NOTA: chatGPT mi dice anche che al momento funziona solo con “model”: “gpt-4” e successivi

2 Mi Piace

Mi sono lanciato in un salto mortale carpiato con doppio avvitamento :grin:


Quindi GPT usando la mia funzione ElencaAppartamenti ha determinato quelli che soddisfacevano le condizioni e poi in un ciclo ho eseguito più volte la funzione ModificaTemperatura con gli argomenti che mi ha passato GPT.
Fin qui tutto bene però ho barato nel fornirgli le risposte che “lui” si aspetta in un array JSON e ho provato a passargliele una alla volta…
Ecco l’errore (ottenuto in Postman):
{
“error”: {
“message”: “Expected tool outputs for call_ids [‘call_snELsS8QiB69HdFk9TPH35mC’, ‘call_Xr0HsoxopZOkuJeHaGCeMC7Q’, ‘call_iRbIWEJD96PSEDKi9ZMvBbto’, ‘call_Xvthe66HGYRd7c7O5w79ughZ’], got [‘call_snELsS8QiB69HdFk9TPH35mC’]”,
“type”: “invalid_request_error”,
“param”: null,
“code”: null
}
}
In cui mi dice appunto che li vuole tutti insieme. Va beh, non è un grande problema, me li accumulo, forse mi faccio una collection di documenti, li carico e poi mi scarico la collection come stringa JSON.
Sistemata questa cosa dovrei aver provato il 90% delle possibilità.

Capite che è possibile fargli eseguire del codice che non dobbiamo più scrivere e che non dobbiamo neanche prevedere? Ci pensa il cliente a chiedere quel che gli serve: “cerca tutti gli appartamenti che hanno una temperatura inferiore a 18° e mettili a 18°”.
Io trovo che sia un ottimo argomento di vendita.

Se qualcuno, con più fantasia di me, ha da suggerirmi altre prove…!!!

1 Mi Piace

ecco fatto, invece di sottomettere le risposte della funzione singolarmente le ho messe in un array JSON

Ovviamente se gli appartamenti fossero migliaia questa soluzione sarebbe inadeguata.
Ci vorrebbe una query, ma io ho fornito solo due funzioni ElencaAppartamenti e ModificaTemperatura e quindi più di questo l’assistente non può fare.
E’ molto importante quindi fornire un set completo di funzioni.

3 Mi Piace