AG2, une version dérivée de la version originale d'AutoGen, est un framework Open Source permettant de créer des agents optimisés par l'IA.
Cette page vous explique comment développer un agent à l'aide du modèle AG2 spécifique au framework (classe AG2Agent
du SDK Vertex AI pour Python). L'agent renvoie le taux de change entre deux devises à une date spécifiée. Pour ce faire, procédez comme suit :
- Définir et configurer un exécutable
- Définir et utiliser un outil
- (Facultatif) Personnaliser l'orchestration
Avant de commencer
Assurez-vous que votre environnement est configuré en suivant la procédure décrite dans la section Configurer votre environnement.
Étape 1. Définir et configurer un exécutable
Définissez la version de modèle à utiliser.
model = "gemini-1.5-flash-001"
Définissez le nom de l'exécutable à utiliser.
runnable_name = "Get Exchange Rate Agent"
(Facultatif) Configurez le modèle.
from google.cloud.aiplatform.aiplatform import initializer
llm_config = {
"config_list": [{
"project_id": initializer.global_config.project,
"location": initializer.global_config.location,
"model": "gemini-1.5-flash-001",
"api_type": "google",
}]
}
Pour en savoir plus sur la configuration du modèle dans AG2, consultez Présentation détaillée de la configuration du modèle.
(Facultatif) Configurez les paramètres de sécurité du modèle. Voici un exemple de configuration des paramètres de sécurité :
from vertexai.generative_models import HarmBlockThreshold, HarmCategory
safety_settings = {
HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_ONLY_HIGH,
}
for config_item in llm_config["config_list"]:
config_item["safety_settings"] = safety_settings
Pour en savoir plus sur les options disponibles pour les paramètres de sécurité dans Gemini, consultez la section Configurer les attributs de sécurité.
Créez un AG2Agent
à l'aide des configurations de modèle:
agent = agent_engines.AG2Agent(
model=model, # Required.
runnable_name=runnable_name, # Required.
llm_config=llm_config, # Optional.
)
Si vous exécutez le code dans un environnement interactif (par exemple, un terminal ou un notebook Colab), vous pouvez exécuter une requête comme étape de test intermédiaire:
response = agent.query(input="What is the exchange rate from US dollars to Swedish currency?", max_turns=1)
print(response)
La réponse est un dictionnaire Python semblable à l'exemple suivant:
{'chat_id': None,
'chat_history': [{'content': 'What is the exchange rate from US dollars to Swedish currency?',
'role': 'assistant',
'name': 'user'},
{'content': 'I do not have access to real-time information, including currency exchange rates. To get the most up-to-date exchange rate from US dollars to Swedish Krona (SEK), I recommend using a reliable online currency converter or checking with your bank. \n',
'role': 'user',
'name': 'Exchange Rate Agent'}],
'summary': 'I do not have access to real-time information, including currency exchange rates. To get the most up-to-date exchange rate from US dollars to Swedish Krona (SEK), I recommend using a reliable online currency converter or checking with your bank. \n',
'cost': {'usage_including_cached_inference': {'total_cost': 5.2875e-06,
'gemini-1.5-flash-001': {'cost': 5.2875e-06,
'prompt_tokens': 34,
'completion_tokens': 62,
'total_tokens': 96}},
'usage_excluding_cached_inference': {'total_cost': 5.2875e-06,
'gemini-1.5-flash-001': {'cost': 5.2875e-06,
'prompt_tokens': 34,
'completion_tokens': 62,
'total_tokens': 96}}},
'human_input': []}
(Facultatif) Personnalisation avancée
Le modèle AG2Agent
utilise api_type=="google"
par défaut, car il permet d'accéder à tous les modèles de base disponibles dans Google Cloud. Pour utiliser un modèle non disponible via api_type=="google"
, vous pouvez personnaliser le paramètre llm_config
.
Pour obtenir la liste des modèles compatibles avec AG2 et de leurs fonctionnalités, consultez la section Fournisseurs de modèles.
L'ensemble des valeurs acceptées pour llm_config=
est spécifique à chaque modèle de chat. Vous devez donc vous reporter à la documentation correspondante pour plus de détails.
Gemini
Installé par défaut.
Il est utilisé dans le modèle AG2Agent
lorsque vous omettez l'argument llm_config
. Par exemple :
agent = agent_engines.AG2Agent(
model=model, # Required.
runnable_name=runnable_name # Required.
)
Anthropic
Commencez par suivre la documentation pour configurer un compte et installer le package.
Ensuite, définissez un llm_config
:
llm_config = {
"config_list": [{
"model": "claude-3-5-sonnet-20240620", # Required.
"api_key": "ANTHROPIC_API_KEY", # Required.
"api_type": "anthropic", # Required.
}]
}
Enfin, utilisez-le dans le modèle AG2Agent
avec le code suivant :
agent = agent_engines.AG2Agent(
model="claude-3-5-sonnet-20240620", # Required.
runnable_name=runnable_name, # Required.
llm_config=llm_config, # Optional.
)
OpenAI
Vous pouvez utiliser OpenAI
conjointement avec l'API ChatCompletions de Gemini.
Commencez par définir un llm_config
:
import google.auth
from google.cloud.aiplatform.aiplatform import initializer
project = initializer.global_config.project
location = initializer.global_config.location
base_url = f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project}/locations/{location}/endpoints/openapi"
# Note: the credential lives for 1 hour by default.
# After expiration, it must be refreshed.
creds, _ = google.auth.default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_req = google.auth.transport.requests.Request()
creds.refresh(auth_req)
llm_config = {
"config_list": [{
"model": "google/gemini-1.5-flash-001", # Required.
"api_type": "openai", # Required.
"base_url": base_url, # Required.
"api_key": creds.token, # Required.
}]
}
Enfin, utilisez-le dans le modèle AG2Agent
avec le code suivant :
agent = agent_engines.AG2Agent(
model="google/gemini-1.5-flash-001", # Or "meta/llama3-405b-instruct-maas".
runnable_name=runnable_name, # Required.
llm_config=llm_config, # Optional.
)
Étape 2 : Définir et utiliser un outil
Une fois votre modèle défini, l'étape suivante consiste à définir les outils qu'il utilise pour le raisonnement. Un outil peut être un outil AG2 ou une fonction Python.
Lorsque vous définissez votre fonction, il est important d'inclure des commentaires qui décrivent pleinement et clairement les paramètres de la fonction, ce qu'elle fait et ce qu'elle renvoie. Le modèle utilise ces informations pour déterminer quelle fonction utiliser. Vous devez également tester votre fonction localement pour vérifier qu'elle fonctionne.
Utilisez le code suivant pour définir une fonction qui renvoie un taux de change :
def get_exchange_rate(
currency_from: str = "USD",
currency_to: str = "EUR",
currency_date: str = "latest",
):
"""Retrieves the exchange rate between two currencies on a specified date.
Uses the Frankfurter API (https://api.frankfurter.app/) to obtain
exchange rate data.
Args:
currency_from: The base currency (3-letter currency code).
Defaults to "USD" (US Dollar).
currency_to: The target currency (3-letter currency code).
Defaults to "EUR" (Euro).
currency_date: The date for which to retrieve the exchange rate.
Defaults to "latest" for the most recent exchange rate data.
Can be specified in YYYY-MM-DD format for historical rates.
Returns:
dict: A dictionary containing the exchange rate information.
Example: {"amount": 1.0, "base": "USD", "date": "2023-11-24",
"rates": {"EUR": 0.95534}}
"""
import requests
response = requests.get(
f"https://api.frankfurter.app/{currency_date}",
params={"from": currency_from, "to": currency_to},
)
return response.json()
Pour tester la fonction avant de l'utiliser dans votre agent, exécutez la commande suivante:
get_exchange_rate(currency_from="USD", currency_to="SEK")
La sortie devrait ressembler à ce qui suit :
{'amount': 1.0, 'base': 'USD', 'date': '2024-02-22', 'rates': {'SEK': 10.3043}}
Pour utiliser l'outil dans le modèle AG2Agent
, vous devez l'ajouter à la liste des outils sous l'argument tools=
:
agent = agent_engines.AG2Agent(
model=model, # Required.
runnable_name=runnable_name, # Required.
tools=[get_exchange_rate], # Optional.
)
Vous pouvez tester l'agent localement en exécutant des requêtes de test. Exécutez la commande suivante pour tester l'agent en local en utilisant le dollar américain et la couronne suédoise:
response = agent.query(input="What is the exchange rate from US dollars to Swedish currency?", max_turns=2)
La réponse est un dictionnaire semblable à celui-ci:
{'chat_id': None,
'chat_history': [{'content': 'What is the exchange rate from US dollars to Swedish currency?',
'role': 'assistant',
'name': 'user'},
{'content': '',
'tool_calls': [{'id': '2285',
'function': {'arguments': '{"currency_from": "USD", "currency_to": "SEK"}',
'name': 'get_exchange_rate'},
'type': 'function'}],
'role': 'assistant'},
{'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}",
'tool_responses': [{'tool_call_id': '2285',
'role': 'tool',
'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}"}],
'role': 'tool',
'name': 'user'},
{'content': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
'role': 'user',
'name': 'Get Exchange Rate Agent'},
{'content': 'What is the exchange rate from US dollars to Swedish currency?',
'role': 'assistant',
'name': 'user'},
{'content': '',
'tool_calls': [{'id': '4270',
'function': {'arguments': '{"currency_from": "USD", "currency_to": "SEK"}',
'name': 'get_exchange_rate'},
'type': 'function'}],
'role': 'assistant'},
{'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}",
'tool_responses': [{'tool_call_id': '4270',
'role': 'tool',
'content': "{'amount': 1.0, 'base': 'USD', 'date': '2025-02-27', 'rates': {'SEK': 10.6509}}"}],
'role': 'tool',
'name': 'user'},
{'content': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
'role': 'user',
'name': 'Get Exchange Rate Agent'}],
'summary': 'The current exchange rate is 1 USD to 10.6509 SEK. \n',
'cost': {'usage_including_cached_inference': {'total_cost': 0.0002790625,
'gemini-1.5-flash-001': {'cost': 0.0002790625,
'prompt_tokens': 757,
'completion_tokens': 34,
'total_tokens': 791}},
'usage_excluding_cached_inference': {'total_cost': 0.0002790625,
'gemini-1.5-flash-001': {'cost': 0.0002790625,
'prompt_tokens': 757,
'completion_tokens': 34,
'total_tokens': 791}}},
'human_input': []}
Étape 3 : Personnaliser l'orchestration
Tous les agents AG2 implémentent l'interface ConversableAgent, qui fournit des schémas d'entrée et de sortie pour l'orchestration. Le AG2Agent
nécessite la création d'un exécutable pour qu'il puisse répondre aux requêtes. Par défaut, AG2Agent
crée un tel exécutable en liant le modèle à des outils.
Vous pouvez personnaliser l'orchestration si vous souhaitez (i) implémenter un agent d'assistance qui résout une tâche avec un modèle, (ii) implémenter un agent de proxy utilisateur qui peut exécuter du code et fournir des commentaires aux autres agents, ou (iii) implémenter un agent de raisonnement qui résout une tâche avec un modèle et un raisonnement en arborescence.
Pour ce faire, vous devez remplacer l'exécutable par défaut lors de la création de AG2Agent
en spécifiant l'argument runnable_builder=
avec une fonction Python de la signature suivante:
def runnable_builder(
**runnable_kwargs,
):
Vous disposez ainsi de différentes options pour personnaliser la logique d'orchestration.
Assistant
Dans le cas le plus simple, pour créer un agent d'assistance sans orchestration, vous pouvez remplacer runnable_builder
par AG2Agent
.
def runnable_builder(**kwargs):
from autogen import agentchat
return agentchat.AssistantAgent(**kwargs)
agent = agent_engines.AG2Agent(
model=model,
runnable_name=runnable_name,
runnable_builder=runnable_builder,
)
User Proxy Agent
Dans le cas le plus simple, pour créer un agent d'assistance sans orchestration, vous pouvez remplacer runnable_builder
par AG2Agent
.
def runnable_builder(**kwargs):
from autogen import agentchat
return agentchat.UserProxyAgent(**kwargs)
agent = agent_engines.AG2Agent(
model=model,
runnable_name=runnable_name,
runnable_builder=runnable_builder,
)
Agent de raisonnement
Dans le cas le plus simple, pour créer un agent de raisonnement sans orchestration, vous pouvez remplacer runnable_builder
par AG2Agent
.
def runnable_builder(**kwargs):
from autogen import agentchat
return agentchat.ReasoningAgent(**kwargs)
agent = agent_engines.AG2Agent(
model=model,
runnable_name=runnable_name,
runnable_builder=runnable_builder,
)