Presentazione dello strumento di assistenza Chiamata delle pipeline

Foto di Luna Wang
17 lettura minima
Riassumere questo con l'AI

Gli assistenti OpenAI e Azure OpenAI possono richiamare modelli e utilizzare strumenti per eseguire attività. Questo articolo si concentra principalmente sulla creazione di pipeline per sfruttare le funzionalità di richiamo degli strumenti di un assistente esistente.

Data la sostanziale somiglianza nella chiamata degli strumenti di assistenza tra le versioni OpenAI e Azure, gli esempi forniti in questo articolo sono applicabili a entrambe le piattaforme.

Nella parte 1 forniremo una semplice introduzione alla creazione di un assistente in OpenAI Dashboard e all'aggiunta di strumenti definiti dall'utente per il successivo utilizzo nella pipeline. Forniremo tutti i dati e i file necessari.

Nella parte 2, mostreremo due domande e le relative risposte dell'assistente per illustrare i tipi di strumenti che l'assistente può richiamare, o richiede agli utenti di richiamare, per rispondere alle domande.

Nella parte 3 presenteremo due nuovi snap: router di chiamata strumenti e invio output strumenti, insieme agli aggiornamenti dei due snap esistenti: esecuzione thread e creazione ed esecuzione thread.

Nella parte 4 approfondiremo il flusso di lavoro della pipeline e le configurazioni specifiche necessarie per impostare gli snap.

Parte 1: Prerequisiti – Configurare un assistente nella dashboard OpenAI

Gli assistenti OpenAI e Azure OpenAI gestiscono il prompt di sistema, il modello utilizzato per generare la risposta, gli strumenti (tra cui la ricerca di file, l'interprete di codice e altri strumenti definiti dall'utente) e la configurazione del modello, come la temperatura e il formato di risposta.

Qui presenteremo solo le impostazioni di base, che potrai regolare in base alle tue esigenze.

Per ulteriori informazioni, consultare la documentazione di OpenAI e Azure OpenAI.

  1. Accedi alla dashboard di OpenAI: Vai al Dashboard OpenAI – assistenti e clicca su "Create" nell'angolo in alto a destra per avviare il processo di creazione di un nuovo assistente.

  2. Assegna un nome al tuo assistente: Assegna un nome al tuo nuovo assistente. Puoi scegliere qualsiasi nome preferisci, ad esempio "Test Assistant“.

  3. Istruzioni di sistema (facoltativo): è possibile fornire facoltativamente delle istruzioni di sistema per guidare il comportamento dell'assistente. Per ora, saltiamo questo passaggio.

  4. Seleziona un modello: Scegli il modello che desideri utilizzare per il tuo assistente. In questo caso, selezioneremo "gpt-4o-mini“.

  5. Abilita strumenti:

    1. Abilita il "file search"

      1. La ricerca di file è un servizio RAG gestito fornito da OpenAI. L'utilizzo di questo strumento consente al modello di recuperare le informazioni rilevanti per la query dall'archivio vettoriale e di utilizzarle per rispondere.

      2. In questo caso, si prega di creare un nuovo archivio vettoriale, caricare il file file wildfire_stats.pdf nell'archivio vettoriale e aggiungere l'archivio vettoriale all'assistente.

    2. Abilita il”code interpreter” strumenti

      1. L'interprete di codice è anche uno strumento integrato nell'assistente OpenAI. È in grado di eseguire direttamente il codice prodotto dal modello e fornire il risultato.

    3. Crea tre funzioni personalizzate con il seguente schema:

      1. Fornendo queste definizioni, consentiamo al modello di identificare quali funzioni definite dall'utente può richiamare. Sebbene il modello possa suggerire la funzione necessaria, la responsabilità di eseguire la funzione spetta all'utente.

Definizione della funzione: get_weather

{
  "name": "get_weather",
  "description": "Determine weather in my location",
  "strict": true,
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "The city and state e.g. San Francisco, CA"
      }
    },
    "additionalProperties": false,
    "required": [
      "city"
    ]
  }
}

Definizione della funzione: get_wiki_url

