Mi Propio Chatbot: No es ChatGPT, Pero Hace el Intento
Después, de construir algo básico en mi último post con python, me interesa conocer el estado del ecosistema JS.
Con todo el hype actual sobre la inteligencia artificial, decidí sumergirme en LangChain para ver cómo podía construir aplicaciones de IA más complejas. Mi objetivo era crear un chat bot que pudiera responder preguntas basándose en mis propios documentos, ofreciendo respuestas más personalizadas.
Para lograr esto, implementé una técnica llamada Retrieval Augmented Generation (RAG). Básicamente, se trata de combinar la generación de texto con la recuperación de información relevante de una base de datos. En mi caso, utilicé la capa de abstracción de LangChain junto con Supabase VectorStores para manejar el almacenamiento y la recuperación de datos.
Aunque ChatGPT ya ofrece funcionalidades similares, crear mi propio bot me permitió tener un control total sobre el contexto y la generación de respuestas. Esto es especialmente útil para aplicaciones como asistencia técnica o soporte al cliente, donde necesitas respuestas precisas y adaptadas a situaciones específicas.
Si te interesa ver el código y profundizar en los detalles, puedes echar un vistazo a mi proyecto en GitHub. Ten en cuenta que, por ahora, es una versión básica sin interfaz gráfica, desarrollada 100% en Node.js.
¿Qué sigue?
El próximo paso será desarrollar un network de agentes con su interfaz web. Integrándolo en una aplicación web funcional. Esto me permitirá explorar procesos más complejos y desarrollar aplicaciones interactivas más inteligentes.
Si te interesa este tipo de desarrollo, ¡quédate atento porque seguiré compartiendo mi progreso! 🚀
Prueba generando un prompt con Langchain
git clone https://github.com/ituPhi/information-retreival
npm install
cd information-retreival
zed prompt-template.js
Aquí cargamos el modelo con el API key de open AI, debes hacer un .env con tu llave para probar los scripts
const OPENAI_KEY = process.env.OPENAI_KEY;
const model = new ChatOpenAI({
openAIApiKey: OPENAI_KEY,
});
Aquí generamos el prompt que ira al modelo, con la variable {servicio}
const initString = "Genera un tweet promocional para mi servicio web : {servicio}";
const promptTemplate = PromptTemplate.fromTemplate(initString);
Luego construimos el Chain, agregando el modelo con pipe()
const promptChain = promptTemplate.pipe(model);
Creamos una función asíncrona que llama el chain y regresa la respuesta en una promesa.
async function getServiceTweet(service) {
const run = await promptChain.invoke({ servicio: service });
return run.content;
}
Solo tenemos que hacer un log del await de nuestra promesa, pasando a la función el servicio del que queremos un tweet, el mismo que definimos en el prompt.
const a = await getServiceTweet("Web Design");
console.log(a);
}