exam-agent / agent.py
doxiy's picture
version complète v09
c098b65
from llama_index.llms.openai import OpenAI
from llama_index.core.agent import ReActAgent
from tools import TOOLS
import os
#from llama_index.agent.openai import OpenAIAgent
from dotenv import load_dotenv
load_dotenv()
# 🔑 Variables d'environnement
openai_api_key = os.getenv("OPENAI_API_KEY")
os.environ["OPENAI_API_KEY"] = openai_api_key
with open("prompt.txt", "r", encoding="utf-8") as f:
my_prompt = f.read()
# 🧠 Création de l'agent
llm = OpenAI(
model="gpt-3.5-turbo",
system_prompt=(my_prompt),
max_tokens=1500,
temperature=0.1
)
agent = ReActAgent.from_tools(
tools=TOOLS,
llm=llm,
verbose=True,
max_iterations = 10
)
# 🚀 Point d'entrée principal
def run_agent(question: str) -> str:
"""Interface principale pour l'agent avec nettoyage de format"""
try:
response = agent.chat(question)
answer = str(response).strip()
# Nettoyer les préfixes
prefixes_to_remove = [
"La réponse est :", "Réponse :", "FINAL ANSWER:", "Answer:"
]
for prefix in prefixes_to_remove:
if answer.startswith(prefix):
answer = answer[len(prefix):].strip()
# CORRECTION CRITIQUE : Nettoyer les formats JSON/liste
if answer.startswith('["') and answer.endswith('"]'):
# Convertir ["a", "b", "c"] en a, b, c
import json
try:
list_items = json.loads(answer)
answer = ', '.join(list_items)
except (json.JSONDecodeError, TypeError, ValueError):
# Si le parsing JSON échoue, on garde la réponse originale
pass
# Supprimer les guillemets autour des listes
if answer.startswith('"') and answer.endswith('"'):
answer = answer[1:-1]
return answer
except Exception as e:
return f"Erreur: {str(e)}"