Condividi tramite


Creare un agente di intelligenza artificiale

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Questo articolo illustra come creare un agente di intelligenza artificiale chiamante tramite Mosaic AI Agent Framework.

Informazioni su come fornire agli strumenti di un agente e iniziare a chattare con loro per testare e creare un prototipo dell'agente. Dopo aver completato la creazione di prototipi dell'agente, esportare il codice Python che definisce l'agente per scorrere e distribuire l'agente di intelligenza artificiale.

Requisiti

Creare gli strumenti dell'agente di intelligenza artificiale

Il primo passaggio consiste nel creare uno strumento da assegnare all'agente. Gli agenti usano strumenti per eseguire azioni oltre alla generazione del linguaggio, ad esempio per recuperare dati strutturati o non strutturati, eseguire codice o comunicare con i servizi remoti (ad esempio, inviare un messaggio di posta elettronica o Slack).

Per altre informazioni sulla creazione di strumenti agente, vedere Creare gli strumenti dell'agente di intelligenza artificiale.

Per questa guida, creare una funzione del catalogo Unity che esegue il codice Python. Un agente può usare questo strumento per eseguire Python fornito da un utente o scritto dall'agente stesso.

Eseguire il codice seguente in una cella notebook Usa il notebook magic %sql per creare una funzione del catalogo Unity denominata python_exec.

%sql
CREATE OR REPLACE FUNCTION
main.default.python_exec (
code STRING COMMENT 'Python code to execute. Remember to print the final result to stdout.'
)
RETURNS STRING
LANGUAGE PYTHON
DETERMINISTIC
COMMENT 'Executes Python code in the sandboxed environment and returns its stdout. The runtime is stateless and you can not read output of the previous tool executions. i.e. No such variables "rows", "observation" defined. Calling another tool inside a Python code is NOT allowed. Use standard python libraries only.'
AS $$
import sys
from io import StringIO
sys_stdout = sys.stdout
redirected_output = StringIO()
sys.stdout = redirected_output
exec(code)
sys.stdout = sys_stdout
return redirected_output.getvalue()
$$

Creare prototipi di agenti per chiamate di strumenti in AI Playground

Dopo aver creato la funzione Catalogo Unity, usare AI Playground per assegnare lo strumento a un LLM e testare l'agente. AI Playground offre una sandbox per creare prototipi di agenti che chiamano gli strumenti.

Dopo aver soddisfatto l'agente di intelligenza artificiale, è possibile esportarlo per svilupparlo ulteriormente in Python o distribuirlo come endpoint di Model serving così come è.

Nota

Il catalogo Unity e il calcolo serverless, Mosaic AI Agent Framework e i modelli di base con pagamento per token o i modelli esterni devono essere disponibili nell'area di lavoro corrente per creare prototipi di agenti in AI Playground.

Per creare un prototipo di endpoint che chiama uno strumento.

  1. In Playground selezionare un modello con l'etichetta Strumenti abilitata .

    Selezionare un LLM che chiama lo strumento

  2. Selezionare Strumenti e specificare i nomi delle funzioni del catalogo Unity nell'elenco a discesa:

    Selezionare uno strumento

  3. Chat per testare la combinazione corrente di LLM, strumenti e prompt di sistema e provare le varianti.

    Creare un prototipo di LLM

Esportare e distribuire agenti di AI Playground

Dopo aver aggiunto strumenti e testato l'agente, esportare l'agente Playground nei notebook Python:

  1. Fare clic su Esporta per generare notebook Python che consentono di sviluppare e distribuire l'agente di intelligenza artificiale.

    Dopo aver esportato il codice dell'agente, vengono visualizzati tre file salvati nell'area di lavoro:

    • Notebook agent: contiene codice Python che definisce l'agente usando LangChain.
    • Notebook driver: contiene codice Python per registrare, tracciare, registrare e distribuire l'agente di intelligenza artificiale usando Mosaic AI Agent Framework.
    • config.yml: contiene informazioni di configurazione sull'agente, incluse le definizioni degli strumenti.
  2. Aprire il notebook agent per visualizzare il codice LangChain che definisce l'agente, usare questo notebook per testare e scorrere l'agente a livello di codice, ad esempio definire altri strumenti o regolare i parametri dell'agente.

    Nota

    Il codice esportato potrebbe avere un comportamento diverso rispetto alla sessione di ai playground. Databricks consiglia di eseguire i notebook esportati per scorrere ed eseguire il debug, valutare ulteriormente la qualità dell'agente e quindi distribuire l'agente per condividerli con altri utenti.

  3. Dopo aver soddisfatto gli output dell'agente, è possibile eseguire il notebook driver per registrare e distribuire l'agente in un endpoint model serving.

