Spaces:
Sleeping
Sleeping
cdupland
Add dotenv support and enhance agent selection in app.py; refactor get_retreive_answer to handle multiple namespaces in vectore_store.py
fc3050e
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("---") | |