|
|
""" |
|
|
Agent 2: Agent avec outils (Tools) pour calculs financiers |
|
|
|
|
|
Cet agent démontre l'utilisation d'outils Python que l'agent peut appeler |
|
|
pour effectuer des calculs financiers complexes. |
|
|
""" |
|
|
|
|
|
import asyncio |
|
|
from typing import Annotated |
|
|
from pydantic import BaseModel |
|
|
from pydantic_ai import Agent, ModelSettings |
|
|
|
|
|
from app.models import finance_model |
|
|
|
|
|
|
|
|
|
|
|
def calculer_valeur_future( |
|
|
capital_initial: float, |
|
|
taux_annuel: float, |
|
|
duree_annees: float |
|
|
) -> str: |
|
|
"""Calcule la valeur future avec intérêts composés. |
|
|
|
|
|
Args: |
|
|
capital_initial: Montant initial en euros |
|
|
taux_annuel: Taux d'intérêt annuel (ex: 0.05 pour 5%) |
|
|
duree_annees: Durée en années |
|
|
|
|
|
Returns: |
|
|
Valeur future calculée |
|
|
""" |
|
|
valeur_future = capital_initial * (1 + taux_annuel) ** duree_annees |
|
|
interets = valeur_future - capital_initial |
|
|
return ( |
|
|
f"Valeur future: {valeur_future:,.2f}€\n" |
|
|
f"Intérêts générés: {interets:,.2f}€\n" |
|
|
f"Capital initial: {capital_initial:,.2f}€" |
|
|
) |
|
|
|
|
|
|
|
|
def calculer_versement_mensuel( |
|
|
capital_emprunte: float, |
|
|
taux_annuel: float, |
|
|
duree_mois: int |
|
|
) -> str: |
|
|
"""Calcule le versement mensuel pour un prêt. |
|
|
|
|
|
Args: |
|
|
capital_emprunte: Montant emprunté en euros |
|
|
taux_annuel: Taux d'intérêt annuel (ex: 0.04 pour 4%) |
|
|
duree_mois: Durée du prêt en mois |
|
|
|
|
|
Returns: |
|
|
Versement mensuel calculé |
|
|
""" |
|
|
taux_mensuel = taux_annuel / 12 |
|
|
versement = capital_emprunte * ( |
|
|
taux_mensuel * (1 + taux_mensuel) ** duree_mois |
|
|
) / ((1 + taux_mensuel) ** duree_mois - 1) |
|
|
|
|
|
total_rembourse = versement * duree_mois |
|
|
cout_total = total_rembourse - capital_emprunte |
|
|
|
|
|
return ( |
|
|
f"Versement mensuel: {versement:,.2f}€\n" |
|
|
f"Total remboursé: {total_rembourse:,.2f}€\n" |
|
|
f"Coût total du crédit: {cout_total:,.2f}€" |
|
|
) |
|
|
|
|
|
|
|
|
def calculer_performance_portfolio( |
|
|
valeur_initiale: float, |
|
|
valeur_actuelle: float, |
|
|
duree_jours: int |
|
|
) -> str: |
|
|
"""Calcule la performance d'un portfolio. |
|
|
|
|
|
Args: |
|
|
valeur_initiale: Valeur initiale en euros |
|
|
valeur_actuelle: Valeur actuelle en euros |
|
|
duree_jours: Durée en jours |
|
|
|
|
|
Returns: |
|
|
Performance calculée |
|
|
""" |
|
|
gain_absolu = valeur_actuelle - valeur_initiale |
|
|
gain_pourcentage = (gain_absolu / valeur_initiale) * 100 |
|
|
rendement_annuelise = ((valeur_actuelle / valeur_initiale) ** (365 / duree_jours) - 1) * 100 |
|
|
|
|
|
return ( |
|
|
f"Gain absolu: {gain_absolu:+,.2f}€ ({gain_pourcentage:+.2f}%)\n" |
|
|
f"Rendement annualisé: {rendement_annuelise:+.2f}%\n" |
|
|
f"Durée: {duree_jours} jours" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
finance_calculator_agent = Agent( |
|
|
finance_model, |
|
|
model_settings=ModelSettings(max_output_tokens=1500), |
|
|
system_prompt=( |
|
|
"Vous êtes un conseiller financier expert. " |
|
|
"Quand un client vous pose une question nécessitant un calcul financier, " |
|
|
"utilisez les outils de calcul disponibles pour fournir des résultats précis. " |
|
|
"Expliquez toujours les résultats dans le contexte de la question du client. " |
|
|
"Répondez en français." |
|
|
), |
|
|
tools=[calculer_valeur_future, calculer_versement_mensuel, calculer_performance_portfolio], |
|
|
) |
|
|
|
|
|
|
|
|
async def exemple_agent_avec_outils(): |
|
|
"""Exemple d'utilisation d'un agent avec outils.""" |
|
|
print("\n🔧 Agent 2: Agent avec outils de calcul") |
|
|
print("=" * 60) |
|
|
|
|
|
question = ( |
|
|
"J'ai un capital de 50 000€ que je veux placer à 4% par an pendant 10 ans. " |
|
|
"Combien aurai-je à la fin ? Et si j'emprunte 200 000€ sur 20 ans à 3.5% " |
|
|
"pour acheter un appartement, combien paierai-je par mois ?" |
|
|
) |
|
|
|
|
|
print(f"Question:\n{question}\n") |
|
|
|
|
|
result = await finance_calculator_agent.run(question) |
|
|
|
|
|
print("✅ Réponse de l'agent avec calculs:") |
|
|
print(result.output) |
|
|
print() |
|
|
|
|
|
|
|
|
if hasattr(result, 'usage') and result.usage: |
|
|
print("📊 Utilisation des outils:") |
|
|
print(f" - Tokens utilisés: {result.usage.total_tokens if hasattr(result.usage, 'total_tokens') else 'N/A'}") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
asyncio.run(exemple_agent_avec_outils()) |
|
|
|
|
|
|