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.

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
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
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
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()