Definire un agente nel codice

Oltre a generare codice agente da AI Playground, è anche possibile definire un agente nel codice manualmente, usando framework come LangChain o codice Python. Per distribuire un agente tramite Agent Framework, l'input deve essere conforme a uno dei formati di input e output supportati.

Usare i parametri per configurare l'agente

In Agent Framework è possibile usare i parametri per controllare la modalità di esecuzione degli agenti. In questo modo è possibile eseguire rapidamente l'iterazione in base a diverse caratteristiche dell'agente senza dover modificare il codice. I parametri sono coppie chiave-valore definite in un dizionario Python o in un file .yaml.

Per configurare il codice, creare un oggetto ModelConfig, un set di parametri chiave-valore. ModelConfig è un dizionario Python o un file .yaml. Ad esempio, è possibile usare un dizionario durante lo sviluppo e convertirlo in un file .yaml per la distribuzione di produzione e CI/CD. Per informazioni su ModelConfig, vedere la documentazione di MLflow.

Di seguito è illustrato un esempio di ModelConfig.

llm_parameters:
  max_tokens: 500
  temperature: 0.01
model_serving_endpoint: databricks-dbrx-instruct
vector_search_index: ml.docs.databricks_docs_index
prompt_template: 'You are a hello world bot. Respond with a reply to the user''s
  question that indicates your prompt template came from a YAML file. Your response
  must use the word "YAML" somewhere. User''s question: {question}'
prompt_template_input_vars:
- question

Per richiamare la configurazione dal codice, usare una delle opzioni seguenti:

# Example for loading from a .yml file
config_file = "configs/hello_world_config.yml"
model_config = mlflow.models.ModelConfig(development_config=config_file)

# Example of using a dictionary
config_dict = {
    "prompt_template": "You are a hello world bot. Respond with a reply to the user's question that is fun and interesting to the user. User's question: {question}",
    "prompt_template_input_vars": ["question"],
    "model_serving_endpoint": "databricks-dbrx-instruct",
    "llm_parameters": {"temperature": 0.01, "max_tokens": 500},
}

model_config = mlflow.models.ModelConfig(development_config=config_dict)

# Use model_config.get() to retrieve a parameter value
value = model_config.get('sample_param')

Impostare lo schema del retriever

Gli agenti di intelligenza artificiale usano spesso i retriever, un tipo di strumento agente che trova e restituisce documenti pertinenti usando un indice di ricerca vettoriale. Per altre informazioni sui retriever, vedere Creare uno strumento di recupero della ricerca vettoriale.

Per assicurarsi che i retriever vengano tracciati correttamente, chiamare mlflow.models.set_retriever_schema quando si definisce l'agente nel codice. Usare set_retriever_schema per eseguire il mapping dei nomi delle colonne nella tabella restituita ai campi previsti di MLflow, ad primary_keyesempio , text_columne doc_uri.

# Define the retriever's schema by providing your column names
# These strings should be read from a config dictionary
mlflow.models.set_retriever_schema(
    name="vector_search",
    primary_key="chunk_id",
    text_column="text_column",
    doc_uri="doc_uri"
    # other_columns=["column1", "column2"],
)

Nota

La doc_uri colonna è particolarmente importante quando si valutano le prestazioni del recuperatore. doc_uri è l'identificatore principale per i documenti restituiti dal retriever, consentendo di confrontarli con i set di valutazione della verità di base. Vedere Set di valutazione

È anche possibile specificare colonne aggiuntive nello schema del retriever fornendo un elenco di nomi di colonna con il other_columns campo .

Se si dispone di più retriever, è possibile definire più schemi usando nomi univoci per ogni schema di recupero.

Formati di input e output supportati

Agent Framework usa le firme del modello MLflow per definire schemi di input e output per gli agenti. Le funzionalità di Mosaic AI Agent Framework richiedono un set minimo di campi di input/output per interagire con funzionalità come l'app di revisione e il playground di intelligenza artificiale. Per altre informazioni, vedere Definire lo schema di input e output di un agente.

Notebook di esempio

Questi Notebook creano una semplice catena "Hello, world" per illustrare come creare un'applicazione a catena in Databricks. Il primo esempio crea una catena semplice. Il secondo Notebook di esempio illustra come usare i parametri per ridurre al minimo le modifiche al codice durante lo sviluppo.

Notebook a catena semplice

Ottenere il notebook

Notebook del driver a catena semplice

Ottenere il notebook

Notebook a catena con parametri

Ottenere il notebook

Notebook del driver di catena parametrizzato

Ottenere il notebook

Passaggi successivi