Spaces:
Sleeping
Sleeping
File size: 6,927 Bytes
2bec663 dc7c31e 2bec663 dc7c31e 2bec663 fc3050e 2bec663 fc3050e 2bec663 fc3050e 2bec663 fc3050e 2bec663 fc3050e 2bec663 fc3050e 2bec663 fc3050e 2bec663 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
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("---")
|