Confronto tra pipeline di chiamata di strumenti con e senza assistente

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

Ad alto livello, la logica alla base della chiamata di strumenti assistenti e non assistenti è fondamentalmente la stessa: il modello istruisce l'utente a chiamare una o più funzioni specifiche per rispondere alla sua richiesta. L'utente esegue quindi la funzione e restituisce il risultato al modello, che lo utilizza per generare una risposta. Questo processo è identico per entrambi.

Tuttavia, poiché l'assistente specifica le definizioni delle funzioni e l'accesso agli strumenti come parte della configurazione dell'assistente all'interno della dashboard OpenAI o Azure OpenAI piuttosto che all'interno delle pipeline, ci saranno differenze significative nella configurazione della pipeline. Inoltre, l'invio delle risposte degli strumenti a un assistente comporta cambiamenti e sfide significativi, poiché è l'assistente a possedere la cronologia delle conversazioni piuttosto che la pipeline.

Questo articolo si concentra sul confronto tra queste differenze. Per una comprensione dettagliata delle pipeline assistite e non assistite, fare riferimento al seguente articolo:

Pipeline non assistite:introduzione agli snap di chiamata degli strumenti e alle pipeline degli agenti LLM

Pipeline di assistenza:introduzione alle pipeline di chiamata degli strumenti di assistenza

Parte 1: Quale sistema utilizzare: senza assistente o con assistente?

Quando utilizzare strumenti non assistenti che richiamano pipeline:

Le pipeline di chiamata degli strumenti non assistenti offrono maggiore flessibilità e controllo sul processo di chiamata degli strumenti, rendendole adatte ai seguenti scenari specifici.

  • Quando si preferisce un approccio "run-time": Le pipeline non assistite offrono una maggiore flessibilità nella definizione delle funzioni, garantendo un approccio più orientato al "runtime". È possibile regolare dinamicamente le funzioni disponibili semplicemente aggiungendo o rimuovendo gli snap del generatore di funzioni all'interno della pipeline.
    immagine-20250113-214225.png

     Al contrario, le pipeline di chiamata degli strumenti Assistant richiedono un approccio "in fase di progettazione". Tutte le funzioni disponibili devono essere predefinite nella configurazione dell'Assistant, il che richiede modifiche alla definizione dell'Assistant nella dashboard OpenAI/Azure OpenAI. 

    immagine-20250113-214637.png
  • Quando si desidera una cronologia dettagliata delle chat: Le pipeline non assistite forniscono una cronologia completa dell'interazione tra il modello e gli strumenti nell'elenco dei messaggi di output. L'elenco dei messaggi all'interno della pipeline non assistita conserva ogni risposta del modello e i risultati di ciascuna esecuzione della funzione. Questa registrazione dettagliata consente un debug, un'analisi e una verifica approfonditi del processo di chiamata dello strumento.
    immagine-20250113-220016.png

    Al contrario, le pipeline Assistant mantengono una cronologia dei messaggi più concisa, concentrandosi sui passaggi chiave e omettendo alcuni dettagli intermedi. Sebbene ciò possa semplificare la visione d'insieme dell'elenco dei messaggi, può anche rendere più difficile tracciare la sequenza esatta degli eventi o diagnosticare i problemi che possono sorgere durante l'esecuzione dello strumento nelle pipeline secondarie.

    immagine-20250113-220713.png

Quando utilizzare lo strumento di assistenza Chiamata delle pipeline:

Le pipeline di chiamata degli strumenti Assistant offrono anche un approccio semplificato all'integrazione degli LLM con strumenti esterni, dando priorità alla facilità d'uso e alle funzionalità integrate. Valuta l'utilizzo delle pipeline Assistant nelle seguenti situazioni:

  • Per una progettazione semplificata delle pipeline: le pipeline Assistant riducono la complessità delle pipeline eliminando la necessità di snap Tool Generator. Nelle pipeline Non-Assistant, questi snap sono essenziali per generare dinamicamente le definizioni degli strumenti all'interno della pipeline stessa. Con le pipeline Assistant, le definizioni degli strumenti vengono configurate in anticipo nelle impostazioni Assistant nella dashboard OpenAI/Azure OpenAI. Questa preconfigurazione si traduce in pipeline più brevi e più gestibili, semplificando lo sviluppo e la manutenzione.
  • Quando è necessario sfruttare gli strumenti integrati: se il vostro caso d'uso richiede funzionalità come la ricerca di file esterni o l'esecuzione di codice, le pipeline Assistant offrono queste funzionalità pronte all'uso attraverso i loro strumenti integrati File Search e Code Interpreter (vedere la Parte 5 per maggiori dettagli). Questi strumenti forniscono un modo comodo ed efficiente per estendere le capacità dell'LLM senza richiedere un'implementazione personalizzata all'interno della pipeline.

Parte 2: Breve introduzione a due pipeline

Strumenti non assistenti che richiamano pipeline

Punti chiave:

  • Le funzioni sono definite nel worker.
  • Lo snap Tool Calling della pipeline dei lavoratori gestisce tutte le interazioni del modello.
  • I risultati delle funzioni vengono raccolti e inviati al modello nella successiva iterazione tramite lo snap Tool Calling.

Strumento di assistenza per la chiamata delle pipeline

Punti chiave:

  • Non è necessario definire le funzioni in nessuna pipeline. Le funzioni sono predefinite nell'assistente.
  • Due schermate: interagisci con il modello:Crea ed esegui thread eInvia output dello strumento.
  • I risultati delle funzioni vengono raccolti e inviati immediatamente al modello durante l'iterazione corrente.

Parte 3: Confronto tra due condotte

Ecco due ragioni principali per cui le pipeline assistite e non assistite differiscono, elencate in ordine decrescente di importanza:

  1. Metodi distinti per inviare i risultati degli strumenti:
    1. Per le pipeline non assistite, i risultati degli strumenti vengono aggiunti all'elenco della cronologia dei messaggi e successivamente inoltrati al modello durante l'iterazionesuccessiva.
      Le pipeline non assistite presentano un comportamento "while-loop", in cui il worker interagisce con il modello all'inizio dell'iterazione e, mentre è necessario richiamare uno o più strumenti, il worker esegue tali strumenti.
    2. Al contrario, per gli assistenti, i risultati degli strumenti vengono inviati specificatamente a un endpoint dedicato progettato per gestire i risultati delle chiamate degli strumenti all'interno dell'iterazionecorrente.
      Le pipeline degli assistenti funzionano più come un "ciclo do-while". Il driver avvia l'interazione inviando il prompt al modello. Successivamente, il worker esegue prima gli strumenti e interagisce con il modello alla fine dell'iterazione per fornire i risultati degli strumenti.
  2. Definizioni degli strumenti predefinite e memorizzate per gli assistenti:
    1. A differenza delle pipeline senza assistente, gli assistenti hanno la capacità di predefinire e memorizzare le definizioni delle funzioni. Ciò elimina la necessità che i tre snap del generatore di funzioni trasmettano ripetutamente le definizioni degli strumenti al modello ad ogni richiesta. Di conseguenza, la pipeline di lavoro per gli assistenti appare più breve.

A causa delle differenze sopra menzionate, le pipeline non assistenti hanno un solo punto di interazione con il modello, situato nel worker.

Al contrario, le pipeline assistenti prevedono due punti di interazione: il driver invia il prompt iniziale al modello, mentre il worker invia i risultati dello strumento al modello.

Parte 4: Differenze nelle impostazioni di scatto

Condizione di arresto di Pipeloop

Una differenza fondamentale nelle impostazioni snap risiede nella condizione di arresto del pipeloop.

  • Condizione di arresto dell'assistente pipeline: $run.required_action == null.
  • Condizione di arresto della pipeline non assistita: $finish_reason != "tool_calls".