{
  "name": "get_wiki_url",
  "description": "Get the wiki url of a given location",
  "strict": true,
  "parameters": {
    "type": "object",
    "properties": {
      "city": {
        "type": "string",
        "description": "The city and state e.g. San Francisco, CA"
      }
    },
    "additionalProperties": false,
    "required": [
      "city"
    ]
  }
}

Definizione della funzione: get_webpage

{
  "name": "get_webpage",
  "description": "A simple web scraper that is capable of extracting information out of a url.",
  "strict": true,
  "parameters": {
    "type": "object",
    "properties": {
      "url": {
        "type": "string",
        "description": "The url of the webpage to get"
      }
    },
    "additionalProperties": false,
    "required": [
      "url"
    ]
  }
}

In questo modo, abbiamo creato con successo l'assistente che utilizzeremo. Dovrebbe apparire simile all'immagine qui sotto. Ora puoi andare direttamente al playground e porre alcune domande per vedere come risponde l'assistente.

immagine-20241031-185949.png

A questo punto, dovresti aver creato un assistente con tre funzioni definite dall'utente. Lo strumento di ricerca dei file dovrebbe avere accesso a un archivio vettoriale che contiene un file.

Parte 2: Due esempi di chiamata dello strumento di assistenza

Per aiutarti a comprendere il funzionamento dell'assistente, in questa sezione utilizzeremo la seguente pipeline per porre due domande agli assistenti appena creati ed esaminare le loro risposte.

I dettagli relativi alla creazione di questa pipeline sono disponibili nella parte 4. Per ora concentriamoci sui risultati dell'esecuzione della pipeline.

Panoramica della pipeline

La pipeline del driver

immagine-20241105-054212.png

Il flusso di lavoratori

immagine-20241105-055448.png

Prompt Uno

La nostra prima domanda all'assistente è:

"Qual è il tempo e l'URL wiki di San Francisco? E qual è il contenuto della pagina wiki?"

Attraverso questa domanda, valutiamo la capacità dell'assistente di:

1) identificare gli strumenti necessari per un'attività: in questo caso, dovrebbero essere chiamati tutti e tre: get_weather, get_wiki_url e get_webpage;

2) comprendere le dipendenze sequenziali tra gli strumenti. Ad esempio, l'assistente dovrebbe riconoscere che get_wiki_url deve essere chiamato prima di get_webpage per acquisire l'URL necessario.

Come mostrato di seguito, la risposta del modello è ragionevole e corretta.

immagine-20241105-041219.png

Prompt Due 

La nostra seconda domanda all'assistente è:

Qual è il numero di incendi federali dal 2018 al 2022? Puoi scrivere un codice Python per ordinare gli anni in base al numero di incendi in ordine crescente e dirmi che tempo fa a San Francisco? 

La domanda potrebbe sembrare un po' strana di per sé, ma il nostro obiettivo è valutare come l'assistente gestisce gli strumenti integrati, come la ricerca di file e l'interprete di codice. Nello specifico, vogliamo determinare se è in grado di combinare efficacemente questi strumenti integrati con le funzioni definite dall'utente nel fornire una risposta.

Per rispondere a questa domanda, il modello deve prima richiamare lo strumento di ricerca file per recuperare la prima riga di dati dalla prima tabella nella prima pagina del PDF Wildfire. Quindi, genera uno snippet di codice Python per l'ordinamento e richiama il secondo strumento, l'interprete di codice, per eseguire questo codice. Infine, richiama il terzo strumento definito dall'utente, get_weather, per ottenere le condizioni meteorologiche a San Francisco.

Dati previsti nel PDF Wildfire:

immagine-20241105-071222.png

Come mostrato di seguito, il modello risponde come previsto.

immagine-20241105-070606.png

A questo punto, dovresti aver compreso che l'assistente può utilizzare tre diverse categorie di strumenti per rispondere alle domande degli utenti.

Parte 3: Presentazione dei nuovi snap

Inizieremo concentrandoci sui nuovi elementi della pipeline: due nuovi snap introdotti di recente e gli attributi aggiunti a quelli esistenti, prima di approfondire i dettagli generali della pipeline.

