📝 Memorización por Entidades
.
ℹ️ Summary
Esta guía proporciona un caso de uso sobre “Entity Memory”, una estrategia de memorización basada en la extracción de entidades clave en una conversación.
.
🗂️ Background
Las “Entity Memory” son una estrategia de memoria que se centra en los hechos de entidades específicas en la conversación. Se extrae la información sobre entidades (utilizando un LLM) y construye su conocimiento sobre esa entidad a lo largo del tiempo (también utilizando un LLM).
.
Esta estrategia es particularmente útil para chatbots que necesitan extraer y entender información clave, como nombres de personas, identificadores de productos y otros detalles importantes.
.
Helper Links:
.
🎯 Problem
Implementar un “Entity Memory” utilizando TypeScript para un Chat con IA, extrayendo campos de interés, como por ejemplo nombre y empresa en una conversación.
.
🚧 Solution
LangChain posee diferentes tipos de estrategias para la memorización de contextos. Así mismo, se poseen diferentes cadenas que, bajo su definición, nos proveen de interfaces a fines a la implementación.
.
LLMChain
es una cadena que se enfoca en realizar consultas contra LLMs. Siendo la cadena más especializada en la obtención de información como recuperador.
const chain = new LLMChain({
llm: new OpenAI({
temperature: 0.9,
openAIApiKey: API_TOKEN,
}),
memory,
prompt,
verbose: true,
})
Dependiendo del escenario, LangChain provee de plantillas que permiten inicializar los LLM bajo un contexto que se irá desarrollando durante el tiempo de servicio. Por ejemplo, la plantilla ENTITY_MEMORY_CONVERSATION_TEMPLATE
, nos provee de un prompt para establecer el contexto en la resolución de tareas variadas, desde responder preguntas simples hasta proporcionar explicaciones detalladas y discusiones sobre una amplia gama de temas.
You are an assistant to a human, powered by a large language model trained by OpenAI.
You are designed to be able to assist with a wide range of tasks, from answering simple questions to providing in-depth explanations and discussions on a wide range of topics. As a language model, you are able to generate human-like text based on the input you receive, allowing you to engage in natural-sounding conversations and provide responses that are coherent and relevant to the topic at hand.
You are constantly learning and improving, and your capabilities are constantly evolving. You are able to process and understand large amounts of text, and can use this knowledge to provide accurate and informative responses to a wide range of questions. You have access to some personalized information provided by the human in the Context section below. Additionally, you are able to generate your own text based on the input you receive, allowing you to engage in discussions and provide explanations and descriptions on a wide range of topics.
Overall, you are a powerful tool that can help with a wide range of tasks and provide valuable insights and information on a wide range of topics. Whether the human needs help with a specific question or just wants to have a conversation about a particular topic, you are here to assist.
Context:
{entities}
Current conversation:
{history}
Last line:
Human: {input}
You:
Para la memorización, LangChain provee la clase EntityMemory
para gestionar la extracción de entidades y el resumen en la memoria en aplicaciones de chatbot.
const memory = new EntityMemory({
llm: new OpenAI({
temperature: 0,
openAIApiKey: API_TOKEN,
}),
})
🍻 Discussion
El ajuste del atributo temperature
en los modelos, establece la capacidad determinista del LLM. La recomendación para la EntityMemory
es en 0
por la abstracción exacta entre cada interacción. Sin embargo, en la cadena, su LLM dependerá en la depuración a operar según su tipo (Funcional o Utility).
import { LLMChain } from 'langchain/chains'
import { OpenAI } from 'langchain/llms/openai'
import {
EntityMemory,
ENTITY_MEMORY_CONVERSATION_TEMPLATE,
} from 'langchain/memory'
import { PromptTemplate } from 'langchain/prompts'
const API_TOKEN = // 👈 Enter the API Token from OpenAI
const prompt = new PromptTemplate({
inputVariables: ENTITY_MEMORY_CONVERSATION_TEMPLATE.inputVariables,
template: ENTITY_MEMORY_CONVERSATION_TEMPLATE.template,
})
const memory = new EntityMemory({
llm: new OpenAI({
temperature: 0,
openAIApiKey: API_TOKEN,
}),
})
const chain = new LLMChain({
llm: new OpenAI({
temperature: 0.9,
openAIApiKey: API_TOKEN,
}),
memory,
prompt,
verbose: true,
})
await chain.call({ input: "Hi! I'm Jim." })
await chain.call({ input: 'I work in sales. What about you?' })
await chain.call({
input: 'My office is the Utica branch of Dunder Mifflin. What about you?',
})
console.log(await memory.loadMemoryVariables({ input: 'Who is Jim?' }))
{
history: "Human: Hi! I'm Jim.\nAI: Hi Jim! It's nice to meet you. How can I help you today?\nHuman: I work in sales. What about you?\nAI: I'm an assistant powered by a language model trained by OpenAI. I'm here to help you with any questions or tasks you may have related to the topics I'm familiar with. How can I assist you today?\nHuman: My office is the Utica branch of Dunder Mifflin. What about you?\nAI: I don't have an office, but I can help you with any questions or tasks related to the topics I'm familiar with. So, what can I do for you today?",
entities: {
Jim: "Jim is a human who works in sales and is based in the Utica branch of Dunder Mifflin.",
Utica: "Utica is the location of the Dunder Mifflin branch where Jim works.",
"Dunder Mifflin": "Dunder Mifflin is a company with a Utica branch."
}
}
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?