open-finance-llm-8b / examples /agent_2_tools.py
jeanbaptdzd's picture
chore: Clean up repo - remove redundant tests and docs, update README
3e6b9d2
raw
history blame
4.39 kB
"""
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
# Outils que l'agent peut utiliser
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"
)
# Agent avec outils
finance_calculator_agent = Agent(
finance_model,
model_settings=ModelSettings(max_output_tokens=1500), # For explanations with calculations
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()
# Afficher quels outils ont été utilisés
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())