1. Tool Call Router (nuovo)

  • Lo strumento router snap semplifica la risposta dell'assistente (l'oggetto di esecuzione) per facilitare l'elaborazione a valle.
  • Combina le funzionalità di copymapper, e JSON splitter.
  • La prima vista di output contiene:
    • la risposta dell'assistente originale
    • una lista vuota denominata tool_outputs raccogliere i risultati di tutte le esecuzioni delle funzioni nel successivo snap dell'appendice dei messaggi.
  • La seconda vista di output fornisce un elenco di strumenti da richiamare, estratto dal required actions sezione della risposta dell'assistente

2. Invia risultati dello strumento (nuovo)

Questo snap invia all'assistente un elenco dei risultati dell'esecuzione delle funzioni. L'assistente genererà quindi la risposta finale o richiederà ulteriori chiamate allo strumento.

3. Creare ed eseguire thread (aggiornato)

  • Abbiamo aggiunto una nuova sezione al Create And Run Thread configurazione per specificare parametri dettagliati per le chiamate agli strumenti.
  • Il Tool choice L'opzione consente di dare istruzioni all'assistente per:
    • selezionare automaticamente gli strumenti (AUTO)
    • non utilizzare strumenti (NONE)
    • richiedono almeno uno strumento (REQUIRED)
    • utilizzare uno strumento specifico definito dall'utente (SPECIFY A FUNCTION, fornendo il function name).
  • Il Parallel tool call L'opzione determina se l'assistente può richiamare più strumenti contemporaneamente.

4. Esegui thread (aggiornato)

run_thread.png

La stessa configurazione viene aggiunta al Run Thread scattare anche.

Parte 4: Costruzione pratica della conduttura

Panoramica del flusso di lavoro della pipeline

Ci sono in totale 5 condutture.

  1. Pipeline del driver: 

    • Invia il prompt iniziale all'assistente.

    • Riceve una risposta contenente richieste di chiamata dello strumento.

    • Passa la risposta allo snap "pipeloop" per attivare le pipeline dei worker affinché eseguano gli strumenti.

  2. Pipeline dei lavoratori: 

    • Esegue le chiamate di funzione specificate nelle richieste di chiamata dello strumento.

    • Raccoglie i risultati delle chiamate di funzione.

    • Invia i risultati all'assistente.

    • Questa pipeline viene eseguita ripetutamente fino a quando non ci sono più strumenti da richiamare.

  3. Pipeline get_weather: 

    • Accetta come input il nome di una città.

    • Interroga un'API meteo per ottenere le condizioni meteorologiche attuali della città specificata.

    • Visualizza le informazioni meteorologiche recuperate.

  4. Pipeline get_wiki_url: 

    • Accetta come input il nome di una città.

    • Cerca l'URL della pagina Wikipedia relativa alla città specificata.

    • Visualizza l'URL trovato.

  5. Pipeline get_webpage: 

    • Accetta un URL come input

    • Recupera la pagina web visitando l'URL

    • Utilizza un modello per riassumere il contenuto della pagina web.

    • Visualizza ilriepilogo

La pipeline del driver

La pipeline del driver può essere costruita in due modi: utilizzando un'operazione combinata "crea ed esegui"oppure eseguendo le fasi di creazione ed esecuzione in sequenza. Entrambi i metodi consentono di ottenere lo stesso risultato in questo scenario.

immagine-20241105-190038.png

Il flusso di lavoratori

immagine-20241105-190200.png

La pipeline get_weather

immagine-20241105-200324.png

La pipeline get_wiki_url

immagine-20241105-200017.png

La pipeline get_webpage

immagine-20241105-200612.png
  • Ottieni client: accedi alla pagina web indicata dall'URL e recupera il contenuto HTML.

  • Parser HTML: analizza il contenuto HTML in formato testo.

  • Riassumi: Genera un messaggio per l'utente e concatenalo al testo della pagina web.

  • OpenAI Summarize: utilizza il modello per generare un riassunto del contenuto della pagina web.

Input e output degli snap chiave

Illustreremo gli input e gli output essenziali del processo intermedio attraverso una singola interazione di chiamata dello strumento.

immagine-20241105-202651.png

1. Creare ed eseguire un thread

Questo snap inoltra il prompt iniziale dell'utente all'assistente e restituisce un oggetto di esecuzione. Il punto forte di questo oggetto di esecuzione è il required action, che delinea le chiamate agli strumenti necessari.

Output di Crea ed esegui thread – un oggetto di esecuzione

