{"id":18683599,"url":"https://github.com/marcosd59/langchain-chatbot","last_synced_at":"2026-05-04T22:33:23.793Z","repository":{"id":228033284,"uuid":"772983082","full_name":"marcosd59/langchain-chatbot","owner":"marcosd59","description":"Este repositorio alberga una colección de cuadernos Jupyter que te guían por los variados aspectos y funcionalidades de Langchain, cubriendo desde los fundamentos hasta aplicaciones avanzadas.","archived":false,"fork":false,"pushed_at":"2024-04-15T23:17:14.000Z","size":2505,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-18T17:14:25.075Z","etag":null,"topics":["chatbot","langchain","openai"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/marcosd59.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-16T12:20:29.000Z","updated_at":"2024-03-16T12:23:57.000Z","dependencies_parsed_at":"2024-04-16T00:29:07.037Z","dependency_job_id":"12e90bd6-c280-4773-8b2c-12beb83fd305","html_url":"https://github.com/marcosd59/langchain-chatbot","commit_stats":null,"previous_names":["marcosd59/langchain-chatbot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/marcosd59/langchain-chatbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosd59%2Flangchain-chatbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosd59%2Flangchain-chatbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosd59%2Flangchain-chatbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosd59%2Flangchain-chatbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcosd59","download_url":"https://codeload.github.com/marcosd59/langchain-chatbot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcosd59%2Flangchain-chatbot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267814719,"owners_count":24148329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chatbot","langchain","openai"],"created_at":"2024-11-07T10:15:05.394Z","updated_at":"2026-05-04T22:33:18.774Z","avatar_url":"https://github.com/marcosd59.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Banner](./LangChain%20Banner.webp)\n\n## Langchain\n\nLangchain es una poderosa biblioteca diseñada para transformar la interacción y el flujo de trabajo con modelos de lenguaje de aprendizaje automático. A continuación, se ofrece una visión general de los temas y cuadernos incluidos en este repositorio, destacando cómo cada uno aborda diferentes aspectos y funcionalidades de Langchain.\n\n### Configuración inicial\n\nAntes de sumergirnos en los cuadernos, es esencial establecer un archivo `config.py` en la carpeta correspondiente y colocar su clave API de OpenAI:\n\n```python\nOPENAI_API_KEY = 'your_api_key'\n```\n\n## Cuadernos y temas clave\n\n### Introducción a LangChain\n\n#### **1. Preparación**\n\nEsta sección se encarga de la instalación de `langchain` y `openai`, seguida de la configuración de la clave API de OpenAI en el entorno.\n\n```python\n%pip install langchain\n%pip install openai\n```\n\n```python\nimport config\nos.environ['OPENAI_API_KEY'] = config.OPENAI_API_KEY\n```\n\n#### **2. Introducción a LangChain**\n\nSe exponen los conceptos básicos de LangChain, incluyendo Model, Prompt Templates y Chain, aunque en esta sección no se incluye código específico.\n\n#### **3. Modelos**\n\n##### **3.1 LLMs (Language Learning Models)**\n\nMuestra cómo utilizar los modelos de OpenAI en LangChain, desde la inicialización hasta la generación de texto y la ejecución de ejemplos específicos.\n\n```python\nfrom langchain.llms import OpenAI\nllm = OpenAI()\n# Ejemplo de uso: llm.predict('Cuéntame un chiste.')\n```\n\n##### **3.2 ChatModels**\n\nExplica cómo los ChatModels procesan una lista de mensajes, detallando los roles de cada entidad en la comunicación. El código muestra la creación de mensajes y la generación de plantillas para la interacción.\n\n```python\nfrom langchain.schema.messages import ChatMessage\n# Ejemplo de creación de chat history y generación de una respuesta.\n```\n\n#### **4. Chain**\n\nDemuestra cómo crear y utilizar una cadena en LangChain, incluyendo la creación de una plantilla de prompt y la ejecución de una cadena para generar nombres de empresas basados en una descripción.\n\n```python\nfrom langchain import PromptTemplate\nfrom langchain.chains import LLMChain\n# Ejemplo de creación y ejecución de una cadena.\n```\n\n### Langchain 1 - Modelos y Prompts\n\n#### **1. Modelos**\n\nEsta sección demuestra cómo cargar e interactuar con modelos de lenguaje de OpenAI utilizando LangChain, enfocándose en cómo se puede solicitar a estos modelos que generen texto.\n\n```python\nfrom langchain.llms import LlamaCpp, OpenAI\nllm_openai = OpenAI(model_name=\"gpt-3.5-turbo-instruct\", openai_api_key=api)\nrespuesta_openai = llm_openai(\"Hola, como estas?\")\nprint(respuesta_openai)\n```\n\n#### **2. Modelos Chat**\n\n##### **2.1 ChatGTP**\n\nSe introduce el uso de modelos específicos para chat, como ChatGPT, explicando cómo se pueden usar para generar respuestas más contextualizadas en diálogos.\n\n```python\nfrom langchain.chat_models import ChatOpenAI\nfrom langchain.schema import HumanMessage\nchatgpt = ChatOpenAI(openai_api_key=api)\nrespuesta = chatgpt([HumanMessage(content=\"Hola, como estas?\")])\nprint(respuesta.content)\n```\n\n#### **3. Prompts**\n\nExplica la importancia de estructurar bien los prompts y cómo LangChain ofrece herramientas para facilitar esto, permitiendo la creación de templates y la incorporación de ejemplos para mejorar la precisión de las respuestas.\n\n```python\nfrom langchain import PromptTemplate\ntemplate_basico = \"\"\"Eres un asistente virtual culinario...\nprompt_temp = PromptTemplate(input_variables=[\"platillo\"], template = template_basico)\n```\n\n##### **3.1 Ejemplo cuando no usamos PROMP de ejemplo**\n\nMuestra la diferencia en la respuesta del modelo al no utilizar un prompt de ejemplo, destacando la utilidad de estos en proporcionar contexto al modelo.\n\n```python\nllm_openai(\"¿Cuál es el ingrediente principal de las quesadillas?\")\n```\n\n#### 4. Output parser\n\nLangChain permite parsear o formatear las respuestas del modelo para que sean más útiles o adecuadas para el contexto deseado.\n\n```python\nfrom langchain.output_parsers import CommaSeparatedListOutputParser\noutput_parser = CommaSeparatedListOutputParser()\ntemplate_basico_parser = \"Cuales son los ingredientes para preparar {platillo}\\n{como_parsear}\"\n```\n\n### Langchain 2 - Memoria\n\n#### **1. Memoria**\n\nAqui se introduce el concepto de memoria en los LLMs, explicando cómo ayuda a los modelos a recordar información a largo plazo y describiendo diferentes tipos de memoria que se pueden implementar.\n\n#### **2. Conversation buffer**\n\nEsta memoria básica almacena cada interacción con el modelo. El historial completo se envía con cada nuevo prompt para ayudar al modelo a recordar interacciones previas.\n\n```python\nfrom langchain.memory import ConversationBufferMemory\nmemoria = ConversationBufferMemory()\nchatbot = ConversationChain(llm=llm, memory=memoria, verbose=True)\nchatbot.predict(input=\"Hola como estas?, Me llamo Marcos y soy un programador\")\n```\n\n#### **3. Conversation buffer window memory**\n\nSimilar a la memoria del buffer de conversación, pero limita el historial a una ventana específica de mensajes, evitando sobrecargar el modelo con información innecesaria.\n\n```python\nfrom langchain.memory import ConversationBufferWindowMemory\nmemoria = ConversationBufferWindowMemory(window_size=5)  # Ejemplo de tamaño de ventana\n```\n\n#### **4. Conversation summary memory**\n\nEn lugar de enviar todo el historial, esta memoria envía un resumen de la conversación, permitiendo que el modelo recuerde el contexto sin sobrepasar su límite de tokens.\n\n```python\nfrom langchain.memory import ConversationSummaryMemory\nmemoria = ConversationSummaryMemory(llm=llm)\nchatbot_resumen = ConversationChain(llm=llm, memory=memoria, verbose=True)\n```\n\n##### **4.1 Resumen de la conversación**\n\nDemuestra cómo la memoria de resumen de conversación solo envía un resumen en lugar del historial completo al modelo.\n\n```python\nmemoria.chat_memory.messages  # Muestra los mensajes en memoria\n```\n\n#### **5. Conversation Knowledge Graph Memory**\n\nImplementa un grafo de conocimiento, almacenando piezas clave de la conversación para que el modelo pueda referenciar y responder con base en ese contexto.\n\n```python\nfrom langchain.memory import ConversationKGMemory\nmemoria = ConversationKGMemory(llm=llm)\nchatbot_kgm = ConversationChain(llm=llm, memory=memoria, verbose=True)\n```\n\n##### **5.1 Detalles del grafo de conocimiento**\n\nMuestra cómo se almacena la información clave en un grafo de conocimiento.\n\n```python\nprint(chatbot_kgm.memory.kg.get_triples())  # Muestra los triples almacenados en el grafo\n```\n\n### Langchain 3 - Cadenas\n\n#### **1. Cadenas**\n\nEsta sección introduce el concepto de cadenas en LangChain, que permite crear flujos de trabajo combinando distintos \"bloques\" para crear sistemas con LLMs más complejos. Se menciona cómo las cadenas permiten gestionar qué modelo genera qué información, cómo se utilizan los prompts y cómo la salida de un modelo puede funcionar como entrada para otro.\n\n#### **2. Cadenas más usadas**\n\nSe presentan las cadenas más comunes y útiles integradas en LangChain, que facilitan el desarrollo de diversos sistemas.\n\n##### **2.1 LLMChain**\n\nDescribe cómo LLMChain facilita la interacción con LLMs combinando un modelo y los templates de prompts. Se muestra cómo se puede utilizar LLMChain para generar respuestas en base a un tema específico.\n\n```python\nfrom langchain import LLMChain, OpenAI, PromptTemplate\nllm = OpenAI(openai_api_key=API)\ncadena_LLM = LLMChain(llm=llm, prompt=template)\ncadena_LLM.predict(tema=\"ingenieria civil\")\n```\n\n##### **2.2 SequentialChain**\n\nExplica cómo SequentialChain permite crear secuencias de operaciones donde la salida de una cadena se convierte en la entrada de la siguiente, proporcionando un ejemplo de cómo se pueden encadenar dos procesos para obtener una recomendación de aprendizaje.\n\n```python\nfrom langchain.chains import SequentialChain\ncadenas = SequentialChain(chains=[cadena_lista, cadena_inicio])\ncadenas({\"tema\": \"programacion\"})\n```\n\n#### **3. Otros ejemplos**\n\nSe proporcionan ejemplos adicionales de tipos de cadenas en LangChain, como MathChain y TransformChain, mostrando cómo se pueden realizar operaciones matemáticas o transformaciones de texto.\n\n```python\n# Ejemplo de MathChain\nfrom langchain import LLMMathChain\ncadena_mate = LLMMathChain(llm=llm, verbose=True)\ncadena_mate.run(\"Cuanto es 432*12-32+32?\")\n\n# Ejemplo de TransformChain\nfrom langchain.chains import TransformChain\ncadena_transformacion = TransformChain(transform=eliminar_brincos)\ncadena_transformacion.run(prompt)\n```\n\n## Fine tuning\n\nPara hacerlo debes de instalar pandas primero y hacer tu API KEY de open AI en una variable de ambiente para que el CLI de openai pueda procesar tus peticiones\n\n```code\npip install pandas\nexport OPENAI_API_KEY=\"\u003cOPENAI_API_KEY\u003e\"\n```\n\nUna vez hecho esto, tienes que generar un archivo con tus prompts y el texto que debería aprender a responder GPT. Como en el ejemplo **./finetuning/haikus.csv**\n\n### **Convertir .csv a jsonl**\n\nPara hacer el fine tuning se requiere tener nuestros prompts y texto a completar en un formato jsonl.\n\nPara esto podemos correr el siguiente comando\n\n```code\nopenai tools fine_tunes.prepare_data -f \u003cARCHIVO\u003e\n```\n\n### **Realizar el fine tuning**\n\nAhora que ya tenemos el archivo en formato jsonl lo unico que debemos hacer es correr este comando y esperar unos minutos.\n\n```code\nopenai api fine_tunes.create -t \u003cARCHIVO_JSONL\u003e -m \u003cMODELO_SOBRE_EL_CUAL_HACER_FINE_TUNING\u003e\n```\n\nUn vez que termina de entrenar nos va a desplegar en la terminal el nombre del nuevo modelo o lo podemos ver dentro de el playground de openAI.\n\nPara poderlo usar en vez de usar el nombre de modelo ada (por ejemplo), se pone el nombre del modelo que ya fue ajustado.\n\n## Embeddings\n\nEl proceso de embeddings transforma palabras o texto en vectores de N dimensiones, incorporando información semántica. Esto significa que palabras o textos semánticamente similares estarán cercanos en el espacio vectorial. El cuaderno utiliza específicamente el embedding de OpenAI, destacado por su capacidad para posicionar palabras o textos según su semántica, similar al utilizado por GPT-3.\n\n### Secciones principales:\n\nClaro, profundizaré en la descripción de cada sección del cuaderno \"embeddings.ipynb\", explicando el propósito y el contenido clave, incluido el código de Python cuando sea relevante.\n\n#### **1. Instalaciones**\n\nEsta sección se centra en la instalación de los paquetes necesarios para trabajar con embeddings y otras funcionalidades del cuaderno. Incluye comandos de instalación para las bibliotecas requeridas, asegurando que el entorno esté preparado para los ejemplos y aplicaciones siguientes.\n\n```python\n%pip install -U email-validator\n%pip install gradio\n%pip install pypdf\n```\n\n#### **2. Embeddings con OpenAI**\n\n![embeddings](https://cdn.openai.com/new-and-improved-embedding-model/draft-20221214a/vectors-1.svg)\n\nEn esta parte, se introduce el concepto de embeddings y se explica cómo OpenAI facilita este proceso.\n\n```python\nfrom openai import Embedding\nembedding = Embedding('text-embedding-model')\nvector = embedding.encode(\"ejemplo de texto\")\n```\n\n#### **3. Qué es y cómo usar embeddings**\n\nAquí se detalla qué significa hacer un embedding de datos y cómo se utilizan estos vectores numéricos en aplicaciones prácticas. Se explora la conversión de datos a vectores y cómo estos reflejan la similitud semántica.\n\n```python\n# Se puede hacer embeeding de palabras o cadenas de texto\npalabras = [\"casa\", \"perro\", \"gato\", \"lobo\", \"leon\", \"zebra\", \"tigre\"]\n```\n\n```python\ndiccionario = {}\nfor i in palabras:\n    diccionario[i] = get_embedding(i, engine=\"text-embedding-3-small\")\n```\n\n```python\npalabra = \"gato\"\nprint(\"Primeros 10 valores de {}:\\n\".format(palabra), diccionario[palabra][:10])\nprint(\"\\n\")\nprint(\"Número de dimensiones del dato embebido\\n\", len(diccionario[palabra]))\n```\n\n#### **4. Comparar dos embeddings**\n\nSe muestra cómo calcular la distancia entre dos vectores, lo que indica qué tan cercanos o lejanos están en términos de su significado.\n\n```python\n# Código hipotético para comparar vectores\nimport numpy as np\nsimilitud = np.dot(vector1, vector2) / (np.linalg.norm(vector1) * np.linalg.norm(vector2))\n```\n\n```python\nn_palabra = \"gato\" # Palabra nueva a comparar\npalabra_comparar = \"perro\" # Palabra del diccionario con la que compararemos la nueva palabra\nn_palabra_embed = get_embedding(n_palabra, engine=\"text-embedding-3-small\")\nsimilitud = cosine_similarity(diccionario[palabra_comparar], n_palabra_embed)\nprint(similitud)\n```\n\n#### **5. Sumar embeddings**\n\nSe explica cómo la suma de vectores de embeddings puede crear nuevos vectores que representan conceptos combinados de los elementos sumados, proporcionando ejemplos de cómo se puede realizar y utilizar esta operación.\n\n```python\n# Suma dos listas usando pandas\nsumados = (pd.DataFrame(diccionario[\"leon\"])) + (pd.DataFrame(diccionario[\"zebra\"]))\nlen(sumados)\n\nfor key, value in diccionario.items():\n    print(key, \":\", cosine_similarity(diccionario[key], sumados))\n```\n\n#### **6. Aplicación de un Chatbot**\n\nEn esta parte, se ilustra la aplicación práctica de embeddings en la construcción de un chatbot. Se utiliza Gradio para crear una interfaz donde los usuarios pueden interactuar con el chatbot, haciendo preguntas y recibiendo respuestas basadas en el análisis de embeddings.\n\n```python\n# Código hipotético para integrar Gradio y el chatbot\nimport gradio as gr\ndef chatbot_respuesta(pregunta):\n    # Proceso para generar una respuesta\n    return \"Respuesta\"\niface = gr.Interface(fn=chatbot_respuesta, inputs=\"text\", outputs=\"text\")\niface.launch()\n```\n\n#### **7. Procesar datos de un PDF**\n\nEsta sección demuestra cómo los embeddings pueden aplicarse para extraer y analizar información de documentos PDF. Se muestra cómo leer un PDF, convertir su contenido en vectores de embeddings y utilizar estos para responder consultas basadas en el contenido del documento.\n\n```python\n# Código hipotético para procesar un PDF y realizar consultas\nimport PyPDF2\n# Leer y procesar el PDF\n# Convertir el contenido en embeddings\n# Utilizar embeddings para responder consultas\n\nfrom langchain.document_loaders import PyPDFLoader\nfrom langchain.text_splitter import CharacterTextSplitter\n\nloader = PyPDFLoader(\"./archivo_respuestas.pdf\")\npages = loader.load_and_split()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcosd59%2Flangchain-chatbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcosd59%2Flangchain-chatbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcosd59%2Flangchain-chatbot/lists"}