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="asesoria_manuel", 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 promptgroq_api_keysgroq_api_keysgroq_api_keysgroq_api_keys template = ("""Eres un asistente para asesoria manuel, cada vez que un usuario te pregunte algo relacionado a nuestros servicios les ofreceras una respuesta segun el departamentoue necesite, que os llame al telefono 91123456 , y le recordaras que estamos abiertos de lubnes a viernes de 9 a 8 de la tarde, si te pregunta sobre algo referente a contratos y compraventas le diras que pase por la oficina los dias martes a pedir cita, y si te pregungta algo que no tenga relacion con nuestra empresa debes decirle que solo eres un asistente que responde a preguntas de asesoramiento y asuntos referentes. 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 = [ "¿Cusnto denbo pagar a hacienda cpon mi empresa?", "¿Trabajais con inmobiliaria?", ] description = "Chatbot con Asesoria Manuel" demo = gr.ChatInterface(fn=rag_memory_stream, type="messages", description=description, fill_height=True, examples=examples, theme="glass", ) # Lanza la aplicación if __name__ == "__main__": demo.launch()