[
  {
    "run": {
      "id": "run_0JYmmzkQlIGRe4E0cNK8daKm",
      "object": "thread.run",
      "created_at": 1730842197,
      "assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
      "thread_id": "thread_L1mEVGH40bHfwTf2gsDXliMi",
      "status": "requires_action",
      "started_at": 1730842197,
      "expires_at": 1730842797,
      "cancelled_at": null,
      "failed_at": null,
      "completed_at": null,
      "required_action": {
        "type": "submit_tool_outputs",
        "submit_tool_outputs": {
          "tool_calls": [
            {
              "id": "call_uOIx8piJAUty3WpFpVCcxFMc",
              "type": "function",
              "function": {
                "name": "get_weather",
                "arguments": "{"city": "San Francisco, CA"}"
              }
            },
            {
              "id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
              "type": "function",
              "function": {
                "name": "get_wiki_url",
                "arguments": "{"city": "San Francisco, CA"}"
              }
            }
          ]
        }
      },
      "last_error": null,
      "model": "gpt-4o",
      "instructions": "",
      "tools": [
        {
          "type": "code_interpreter"
        },
        {
          "type": "file_search",
          "file_search": {
            "ranking_options": {
              "ranker": "default_2024_08_21",
              "score_threshold": 0
            }
          }
        },
        {
          "type": "function",
          "function": {
            "name": "get_weather",
            "description": "Determine weather in my location",
            "parameters": {
              "type": "object",
              "properties": {
                "city": {
                  "type": "string",
                  "description": "The city and state e.g. San Francisco, CA"
                }
              },
              "additionalProperties": false,
              "required": [
                "city"
              ]
            },
            "strict": true
          }
        },
        {
          "type": "function",
          "function": {
            "name": "get_wiki_url",
            "description": "Get the wiki url of a given location",
            "parameters": {
              "type": "object",
              "properties": {
                "city": {
                  "type": "string",
                  "description": "The city and state e.g. San Francisco, CA"
                }
              },
              "additionalProperties": false,
              "required": [
                "city"
              ]
            },
            "strict": true
          }
        },
        {
          "type": "function",
          "function": {
            "name": "get_webpage",
            "description": "A simple web scraper that is capable of extracting information out of a url.",
            "parameters": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "description": "The url of the webpage to get"
                }
              },
              "additionalProperties": false,
              "required": [
                "url"
              ]
            },
            "strict": true
          }
        }
      ],
      "tool_resources": {},
      "metadata": {},
      "temperature": 1,
      "top_p": 1,
      "max_completion_tokens": null,
      "max_prompt_tokens": null,
      "truncation_strategy": {
        "type": "auto",
        "last_messages": null
      },
      "incomplete_details": null,
      "usage": null,
      "response_format": {
        "type": "text"
      },
      "tool_choice": "auto",
      "parallel_tool_calls": true
    }
  }
]

2. Router di chiamata strumenti

 È importante notare che la prima vista di output non contiene solo la risposta dell'assistente, ma anche un elenco vuoto "tool_outputs". Questo elenco funge da contenitore per memorizzare i risultati delle funzioni man mano che vengono raccolti nei successivi appender di messaggi.

Tool Call Router – Prima vista dell'output

[
  {
    "run":{...},
    "tool_outputs":[]
  }
]

La seconda vista di output estrae le chiamate agli strumenti dalle azioni richieste e converte i valori degli argomenti in formato JSON, memorizzandoli in json_arguments. Ciò elimina la necessità di una successiva conversione degli argomenti da parte di ciascuno strumento.

Tool Call Router – Seconda vista di output

[
  {
    "id": "call_uOIx8piJAUty3WpFpVCcxFMc",
    "type": "function",
    "function": {
      "name": "get_weather",
      "arguments": "{"city": "San Francisco, CA"}",
      "json_arguments": {
        "city": "San Francisco, CA"
      }
    }
  },
  {
    "id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
    "type": "function",
    "function": {
      "name": "get_wiki_url",
      "arguments": "{"city": "San Francisco, CA"}",
      "json_arguments": {
        "city": "San Francisco, CA"
      }
    }
  }
]

3. Pipeline Esegui Snap – Ottieni funzione meteo

