24 Appel d'un agent déployé

Vous pouvez appeler l'URL endpoint de l'agent à partir de l'application de production.

Quelle que soit l'interface de programmation utilisée pour appeler l'adresse d'agent, vous devez être authentifié auprès d'OCI et disposer des droits d'accès appropriés. Dans le cas d'adresses d'agent, l'appelant doit disposer au moins de l'autorisation USE sur l'adresse d'agent.

L'URI endpoint est documenté dans l'onglet de détails de l'interface utilisateur de l'agent. Vous pouvez copier cet URI endpoint dans votre code pour appeler l'agent.


Page de détails d'un agent ouvert avec le champ URI d'adresse mis en évidence

Méthodes d'appel des URI d'adresse

Vous pouvez appeler l'URI endpoint de l'agent via différents outils, kits SDK et interfaces de ligne de commande.

Les méthodes suivantes vous permettent d'appeler votre URI endpoint dans les agents Oracle AI Data Platform Workbench.

Appeler avec l'interface de ligne de commande OCI

L'exemple fourni montre comment utiliser l'interface de ligne de commande OCI et vous authentifier avec un jeton de sécurité. Remplacez <your-agent-flow-endpoint-uri> par l'URI d'adresse d'agent et <security_token> par le jeton de sécurité 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>

Appeler avec la bibliothèque de demandes Python

Vous pouvez utiliser le kit SDK Python OCI pour créer un signataire à authentifier auprès d'OCI. La bibliothèque de demandes Python peut être utilisée pour publier une demande sur l'URI endpoint de l'agent et renvoyer une réponse. L'exemple suivant montre comment utiliser le principal utilisateur via les fichiers de configuration et de clé privée 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
Vous pouvez appeler l'URI d'adresse d'agent en instanciant la classe MyRawJsonRPCClient et en fournissant une valeur de profil OCI (trouvée dans le fichier de configuration OCI), l'URI d'adresse d'agent (chat_url) et une clé de session. Vous pouvez fournir n'importe quel élément sessionKey arbitraire. sessionKey est l'identificateur unique de la session utilisateur avec l'agent. Si vous continuez à réutiliser le même fichier sessionKey, les messages utilisateur et les réponses de l'agent sont ajoutés à la même conservation.
client = MyRawJsonRpcClient(chat_url="<your-agent-flow-endpoint-uri>",
   oci_profile = "DEFAULT",
   sessionKey= “<your-session-key>”,
   use_security_token = False )
Vous pouvez également fournir un message utilisateur et utiliser le client pour envoyer le message à l'URI endpoint de l'agent :
user_input = f"Hello, tell me a good dad joke."
r = client.send(input = user_input)
response_json = r.json()

via APEX

Vous pouvez utiliser l'exemple de code disponible dans le référentiel Github d'exemples AI Data Platform Workbench. Cet exemple vous guide tout au long du processus d'appel d'une adresse de déploiement d'agent à partir d'une application APEX.

Par Streamlit

Vous pouvez utiliser l'exemple de code disponible dans le référentiel Github d'exemples AI Data Platform Workbench. L'exemple vous guide tout au long du processus d'appel d'une adresse de déploiement d'agent à partir d'une application Streamlit.

Meilleures pratiques - Réponses asynchrones et non asynchrones

Nous vous recommandons d'écrire votre code client en supposant des réponses asynchrones. Exemple :

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