Repositorio de ejemplos para el uso de Langchain, una biblioteca para interactuar con el API de OpenAI utilizando cadenas de LLM (Language Model) y plantillas de prompts.
El primer ejemplo se centra en la creación y uso de una simple cadena de LLM (LLMChain) para generar alternativas de nombres de podcasts basados en un tema dado【9†source】.
Aquí está una versión simplificada del código:
import { OpenAI, PromptTemplate, LLMChain } from "langchain";
// Configura las credenciales de la API de OpenAI
const openai = new OpenAI({ apiKey: "YOUR_OPENAI_API_KEY" });
// Configura la plantilla de prompt
const template = "Dame alternativas de nombres de podcasts que hablen de {topic}?";
const prompt = new PromptTemplate({ template: template, inputVariables: ["topic"] });
// Configura la LLMChain
const chain = new LLMChain({ llm: openai, prompt: prompt });
// Llama a la cadena con un tema de entrada
const res = await chain.call({ topic: "cría del cangrejo azul en aguas profundas" });
console.log(res);
La demostración 2 de chat-langchain-demos muestra cómo implementar un chatbot con memoria utilizando LangChain.js. Este chatbot es capaz de mantener una conversación en el tiempo, recordando las interacciones previas para proporcionar respuestas más contextuales y precisas.
Aquí está una versión simplificada del código:
// Ejemplo simplificado
const chat = new ChatOpenAI({ streaming: false, maxRetries: 1 });
const lcChatMessageHistory = new ChatMessageHistory(mapStoredMessagesToChatMessages(messages));
const memory = new BufferMemory({ chatHistory: lcChatMessageHistory, returnMessages: true, memoryKey: "history" });
const chatPrompt = ChatPromptTemplate.fromPromptMessages([
SystemMessagePromptTemplate.fromTemplate("Eres un asistente amigable que sabe mucho de historia. Responde SIEMPRE en español."),
new MessagesPlaceholder("history"),
HumanMessagePromptTemplate.fromTemplate("{input}"),
]);
const chain = new ConversationChain({ memory: memory, llm: chat, prompt: chatPrompt });
const res = await chain.call({ input: prompt });
Tenemos dos archivos principales en este proyecto, ingest-code.js
y chat-database.js
.
ingest-code.js
Este fichero es responsable de la ingesta de los documentos. Carga documentos desde un directorio especificado y los guarda en un vectorstore usando la biblioteca HNSWLib. Los documentos pueden tener distintos formatos, como .json
, .inc
, .php
, y .js
. Los documentos son entonces divididos en chunks, transformados en vectores y guardados en el vectorstore.
chat-database.js
Este archivo contiene la lógica para interactuar con el usuario a través de la línea de comando y buscar las respuestas a las preguntas del usuario en el vectorstore. Utiliza una cadena de búsqueda y un modelo de OpenAI para encontrar la respuesta más relevante a la pregunta del usuario. Actualmente, el sistema admite los modelos gpt-3.5-turbo
y gpt-4
.
ingest-code.js
Para usar este script, ejecuta el siguiente comando en tu terminal, reemplazando <source_directory>
y <output_directory>
con tus rutas específicas.
npm run ingest-code <source_directory> <output_directory>
database.js
Para iniciar una sesión de chat, ejecuta el archivo chat-database.js
. El programa te hará una pregunta y puedes responder escribiendo en la línea de comando.
node database.js
Si en cualquier momento deseas salir de la sesión de chat, simplemente escribe exit
en la línea de comando.
Este proyecto depende de varias bibliotecas, incluyendo:
langchain/vectorstores
langchain/embeddings
langchain/text_splitter
langchain/document_loaders
langchain/chains
langchain/llms/openai
langchain/callbacks
langchain/chat_models/openai
LangChain.js
es una biblioteca diseñada para construir aplicaciones con LLM a través de la componibilidad. Los LLM están emergiendo como una tecnología transformadora que permite a los desarrolladores crear aplicaciones que antes no podían. Sin embargo, usar estos LLM de forma aislada a menudo no es suficiente para crear una aplicación verdaderamente poderosa. El verdadero poder proviene cuando se pueden combinar con otras fuentes de cálculo o conocimiento.
La biblioteca LangChain.js
está diseñada para ayudar en el desarrollo de estos tipos de aplicaciones. Esta biblioteca se construyó para integrarse de la manera más fluida posible con el paquete Python de LangChain. Esto significa que todos los objetos (prompts, LLM, cadenas, etc.) están diseñados de tal manera que pueden ser serializados y compartidos entre lenguajes. El LangChainHub es un lugar central para las versiones serializadas de estos prompts, cadenas y agentes.
Para instalar la biblioteca LangChain.js
en tu proyecto, puedes usar el gestor de paquetes Yarn con el siguiente comando:
yarn add langchain
Luego, en tu código, puedes importar OpenAI
desde langchain/llms
de la siguiente manera:
import { OpenAI } from 'langchain/llms';
Para más detalles y documentación completa de prompts, cadenas, agentes y más, puedes consultar aquí.
Tienes que generar una API KEY válida y configurarla como varible de entorno en OPENAI_API_KEY
.