from langchain_community.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings from langchain_community.chat_models import ChatOpenAI from langchain_core.output_parsers import StrOutputParser from langchain import hub import gradio as gr import os # Configurar tu clave de OpenAI (puedes usar otra fuente Hugging Face si prefieres) openai_api_key = os.environ.get("OPENAI_API_KEY", "") # Modelo remoto (si prefieres usar otro, aquí se cambia) llm = ChatOpenAI(openai_api_key=openai_api_key, model="gpt-3.5-turbo", temperature=0) parser = StrOutputParser() # Cargar embeddings (debe ser el mismo modelo que usaste en Colab) embedding_function = HuggingFaceEmbeddings( model_name="sentence-transformers/paraphrase-multilingual-mpnet-base-v2", model_kwargs={"device": "cpu"} ) # Cargar vectorstore persistente vectordb = Chroma( persist_directory="chroma_db", embedding_function=embedding_function ) # Función RAG def responder_pregunta(query): docs = vectordb.similarity_search_with_score(query, k=5) prompt = hub.pull("rlm/rag-prompt") rag_chain = prompt | llm | parser context = [] for doc, score in docs: if score < 7: context.append(doc.page_content) if context: context_text = "\n".join(context) result = rag_chain.invoke({"context": context_text, "question": query}) return result else: return "No tengo información suficiente para responder a esta pregunta." # Interfaz Gradio gr.Interface( fn=responder_pregunta, inputs=gr.Textbox(label="Pregunta sobre nutrición"), outputs="text", title="Sistema de Preguntas sobre Nutrición", description="Pregunta sobre el contenido del manual clínico. Basado en RAG con LangChain y Hugging Face." ).launch()