Risultato dell'assistente

Esempio in cui sono necessarie chiamate allo strumento:

 Esempio in cui NON sono richieste chiamate allo strumento:

Produzione dei non assistenti

Esempio in cui sono necessarie chiamate allo strumento:

Esempio in cui NON sono richieste chiamate allo strumento:

Parte 5: I due strumenti integrati dell'Assistente

L'assistente non solo supporta tutte le funzioni che possono essere definite nelle pipeline non assistite, ma fornisce anche due funzioni speciali integrate, ricerca file e interprete di codice, per la comodità dell'utente.

Se il modello determina che uno di questi strumenti è necessario, lo richiamerà ed eseguirà automaticamente all'interno dell'assistente senza richiedere l'intervento manuale dell'utente.

Non è necessario uno strumento chiamato pipeline per sperimentare la ricerca di file e l'interprete di codice. È sufficiente un semplice snap di creazione ed esecuzione thread.

File Search arricchisce l'Assistente con conoscenze esterne al suo modello, come informazioni proprietarie sui prodotti o documenti forniti dagli utenti. OpenAI analizza e suddivide automaticamente i documenti, crea e memorizza gli embedding e utilizza sia la ricerca vettoriale che quella per parole chiave per recuperare contenuti pertinenti e rispondere alle domande degli utenti.

Esempio

Domanda: Qual è il numero di incendi federali tra il 2018 e il 2022?

La risposta dell'assistente è la seguente:

[
  {
    "messages": [
      {
        "id": "msg_cyvIQG7htmHnwTTbfkrES3ms",
        "object": "thread.message",
        "created_at": 1731106910,
        "assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
        "thread_id": "thread_ciR3mFR1jEcXK07pX06jCRgM",
        "run_id": "run_61Xt9zvpXLYxfgIfF7GV8Nz2",
        "role": "assistant",
        "content": [
          {
            "type": "text",
            "text": {
              "value": "The number of federal fires between 2018 and 2022 is as follows:nn- 2018: 12,500n- 2019: 10,900n- 2020: 14,400n- 2021: 14,000n- 2022: 11,700【4:1†wildfire_stats.pdf】.",
              "annotations": [
                {
                  "type": "file_citation",
                  "text": "【4:1†wildfire_stats.pdf】",
                  "start_index": 140,
                  "end_index": 164,
                  "file_citation": {
                    "file_id": "file-fJGINZ4R7XlIGtjfvv0W71CH"
                  }
                }
              ]
            }
          }
        ],
        "attachments": [],
        "metadata": {}
      },
      {
        "id": "msg_LBP4fengd7GlQnu7ZkfqvM2W",
        "object": "thread.message",
        "created_at": 1731106907,
        "assistant_id": null,
        "thread_id": "thread_ciR3mFR1jEcXK07pX06jCRgM",
        "run_id": null,
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": {
              "value": "What is the number of federal fires between 2018 and 2022",
              "annotations": []
            }
          }
        ],
        "attachments": [],
        "metadata": {}
      }
    ],
    "run": {...}
  }
]

La risposta dell'assistente è corretta. La risposta alla domanda si trova nella prima riga di una tabella nella prima pagina del documentowildfire_stats.pdf, accessibile all'assistente tramite un archivio vettoriale.

Il file è memorizzato in un archivio vettoriale utilizzato dall'assistente:

Interprete di codice

Code Interpreter consente agli assistenti di scrivere ed eseguire codice Python in un ambiente di esecuzione sandbox. Questo strumento è in grado di elaborare file con dati e formati diversi e generare file con dati e immagini di grafici. Code Interpreter consente al tuo assistente di eseguire codice in modo iterativo per risolvere problemi complessi di programmazione e matematica. Quando il tuo assistente scrive codice che non riesce a essere eseguito, può iterare su questo codice tentando di eseguire codice diverso fino a quando l'esecuzione del codice non ha esito positivo.

