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("---")