[
  {
    "id": "call_uOIx8piJAUty3WpFpVCcxFMc",
    "type": "function",
    "function": {
      "name": "get_weather",
      "arguments": "{"city": "San Francisco, CA"}",
      "json_arguments": {
        "city": "San Francisco, CA"
      }
    }
  }
]

 Funzione Ottieni URL Wiki – Output

[
  {
    "statusLine": {
      "httpVersion": "HTTP/1.1",
      "statusCode": 200,
      "statusText": "OK"
    },
    "headers": {...},
    "entity": {
      "location": {
        "name": "San Francisco",
        "region": "California",
        "country": "United States of America",
        "lat": 37.775,
        "lon": -122.4183,
        "tz_id": "America/Los_Angeles",
        "localtime_epoch": 1730842188,
        "localtime": "2024-11-05 13:29"
      },
      "current": {
        "last_updated_epoch": 1730841300,
        "last_updated": "2024-11-05 13:15",
        "temp_c": 16.2,
        "temp_f": 61.2,
        "is_day": 1,
        "condition": {
          "text": "Mist",
          "icon": "//cdn.weatherapi.com/weather/64x64/day/143.png",
          "code": 1030
        },
        "wind_mph": 4.9,
        "wind_kph": 7.9,
        "wind_degree": 330,
        "wind_dir": "NNW",
        "pressure_mb": 1018,
        "pressure_in": 30.07,
        "precip_mm": 0,
        "precip_in": 0,
        "humidity": 77,
        "cloud": 0,
        "feelslike_c": 16.2,
        "feelslike_f": 61.2,
        "windchill_c": 16.2,
        "windchill_f": 61.1,
        "heatindex_c": 16,
        "heatindex_f": 60.9,
        "dewpoint_c": 11.9,
        "dewpoint_f": 53.4,
        "vis_km": 8,
        "vis_miles": 4,
        "uv": 2.7,
        "gust_mph": 7.2,
        "gust_kph": 11.6
      }
    },
    "_debug": {...},
    "original": {
      "id": "call_uOIx8piJAUty3WpFpVCcxFMc",
      "type": "function",
      "function": {
        "name": "get_weather",
        "arguments": "{"city": "San Francisco, CA"}",
        "json_arguments": {
          "city": "San Francisco, CA"
        }
      }
    }
  }
]

L'output dello strumento fornisce una risposta HTTP completa, tuttavia noi siamo interessati esclusivamente al contenuto "entity" che fungerà da output dello strumento. Questa estrazione avverrà nello snap successivo, "Function Result Generator".

4. Pipeline Esegui Snap – Ottieni URL Wiki Funzione

Funzione Ottieni URL Wiki – Input 

[
  {
    "id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
    "type": "function",
    "function": {
      "name": "get_wiki_url",
      "arguments": "{"city": "San Francisco, CA"}",
      "json_arguments": {
        "city": "San Francisco, CA"
      }
    }
  }
]

 Funzione Ottieni URL Wiki – Output

[
  {
    "statusLine": {
      "httpVersion": "HTTP/1.1",
      "statusCode": 200,
      "statusText": "OK"
    },
    "headers": {...},
    "entity": [
      "San Francisco, CA",
      [
        "San Francisco, CA"
      ],
      [
        ""
      ],
      [
        "https://en.wikipedia.org/wiki/San_Francisco,_CA"
      ]
    ],
    "_debug": {...},
    "original": {
      "id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
      "type": "function",
      "function": {
        "name": "get_wiki_url",
        "arguments": "{"city": "San Francisco, CA"}",
        "json_arguments": {
          "city": "San Francisco, CA"
        }
      }
    }
  }
]

L'output dello strumento fornisce una risposta HTTP completa, tuttavia noi siamo interessati esclusivamente al contenuto "entity" che fungerà da output dello strumento. Questa estrazione avverrà nello snap successivo, "Function Result Generator".

5. Appendice dei messaggi

L'output di Message Appender contiene un oggetto run proveniente dall'upstream, tuttavia noi siamo interessati esclusivamente al tool_outputs campo che è un elenco dei risultati delle funzioni. Pertanto, nello snap successivo, "Invia output dello strumento", utilizzeremo solo il tool_outputs campo.

Appendice messaggi – Output

