24 Richiamare un agente distribuito

È possibile richiamare l'URL dell'endpoint dell'agente dall'applicazione di produzione.

Indipendentemente dall'interfaccia programmatica utilizzata per richiamare l'endpoint dell'agente, è necessario essere autenticati con OCI e disporre delle autorizzazioni pertinenti. Nel caso degli endpoint dell'agente, il chiamante deve disporre almeno dell'autorizzazione USE sull'endpoint dell'agente.

L'URI endpoint è documentato nella scheda Dettagli dell'interfaccia utente dell'agente. È possibile copiare l'URI endpoint nel codice per richiamare l'agente.


Pagina dei dettagli per un agente aperto con il campo URI endpoint evidenziato

Metodi per richiamare gli URI endpoint

È possibile richiamare l'URI dell'endpoint dell'agente mediante strumenti, SDK e interfacce CLI diversi.

I metodi seguenti consentono di richiamare l'URI dell'endpoint negli agenti di Oracle AI Data Platform Workbench.

Richiama con OCI CLI

L'esempio fornito mostra come utilizzare l'interfaccia CLI OCI e eseguire l'autenticazione con un token di sicurezza. Sostituire <your-agent-flow-endpoint-uri> con l'URI dell'endpoint dell'agente e <security_token> con il token di sicurezza OCI.
oci raw-request
--http-method POST
--target-uri <your-agent-flow-endpoint-uri>
--request-body '{"query":"Tell me about the Ryder Cup in 1985"}'
--auth <security_token>

Richiama con libreria di richieste Python

Puoi utilizzare l'SDK Python OCI per creare un firmatario da autenticare con OCI. La libreria di richieste Python può essere utilizzata per inviare una richiesta all'URI dell'endpoint dell'agente e restituire una risposta. L'esempio riportato di seguito mostra come utilizzare il principal utente tramite i file di configurazione e chiave privata OCI.
import oci import requests import json import uuid from contextlib import closing from requests import Request, Response
class AuthHelper: """ AuthHelper allows creating an OCI signer with either API key or security_token (which are short term sessions) """ def init(self, oci_profile: str, use_security_token:bool = True): config = oci.config.from_file(file_location="/Volumes/jr/default/misc/config",profile_name=oci_profile) if use_security_token: with open(config["security_token_file"], 'r') as f: token = f.read() private_key = oci.signer.load_private_key_from_file(config["key_file"])
 self.signer = oci.auth.signers.SecurityTokenSigner(token, private_key) else: self.signer = oci.signer.Signer( tenancy=config["tenancy"], user=config["user"], fingerprint=config["fingerprint"], private_key_file_location=config["key_file"], #pass_phrase=config.get("pass_phrase"), #private_key_content=config.get("key_content") )
@property
def Signer(self):
    return self.signer
 
class MyRawJsonRpcClient: """ Simple class using requests lib to post JSON to chat endpoint using OCI signing """ def init(self, chat_url:str, oci_profile: str, sessionKey:str, use_security_token:bool = True): self.authhelper = AuthHelper(oci_profile=oci_profile, use_security_token=use_security_token) self.authsigner = self.authhelper.Signer self.chat_url = chat_url self.sessionKey = sessionKey
def send(self, input:str) -> Response:
    body = {
        "isStreamEnabled" : False,
        "sessionKey" : self.sessionKey,
        "trace" : False,
        "input" :[{
            "role":"User",
            "content":[{
                "type" : "INPUT_TEXT",
                "text" : input                   
            }]
        }]
    }

    response:Request = requests.post(
        url =self.chat_url,
        params = None,
        auth = self.authsigner,
        json=body,
        headers={}
    )
    return response
È possibile chiamare l'URI dell'endpoint dell'agente creando un'istanza della classe MyRawJsonRPCClient e fornendo un valore di profilo OCI (che si trova nel file di configurazione OCI), l'URI dell'endpoint dell'agente (chat_url) e una sessionKey. È possibile fornire qualsiasi sessionKey arbitrario. sessionKey è l'identificativo univoco della sessione utente con l'agente. Se si continua a riutilizzare lo stesso sessionKey, i messaggi utente e le risposte dell'agente vengono aggiunti alla stessa conservazione.
client = MyRawJsonRpcClient(chat_url="<your-agent-flow-endpoint-uri>",
   oci_profile = "DEFAULT",
   sessionKey= “<your-session-key>”,
   use_security_token = False )
È inoltre possibile fornire un messaggio utente e utilizzare il client per inviare il messaggio all'URI dell'endpoint agente:
user_input = f"Hello, tell me a good dad joke."
r = client.send(input = user_input)
response_json = r.json()

Attraverso APEX

È possibile utilizzare l'esempio di codice disponibile nel repository Github di esempi di workbench di AI Data Platform. L'esempio descrive il processo di chiamata di un endpoint di distribuzione agente da un'applicazione APEX.

Attraverso Streamlit

È possibile utilizzare l'esempio di codice disponibile nel repository Github di esempi di workbench di AI Data Platform. L'esempio guida l'utente nel processo di chiamata di un endpoint di distribuzione agente da un'applicazione Streamlit.

Procedure ottimali - Risposte asincrone e non asincrone

Si consiglia di scrivere il codice client presumendo risposte asincrone. Ad esempio:

import httpx 
 
async def fetch_data(): 
    async with httpx.AsyncClient() as client: 
        response = await client.get(URL) 
        return response.json()