Oggi andiamo a costruire qualcosa di speciale, chiamato OpenHarness: un ambiente di sviluppo per agenti di intelligenza artificiale di facile utilizzo. Per comprendere come funziona uno di questi ambienti, costruiamo un sistema da zero e riveliamo come un ambiente reale riceve un'incarico, lascia che il modello decida l'azione successiva, validi e esegui le chiamate degli strumenti, ritorni le osservazioni e prosegua fino al completamento. Il nostro obiettivo è di creare qualcosa di operativo in modo da poter sperimentare con l'architettura senza l'utilizzo di chiavi API o di infrastrutture complesse.
Partiamo con il motore principale di OpenHarness che metterà in pratica i principi fondamentali per creare un ambiente operativo:
Impostare il nucleo OpenHarness
Il codice esempio qui di seguito è la base principale per il nucleo dell'OpenHarness. Esso si occupa di fornire i fondamenti per la costruzione e l'implementazione dell'agente AI. Quest'implementazione consente l'esecuzione di un singolo ambiente, il che facilita sperimentazioni e test di base.
- Uso run_async() per eseguire codice asincrono in un ambiente di produzione.
- Definiamo utilizzo Usage, ToolCall, AssistantTurn, Message per la traccia e la gestione delle interazioni.
- Utilizziamo count_tokens per stimare l'utilizzo dei token di linguaggio, fondamentale per controllare costi.
- Gli strumenti di analisi come buildjsonschema() e instantiate() forniscono schemi e validazioni.
Il codice sottostante costituisce la base per implementare la classe principale e le sue interazioni, fornendo un esempio concreto:
Dichiarare l’ambiente
Per creare la base strutturale e funzionale, iniziamo dichiarando le funzioni chiave e inizializziamo parametri necessari per la gestione.
BANNER: Un banner per dividere le sezioni e i titoli all’interno dell’implementazione OpenHarness.
explain(title, body): Una funzione per spiegare in formato chiaro le varie componenti.
short(text, n): Per abbreviare il testo all’interno dell’ambiente, permettendoci di mantenere un flusso leggibile.
Usage: Traccia l’utilizzo, specifica token in input e output.
ToolCall: Rappresenta le chiamate alle funzioni, con chiave unica e dati associati.
AssistantTurn: Contiene la generazione di una risposta, eventuali chiamate a uno strumento, la ragione per la conclusione e l'utilizzo.
Message: Un singolo messaggio all’interno della conversazione o del thread.
count_tokens: Capiamo approssimativamente quanta informazione stiamo gestendo.
Cost Tracking
Possiamo stimare il costo in dollari per i servizi utilizzati, utilizzando un prezzo ipotetico per i token di input e output.
Schema di Input
Il processo per ottenere schemi di input utilizza dichiarazioni precise per ogni campo, fornendo anche un modo per istanziare i dati in modo coerente.
Conclusione
Costruire un ambiente per agenti come OpenHarness richiede attenzione e un'implementazione pensata passo per passo. Creare un sistema di questo tipo ci permette di comprendere in profondità la natura stessa del lavoro svolto e fornire una base solida per ulteriori sperimentazioni, personalizzazioni e miglioramenti futuri. Questo esempio fornisce una guida completa per costruire un ambiente funzionante, da cui si potranno partire ulteriori estensioni e integrazioni.