[
  {
    "run": {...},
    "tool_outputs": [
      {
        "sl_role": "TOOL",
        "function_id": "call_d14hJfMMOvcyxsvWpXbgi9uF",
        "content": [
          "San Francisco, CA",
          [
            "San Francisco, CA"
          ],
          [
            ""
          ],
          [
            "https://en.wikipedia.org/wiki/San_Francisco,_CA"
          ]
        ]
      },
      {
        "sl_role": "TOOL",
        "function_id": "call_uOIx8piJAUty3WpFpVCcxFMc",
        "content": {
          "last_updated_epoch": 1730841300,
          "last_updated": "2024-11-05 13:15",
          "temp_c": 16.2,
          "temp_f": 61.2,
          "is_day": 1,
          "condition": {
            "text": "Mist",
            "icon": "//cdn.weatherapi.com/weather/64x64/day/143.png",
            "code": 1030
          },
          "wind_mph": 4.9,
          "wind_kph": 7.9,
          "wind_degree": 330,
          "wind_dir": "NNW",
          "pressure_mb": 1018,
          "pressure_in": 30.07,
          "precip_mm": 0,
          "precip_in": 0,
          "humidity": 77,
          "cloud": 0,
          "feelslike_c": 16.2,
          "feelslike_f": 61.2,
          "windchill_c": 16.2,
          "windchill_f": 61.1,
          "heatindex_c": 16,
          "heatindex_f": 60.9,
          "dewpoint_c": 11.9,
          "dewpoint_f": 53.4,
          "vis_km": 8,
          "vis_miles": 4,
          "uv": 2.7,
          "gust_mph": 7.2,
          "gust_kph": 11.6
        }
      }
    ]
  }
]

6. Invia i risultati dello strumento

Questa funzione di inoltro istantaneo viene eseguita dall'assistente e riceve un oggetto di esecuzione come risposta. Questo oggetto può fornire la risposta finale o dettare le successive chiamate allo strumento.

In questo esempio, l'output dell'assistente specifica lo strumento successivo da richiamare, come indicato dall'azione richiesta.

Invia output dello strumento – Output – esempio di chiamate successive allo strumento

[
  {
    "run": {
      "id": "run_0JYmmzkQlIGRe4E0cNK8daKm",
      "object": "thread.run",
      "created_at": 1730842197,
      "assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
      "thread_id": "thread_L1mEVGH40bHfwTf2gsDXliMi",
      "status": "requires_action",
      "started_at": 1730842201,
      "expires_at": 1730842797,
      "cancelled_at": null,
      "failed_at": null,
      "completed_at": null,
      "required_action": {
        "type": "submit_tool_outputs",
        "submit_tool_outputs": {
          "tool_calls": [
            {
              "id": "call_lsZpmQ4SPZ6QJ6Dsuk8tvzvy",
              "type": "function",
              "function": {
                "name": "get_webpage",
                "arguments": "{"url":"https://en.wikipedia.org/wiki/San_Francisco,_CA"}"
              }
            }
          ]
        }
      },
      "last_error": null,
      "model": "gpt-4o",
      "instructions": "",
      "tools": [...],
      "tool_resources": {},
      "metadata": {},
      "temperature": 1,
      "top_p": 1,
      "max_completion_tokens": null,
      "max_prompt_tokens": null,
      "truncation_strategy": {
        "type": "auto",
        "last_messages": null
      },
      "incomplete_details": null,
      "usage": null,
      "response_format": {
        "type": "text"
      },
      "tool_choice": "auto",
      "parallel_tool_calls": true
    },
    "original": {
      "run": {...},
      "tool_outputs": [...]
    }
  }
]

Nell'esempio seguente, l'assistente restituisce il risultato finale. Nell'output è presente un elenco di messaggi aggiuntivo che contiene il risultato stesso e il prompt originale dell'utente.

Invia risultati dello strumento – Risultato – esempio di risposta finale

