import os import streamlit as st import time from langchain_openai import ChatOpenAI # Nouvel import pour OpenAI from langchain.prompts import PromptTemplate from pinecone import Pinecone, ServerlessSpec from vectore_store import get_retreive_answer from dotenv import load_dotenv load_dotenv() PINECONE_API_KEY = os.environ.get("PINECONE_API_KEY") index_name = os.environ.get("PINECONE_INDEX_NAME") print(PINECONE_API_KEY) pc = Pinecone(api_key=PINECONE_API_KEY) existing_indexes = [index_info["name"] for index_info in pc.list_indexes()] if index_name not in existing_indexes: pc.create_index( name=index_name, dimension=3072, metric="cosine", spec=ServerlessSpec(cloud="aws", region="us-east-1"), ) while not pc.describe_index(index_name).status["ready"]: time.sleep(1) index = pc.Index(index_name) # Initialiser l'historique s'il n'existe pas déjà if "history" not in st.session_state: st.session_state["history"] = [] # Interface Streamlit st.title("Application LLM avec LangChain") st.write("Posez une question au modèle de langage et obtenez une réponse.") # Sélectionnez l'agent via un bouton radio # Sélectionnez le type d'agent via un bouton radio agent_type = st.radio( "Choisissez le type d'agent :", ("Agent IA Service Client Augmenté", "Agent IA Produit Augmenté", "Agent Campaign Marketing"), # "Agent IA Commercial Augmenté", index=0 # "Agent IA Service Client Augmenté" est sélectionné par défaut ) # Configuration des templates et namespaces en fonction de l'agent sélectionné # Configuration des templates et namespaces en fonction de l'agent sélectionné if agent_type == "Agent IA Service Client Augmenté": namespaces = ["chat","tic_email"] prompt_template = PromptTemplate( input_variables=["question","context","messages"], template=( "Votre rôle est d’agir comme un Agent IA de Service Client Augmenté. Vous devez :\n\n" "1. Anticiper les besoins et insatisfactions des clients :\n" " - Identifiez les questions et préoccupations potentielles des clients avant même qu’ils ne les expriment.\n\n" "2. Pré-générer des réponses adaptées :\n" " - En fonction des questions les plus fréquentes et des problèmes courants, proposez des réponses prédéfinies qui peuvent être facilement adaptées aux situations spécifiques.\n\n" "3. Améliorer les processus et formations internes :\n" " - Fournissez des suggestions basées sur les retours clients pour optimiser les processus internes de service client et améliorer les formations des agents.\n\n" "### Objectif :\n" "Fournir des réponses réactives et de qualité, afin d’accroître la satisfaction client et d’optimiser les performances du service.\n" "Sachant le context suivant: {context}, et l'historique de la conversation: {messages}, {question}\n" ) ) elif agent_type == "Agent IA Produit Augmenté": namespaces = ["chat","tic_email"] prompt_template = PromptTemplate( input_variables=["question","context","messages"], template=( "Votre rôle est d’agir comme un Agent IA Produit Augmenté et responsable du service Produit :\n\n" "1. Fournir des données objectives pour les réunions de feedback :\n" " - Catégorisation, Quantification et Reporting des données liées à nos produits et services.\n\n" "2. Identifier rapidement les tendances et opportunités :\n" " - Analysez les données pour déceler les tendances et proposer des améliorations.\n\n" "3. Détecter et résoudre les problèmes en temps réel :\n" " - Surveillez en continu la satisfaction des clients et identifiez les problèmes potentiels.\n\n" "### Objectif :\n" "Aider à prioriser les actions basées sur des données, gagner du temps, et améliorer la satisfaction client.\n" "Sachant le context suivant: {context}, et l'historique de la conversation: {messages}, {question}\n" ) ) # elif agent_type == "Agent IA Commercial Augmenté": # namespaces = ["chat","tic_email"] # prompt_template = PromptTemplate( # input_variables=["question"], # template=( # "Votre rôle est d’agir comme un Agent IA Commercial Augmenté. Vous devez :\n\n" # "1. Détection de pistes business dans le CRM :\n" # " - Analysez les données du CRM pour identifier les opportunités de vente qui sont actuellement détectées manuellement.\n\n" # "### Objectif :\n" # "Automatiser la détection des pistes commerciales et augmenter l'efficacité des processus de vente." # ) # ) elif agent_type == "Agent Campaign Marketing": namespaces = ["campaigns"] prompt_template = PromptTemplate( input_variables=["question","context","messages"], template=( "Votre rôle est d’agir comme un Agent IA de Campaign Marketing.\n\n" "Proposes des campagnes marketing qualitatives, ciblées et efficace.\n" "Sachant le context suivant: {context}, et l'historique de la conversation: {messages}, {question}\n" ) ) # Créez un modèle OpenAI llm = ChatOpenAI(model="gpt-4o-mini") # Chaîne qui combine le modèle LLM et le prompt llm_chain = prompt_template | llm # Nouvelle façon d'utiliser LLMChain # Champ pour entrer la question question = st.text_input("Votre question :") # Bouton pour soumettre la question if st.button("Envoyer"): if question: context = get_retreive_answer(index, namespaces=namespaces, prompt=question) if not context: print("no context found for prompt reormatting") for chunk in context: print(chunk.metadata) chunk_name = chunk.metadata["filename"] if st.session_state["history"]: messages = st.session_state["history"] else: messages = [] # Utilisation de la chaîne pour obtenir une réponse response = llm_chain.invoke({"question": question, "context": context, "messages": messages}) # Utilisation de invoke() au lieu de run() # Ajouter la question et la réponse à l'historique st.session_state["history"].append({"question": question, "response": response.content}) else: st.write("Veuillez poser une question.") # Affichage de l'historique des échanges if st.session_state["history"]: st.write("### Historique des échanges") for i, exchange in enumerate(st.session_state["history"]): st.write(f"**Échange {i + 1}**") st.write(f"**Question :** {exchange['question']}") st.write(f"**Réponse :** {exchange['response']}") st.write("---")