Spaces:
Sleeping
Sleeping
import pandas as pd | |
from langchain_groq import ChatGroq | |
from langchain_huggingface import HuggingFaceEmbeddings | |
from langchain_chroma import Chroma | |
from langchain_core.prompts import PromptTemplate | |
from langchain_core.output_parsers import StrOutputParser | |
from langchain_core.runnables import RunnablePassthrough | |
import gradio as gr | |
# Carga los datos de entrenamiento | |
df = pd.read_csv('./botreformasconstrucciones.csv') | |
# Crea un arreglo con los contextos | |
context_data = [] | |
for i in range(len(df)): | |
context = "" | |
for j in range(3): | |
context += df.columns[j] | |
context += ": " | |
context += df.iloc[i, j] # Cambia esto | |
context += " " | |
context_data.append(context) | |
# Importa las bibliotecas necesarias | |
import os | |
from langchain_groq import ChatGroq | |
from langchain_huggingface import HuggingFaceEmbeddings | |
from langchain_chroma import Chroma | |
# Obtiene la clave de API de Groq | |
groq_key = os.environ.get('groq_api_keys') | |
# Crea un objeto ChatGroq con el modelo de lenguaje | |
llm = ChatGroq(model="llama-3.3-70b-versatile", api_key=groq_key) | |
# Crea un objeto HuggingFaceEmbeddings con el modelo de embeddings | |
embed_model = HuggingFaceEmbeddings(model_name="mixedbread-ai/mxbai-embed-large-v1") | |
# Crea un objeto Chroma con el nombre de la colección | |
vectorstore = Chroma( | |
collection_name="unipapel_papeleria", | |
embedding_function=embed_model, | |
) | |
# Agrega los textos a la colección | |
vectorstore.add_texts(context_data) | |
# Crea un objeto retriever con la colección | |
retriever = vectorstore.as_retriever() | |
# Crea un objeto PromptTemplate con el prompt | |
template = ("""Eres un asistente experto de unipapel.es, especializado en temas relacionados con la papelería. Tu función es ofrecer orientación a los clientes que realicen preguntas. Si no encuentras una respuesta, invítalos a contactar con nosotros. Puedes proporcionar información sobre nuestras categorías de productos según lo que te soliciten. La URL de la tienda es www.unipapel.es. A continuación, algunas de nuestras categorías: | |
Accesorios para pizarras | |
Acuarelas y lápices acuarelables | |
Archivadores de palanca | |
Blocs de dibujo | |
Bolígrafos | |
Carpetas clasificadoras | |
Cuadernos de caligrafía | |
Papelería escolar | |
Pegamentos y adhesivos | |
Pizarras blancas | |
Context: {context} | |
Question: {question} | |
Answer:""") | |
# Crea un objeto rag_prompt con el prompt | |
rag_prompt = PromptTemplate.from_template(template) | |
# Crea un objeto StrOutputParser para parsear la salida | |
from langchain_core.output_parsers import StrOutputParser | |
# Crea un objeto RunnablePassthrough para ejecutar el modelo | |
from langchain_core.runnables import RunnablePassthrough | |
# Crea un objeto rag_chain con el modelo y el prompt | |
rag_chain = ( | |
{"context": retriever, "question": RunnablePassthrough()} | |
| rag_prompt | |
| llm | |
| StrOutputParser() | |
) | |
# Importa la biblioteca Gradio | |
import gradio as gr | |
# Crea una función para procesar la entrada del usuario | |
def rag_memory_stream(message, history): | |
partial_text = "" | |
for new_text in rag_chain.stream(message): | |
partial_text += new_text | |
yield partial_text | |
# Crea un objeto Gradio con la función y el título | |
examples = [ | |
"¿Qué tipo de bolígrafos son ideales para tomar apuntes en clase?", | |
"¿Cuáles son los mejores tipos de papel para imprimir documentos profesionales?", | |
"¿Qué materiales de oficina son esenciales para un espacio de trabajo productivo?" | |
] | |
description = "Chatbot con Unipapel" | |
title = "Experto en papeleria y todo lo referente" | |
demo = gr.ChatInterface(fn=rag_memory_stream, | |
type="messages", | |
title=title, | |
description=description, | |
fill_height=True, | |
examples=examples, | |
theme="glass", | |
) | |
# Lanza la aplicación | |
if __name__ == "__main__": | |
demo.launch() |