[
  {
    "messages": [
      {
        "id": "msg_ETlH4jGXltDdopImtZFBhI7a",
        "object": "thread.message",
        "created_at": 1730845440,
        "assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
        "thread_id": "thread_4CrAatFTqHktHhareDTkHPNc",
        "run_id": "run_lunPUVK7tmVV7NTiL72NKRju",
        "role": "assistant",
        "content": [
          {
            "type": "text",
            "text": {
              "value": "The current weather in San Francisco, CA is sunny with a temperature of 17.3°C (63.1°F). There's a light breeze coming from the northwest at about 10.8 kph (6.7 mph), and the humidity level is at 63%. There is no precipitation at the moment, and the visibility is 11 kilometers (6 miles) .nnYou can find more detailed information about San Francisco on its [Wikipedia page](https://en.wikipedia.org/wiki/San_Francisco,_CA) . Here's a summary of the content from the page:nn- **Location**: San Francisco is at the north end of the San Francisco Peninsula, embracing parts of the Pacific Ocean and San Francisco Bay.n- **Population**: As of 2023, it has an estimated population of 808,988, making it the fourth-most populous city in California.n- **Area**: It covers 46.9 square miles (121 square kilometers).n- **Diversity**: The city is majority-minority with diverse demographics.n- **History**: The indigenous Yelamu of the Ramaytush Ohlone inhabited the area before European settlement in 1776.n- **Economic Importance**: Known globally for technology, finance, and tourism.n- **Cultural Landmarks**: Home to iconic sites like the Golden Gate Bridge and Alcatraz Island.n- **Climate**: It has a warm-summer Mediterranean climate with frequent fog in summer.n- **Education**: Hosts the University of California, San Francisco, and San Francisco State University.n- **Neighborhoods & Demographics**: Known for diverse neighborhoods with unique character.n- **Economy & Culture**: A robust economy with significant tech and finance sectors, along with a vibrant arts scene.n- **Government**: Operates under a Mayor-Council system.nnThis encapsulates San Francisco's historical, cultural, and economic significance .",
              "annotations": []
            }
          }
        ],
        "attachments": [],
        "metadata": {}
      },
      {
        "id": "msg_1VUwhJdB9k2zOl9g0NH2rGQU",
        "object": "thread.message",
        "created_at": 1730845275,
        "assistant_id": null,
        "thread_id": "thread_4CrAatFTqHktHhareDTkHPNc",
        "run_id": null,
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": {
              "value": "What is the weather and the wiki url of San Francisco? And what is the content of the wiki page?",
              "annotations": []
            }
          }
        ],
        "attachments": [],
        "metadata": {}
      }
    ],
    "run": {
      "id": "run_lunPUVK7tmVV7NTiL72NKRju",
      "object": "thread.run",
      "created_at": 1730845275,
      "assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
      "thread_id": "thread_4CrAatFTqHktHhareDTkHPNc",
      "status": "completed",
      "started_at": 1730845440,
      "expires_at": null,
      "cancelled_at": null,
      "failed_at": null,
      "completed_at": 1730845445,
      "required_action": null,
      ...
    },
    "original": {}  
  }
]

Impostazioni Snap

Questo articolo sottolinea in particolare le impostazioni delle condizioni di ciclo nel pipeloop.

immagine-20241105-223355.png

 Abbiamo configurato il ciclo in modo che termini quando la risposta dell'assistente indica che non sono necessarie ulteriori chiamate allo strumento (ad esempio, "required_action" è nullo). Questo perché se non è necessario ricorrere a ulteriori chiamate di strumenti, non vi è motivo di continuare a eseguire il worker utilizzando Pipeloop.

Caso limite – Quando non è necessaria alcuna chiamata allo strumento

La precedente pipeline del driver presentava una limitazione: non era in grado di gestire i casi in cui il modello poteva rispondere direttamente alla query dell'utente senza richiamare alcuna funzione definita dall'utente.

Questo perché l'output di Create and Run Thread non conterrebbe il required_action campo. Poiché lo snap pipeloop segue una logica do-while, verrebbe sempre eseguito almeno una volta prima di verificare la condizione di arresto. Di conseguenza, quando l'assistente non richiedeva una chiamata allo strumento, l'invio dell'output della chiamata allo strumento all'assistente nella pipeline di lavoro avrebbe causato un errore.

La seguente pipeline di driver offre una soluzione semplice a questo problema utilizzando un router per bypassare il pipeloop per le richieste a cui è possibile rispondere direttamente.

immagine-20241105-224423.png
Foto di Luna Wang
Ingegnere software presso SnapLogic
Categoria: Tecnica