Spaces:
Sleeping
Sleeping
File size: 3,878 Bytes
a786c9d f0d2f19 ee8b38f d16d3b3 0fed4fb 8cff3c1 a786c9d 0fed4fb a786c9d f0d2f19 da4f263 f0d2f19 da4f263 f0d2f19 a786c9d f0d2f19 3dd38da a786c9d 0fed4fb a786c9d 0fed4fb a786c9d f20afcb a786c9d 0fed4fb a786c9d 0fed4fb a786c9d 0fed4fb f20afcb 182b574 a786c9d 0fed4fb a786c9d 0fed4fb da4f263 0fed4fb da4f263 a786c9d 0fed4fb a786c9d da4f263 a786c9d da4f263 a786c9d da4f263 0fed4fb 8837a99 a786c9d 3f51add a786c9d 0fed4fb 7c89955 f20afcb 7c89955 f20afcb 7df1bda 4c6d55a 1f23827 983182b dfd696d 0fed4fb dfd696d 3dd38da |
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 |
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() |