Esempio

Richiesta: Trova il numero di incendi federali tra il 2018 e il 2022 e usa Matplotlib per disegnare un grafico lineare.

* Matplotlib è una libreria Python per la creazione di grafici.

La risposta dell'assistente è la seguente:

[
  {
    "messages": [
      {
        "id": "msg_lzBiM0J4sC0Zji510f1NOjjM",
        "object": "thread.message",
        "created_at": 1731108369,
        "assistant_id": "asst_nwIrRaBwD6E6xa7EmnDOy2fx",
        "thread_id": "thread_3q9AV6ivrYqqzsexv1rzMFSV",
        "run_id": "run_DbjZQbBVQgoVge74PRbyGh44",
        "role": "assistant",
        "content": [
          {
            "type": "image_file",
            "image_file": {
              "file_id": "file-CLHOiYRfuWD45DsN6M4b8ga9"
            }
          },
          {
            "type": "text",
            "text": {
              "value": "Here is the line chart showing the number of federal fires from 2018 to 2022. As you can see, there is a fluctuation in the number of fires over these years, with a peak in 2020.",
              "annotations": []
            }
          }
        ],
        "attachments": [],
        "metadata": {}
      },
      {
       ...,
        "content": [
          {
            "type": "text",
            "text": {
              "value": "The number of federal fires between 2018 and 2022 was as follows:nn- 2018: 12.5 thousand firesn- 2019: 10.9 thousand firesn- 2020: 14.4 thousand firesn- 2021: 14.0 thousand firesn- 2022: 11.7 thousand fires【4:0†wildfire_stats.pdf】.nnI will now create a line chart using Matplotlib to represent this data.",
              "annotations": [
                {
                  "type": "file_citation",
                  "text": "【4:0†wildfire_stats.pdf】",
                  "start_index": 206,
                  "end_index": 230,
                  "file_citation": {
                    "file_id": "file-fJGINZ4R7XlIGtjfvv0W71CH"
                  }
                }
              ]
            }
          }
        ],
        ...
      },
      {
        ...,
        "content": [
          {
            "type": "text",
            "text": {
              "value": "Find the number of federal fires between 2018 and 2022 and use Matplotlib to draw a line chart.",
              "annotations": []
            }
          }
        ],
        ...
      }
    ],
    "run": {...}
  }
]

Dalla risposta possiamo vedere che l'assistente ha indicato di aver utilizzato la ricerca file per trovare 5 anni di dati e quindi ha generato un file immagine. Questo file può essere scaricato dalla dashboard dell'assistente nella sezione file di archiviazione. È sufficiente aggiungere un'estensione file come .png per visualizzare l'immagine.

Parte 6: Riepilogo delle differenze principali

CaratteristicaPipeline di chiamata strumenti non assistentiStrumenti di supporto Chiamata delle pipeline
Definizione della funzioneDefinito all'interno della pipeline di lavoro utilizzando gli snap del generatore di funzioni.Predefinito e memorizzato nella configurazione dell'Assistente nella dashboard OpenAI/Azure OpenAI.
Invio dei risultati dello strumentoAggiunto alla cronologia dei messaggi e inviato al modello nellasuccessivaiterazione.Inviato a un endpoint dedicato all'interno dell'iterazionecorrente.
Punti di interazione del modelloUno (nella pipeline dei lavoratori).Due (il conducente invia la richiesta iniziale, l'addetto invia i risultati dello strumento).
Strumenti integratiNessuno.Ricerca file e interprete di codice.
Complessità della pipelineStruttura della pipeline più complessa a causa della definizione delle funzioni all'interno della pipeline.Struttura della pipeline più semplice poiché le funzioni sono definite esternamente.
Foto di Luna Wang
Ingegnere software presso SnapLogic
Categoria: Tecnica