Avant de commencer
Ce tutoriel suppose que vous avez lu et suivi les instructions de :
- Développez un agent LangChain : pour développer
agent
en tant qu'instance deLangchainAgent
. - Authentification de l'utilisateur pour s'authentifier en tant qu'utilisateur afin d'interroger l'agent.
- Importez et initialisez le SDK pour initialiser le client afin d'obtenir une instance déployée (si nécessaire).
Obtenir une instance d'un agent
Pour interroger un LangchainAgent
, vous devez d'abord créer une instance ou obtenir une instance existante.
Pour obtenir le LangchainAgent
correspondant à un ID de ressource spécifique :
SDK Vertex AI pour Python
Exécutez le code suivant :
import vertexai
client = vertexai.Client( # For service interactions via client.agent_engines
project="PROJECT_ID",
location="LOCATION",
)
agent = client.agent_engines.get(name="projects/PROJECT_ID/locations/LOCATION/reasoningEngines/RESOURCE_ID")
print(agent)
Où :
PROJECT_ID
correspond à l'ID de projet Google Cloud sous lequel vous développerez et déploierez des agents.LOCATION
désigne l'une des régions compatibles.RESOURCE_ID
est l'ID de l'agent déployé en tant que ressourcereasoningEngine
.
Bibliothèque de requêtes Python
Exécutez le code suivant :
from google import auth as google_auth
from google.auth.transport import requests as google_requests
import requests
def get_identity_token():
credentials, _ = google_auth.default()
auth_request = google_requests.Request()
credentials.refresh(auth_request)
return credentials.token
response = requests.get(
f"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/RESOURCE_ID",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {get_identity_token()}",
},
)
API REST
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/RESOURCE_ID
Lorsque vous utilisez le SDK Vertex AI pour Python, l'objet agent
correspond à une classe AgentEngine
qui contient les éléments suivants :
- un
agent.api_resource
contenant des informations sur l'agent déployé. Vous pouvez également appeleragent.operation_schemas()
pour renvoyer la liste des opérations compatibles avec l'agent. Pour en savoir plus, consultez Opérations compatibles. - un
agent.api_client
qui permet des interactions de service synchrones. - un
agent.async_api_client
qui permet des interactions de service asynchrones.
Le reste de cette section suppose que vous disposez d'une instance AgentEngine
nommée agent
.
Opérations compatibles
Les opérations suivantes sont acceptées :
query
: pour obtenir une réponse à une requête de manière synchrone.stream_query
: pour diffuser une réponse à une requête.
Les méthodes query
et stream_query
acceptent le même type d'arguments :
input
: messages à envoyer à l'agent.config
: configuration (le cas échéant) pour le contexte de la requête.
Interroger l'agent
La commande
agent.query(input="What is the exchange rate from US dollars to SEK today?")
équivaut à ce qui suit (sous forme complète) :
agent.query(input={
"input": [ # The input is represented as a list of messages (each message as a dict)
{
# The role (e.g. "system", "user", "assistant", "tool")
"role": "user",
# The type (e.g. "text", "tool_use", "image_url", "media")
"type": "text",
# The rest of the message (this varies based on the type)
"text": "What is the exchange rate from US dollars to Swedish currency?",
},
]
})
Les rôles aident le modèle à distinguer les différents types de messages lors de la réponse. Lorsque role
est omis dans l'entrée, la valeur par défaut est "user"
.
Rôle | Description |
---|---|
system |
Utilisé pour indiquer au modèle de chat comment se comporter et fournir un contexte supplémentaire. Non pris en charge par tous les fournisseurs de modèles de chat. |
user |
Représente l'entrée d'un utilisateur interagissant avec le modèle, généralement sous la forme de texte ou d'une autre entrée interactive. |
assistant |
Représente une réponse du modèle, qui peut inclure du texte ou une demande d'appel d'outils. |
tool |
Message utilisé pour renvoyer les résultats d'un appel d'outil au modèle après récupération de données ou traitement externes. |
Le type
du message déterminera également la façon dont le reste du message est interprété (voir Gérer le contenu multimodal).
Interroger l'agent avec du contenu multimodal
Nous allons utiliser l'agent suivant (qui transmet l'entrée au modèle et n'utilise aucun outil) pour illustrer comment transmettre des entrées multimodales à un agent :
agent = agent_engines.LangchainAgent(
model="gemini-2.0-flash",
runnable_builder=lambda model, **kwargs: model,
)
Les messages multimodaux sont représentés par des blocs de contenu qui spécifient un type
et les données correspondantes. En général, pour le contenu multimodal, vous devez spécifier type
sur "media"
, file_uri
pour pointer vers un URI Cloud Storage et mime_type
pour interpréter le fichier.
Image
agent.query(input={"input": [
{"type": "text", "text": "Describe the attached media in 5 words!"},
{"type": "media", "mime_type": "image/jpeg", "file_uri": "gs://cloud-samples-data/generative-ai/image/cricket.jpeg"},
]})
Vidéo
agent.query(input={"input": [
{"type": "text", "text": "Describe the attached media in 5 words!"},
{"type": "media", "mime_type": "video/mp4", "file_uri": "gs://cloud-samples-data/generative-ai/video/pixel8.mp4"},
]})
Audio
agent.query(input={"input": [
{"type": "text", "text": "Describe the attached media in 5 words!"},
{"type": "media", "mime_type": "audio/mp3", "file_uri": "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"},
]})
Pour obtenir la liste des types MIME compatibles avec Gemini, consultez la documentation sur :
Interroger l'agent avec une configuration exécutable
Lorsque vous interrogez l'agent, vous pouvez également spécifier un config
pour l'agent (qui suit le schéma d'un RunnableConfig
).
Voici deux scénarios courants :
- Paramètres de configuration par défaut :
run_id
/run_name
: identifiant de l'exécution.tags
/metadata
: classificateur pour l'exécution lors du traçage avec OpenTelemetry.
- Paramètres de configuration personnalisés (via
configurable
) :session_id
: session sous laquelle l'exécution a lieu (voir Historique des discussions du store).thread_id
: thread sous lequel l'exécution a lieu (voir Stocker les points de contrôle).
À titre d'exemple :
import uuid
run_id = uuid.uuid4() # Generate an ID for tracking the run later.
response = agent.query(
input="What is the exchange rate from US dollars to Swedish currency?",
config={ # Specify the RunnableConfig here.
"run_id": run_id # Optional.
"tags": ["config-tag"], # Optional.
"metadata": {"config-key": "config-value"}, # Optional.
"configurable": {"session_id": "SESSION_ID"} # Optional.
},
)
print(response)