!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())

[Skip to main content](#__docusaurus_skipToContent_fallback)

LangChain v0.2 is coming soon! Preview the new docs [here](/v0.2/docs/introduction/).

[

![🦜️🔗 Langchain](/v0.1/img/brand/wordmark.png)![🦜️🔗 Langchain](/v0.1/img/brand/wordmark-dark.png)

](/v0.1/)[Docs](/v0.1/docs/get_started/introduction/)[Use cases](/v0.1/docs/use_cases/)[Integrations](/v0.1/docs/integrations/platforms/)[API Reference](https://api.js.langchain.com)

[More](#)

*   [People](/v0.1/docs/people/)
*   [Community](/v0.1/docs/community/)
*   [Tutorials](/v0.1/docs/additional_resources/tutorials/)
*   [Contributing](/v0.1/docs/contributing/)

[v0.1](#)

*   [v0.2](https://js.langchain.com/v0.2/docs/introduction)
*   [v0.1](/v0.1/docs/get_started/introduction/)

[🦜🔗](#)

*   [LangSmith](https://smith.langchain.com)
*   [LangSmith Docs](https://docs.smith.langchain.com)
*   [LangChain Hub](https://smith.langchain.com/hub)
*   [LangServe](https://github.com/langchain-ai/langserve)
*   [Python Docs](https://python.langchain.com/)

[Chat](https://chatjs.langchain.com)[](https://github.com/langchain-ai/langchainjs)

Search

*   [Get started](/v0.1/docs/get_started/)
    
    *   [Introduction](/v0.1/docs/get_started/introduction/)
    *   [Installation](/v0.1/docs/get_started/installation/)
    *   [Quickstart](/v0.1/docs/get_started/quickstart/)
*   [LangChain Expression Language](/v0.1/docs/expression_language/)
    
    *   [Get started](/v0.1/docs/expression_language/get_started/)
    *   [Why use LCEL?](/v0.1/docs/expression_language/why/)
    *   [Interface](/v0.1/docs/expression_language/interface/)
    *   [Streaming](/v0.1/docs/expression_language/streaming/)
    *   [How to](/v0.1/docs/expression_language/how_to/routing/)
        
    *   [Cookbook](/v0.1/docs/expression_language/cookbook/)
        
    *   [LangChain Expression Language (LCEL)](/v0.1/docs/expression_language/)
*   [Modules](/v0.1/docs/modules/)
    
    *   [Model I/O](/v0.1/docs/modules/model_io/)
        
    *   [Retrieval](/v0.1/docs/modules/data_connection/)
        
    *   [Chains](/v0.1/docs/modules/chains/)
    *   [Agents](/v0.1/docs/modules/agents/)
        
    *   [More](/v0.1/docs/modules/memory/)
        
        *   [Memory](/v0.1/docs/modules/memory/)
            
            *   [\[Beta\] Memory](/v0.1/docs/modules/memory/)
            *   [Chat Message History](/v0.1/docs/modules/memory/chat_messages/)
                
            *   [Memory types](/v0.1/docs/modules/memory/types/)
                
                *   [Conversation buffer memory](/v0.1/docs/modules/memory/types/buffer/)
                *   [Using Buffer Memory with Chat Models](/v0.1/docs/modules/memory/types/buffer_memory_chat/)
                *   [Conversation buffer window memory](/v0.1/docs/modules/memory/types/buffer_window/)
                *   [Entity memory](/v0.1/docs/modules/memory/types/entity_summary_memory/)
                *   [Combined memory](/v0.1/docs/modules/memory/types/multiple_memory/)
                *   [Conversation summary memory](/v0.1/docs/modules/memory/types/summary/)
                *   [Conversation summary buffer memory](/v0.1/docs/modules/memory/types/summary_buffer/)
                *   [Vector store-backed memory](/v0.1/docs/modules/memory/types/vectorstore_retriever_memory/)
        *   [Callbacks](/v0.1/docs/modules/callbacks/)
            
        *   [Experimental](/v0.1/docs/modules/experimental/)
            
*   [Security](/v0.1/docs/security/)
*   [Guides](/v0.1/docs/guides/)
    
*   [Ecosystem](/v0.1/docs/ecosystem/)
    
*   [LangGraph](/v0.1/docs/langgraph/)
*   * * *
    

*   [](/v0.1/)
*   [Modules](/v0.1/docs/modules/)
*   More
*   [Memory](/v0.1/docs/modules/memory/)
*   [Memory types](/v0.1/docs/modules/memory/types/)
*   Vector store-backed memory

Vector store-backed memory
==========================

`VectorStoreRetrieverMemory` stores memories in a VectorDB and queries the top-K most "salient" docs every time it is called.

This differs from most of the other Memory classes in that it doesn't explicitly track the order of interactions.

In this case, the "docs" are previous conversation snippets. This can be useful to refer to relevant pieces of information that the AI was told earlier in the conversation.

tip

See [this section for general instructions on installing integration packages](/v0.1/docs/get_started/installation/#installing-integration-packages).

*   npm
*   Yarn
*   pnpm

    npm install @langchain/openai

    yarn add @langchain/openai

    pnpm add @langchain/openai

    import { OpenAI, OpenAIEmbeddings } from "@langchain/openai";import { VectorStoreRetrieverMemory } from "langchain/memory";import { LLMChain } from "langchain/chains";import { MemoryVectorStore } from "langchain/vectorstores/memory";import { PromptTemplate } from "@langchain/core/prompts";const vectorStore = new MemoryVectorStore(new OpenAIEmbeddings());const memory = new VectorStoreRetrieverMemory({  // 1 is how many documents to return, you might want to return more, eg. 4  vectorStoreRetriever: vectorStore.asRetriever(1),  memoryKey: "history",});// First let's save some information to memory, as it would happen when// used inside a chain.await memory.saveContext(  { input: "My favorite food is pizza" },  { output: "thats good to know" });await memory.saveContext(  { input: "My favorite sport is soccer" },  { output: "..." });await memory.saveContext({ input: "I don't the Celtics" }, { output: "ok" });// Now let's use the memory to retrieve the information we saved.console.log(  await memory.loadMemoryVariables({ prompt: "what sport should i watch?" }));/*{ history: 'input: My favorite sport is soccer\noutput: ...' }*/// Now let's use it in a chain.const model = new OpenAI({ temperature: 0.9 });const prompt =  PromptTemplate.fromTemplate(`The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Relevant pieces of previous conversation:{history}(You do not need to use these pieces of information if not relevant)Current conversation:Human: {input}AI:`);const chain = new LLMChain({ llm: model, prompt, memory });const res1 = await chain.invoke({ input: "Hi, my name is Perry, what's up?" });console.log({ res1 });/*{  res1: {    text: " Hi Perry, I'm doing great! I'm currently exploring different topics related to artificial intelligence like natural language processing and machine learning. What about you? What have you been up to lately?"  }}*/const res2 = await chain.invoke({ input: "what's my favorite sport?" });console.log({ res2 });/*{ res2: { text: ' You said your favorite sport is soccer.' } }*/const res3 = await chain.invoke({ input: "what's my name?" });console.log({ res3 });/*{ res3: { text: ' Your name is Perry.' } }*/// Sometimes we might want to save metadata along with the conversation snippetsconst memoryWithMetadata = new VectorStoreRetrieverMemory({  vectorStoreRetriever: vectorStore.asRetriever(    1,    (doc) => doc.metadata?.userId === "1"  ),  memoryKey: "history",  metadata: { userId: "1", groupId: "42" },});await memoryWithMetadata.saveContext(  { input: "Community is my favorite TV Show" },  { output: "6 seasons and a movie!" });console.log(  await memoryWithMetadata.loadMemoryVariables({    prompt: "what show should i watch? ",  }));/*{ history: 'input: Community is my favorite TV Show\noutput: 6 seasons and a movie!' }*/// If we have a retriever whose filter does not match our metadata, our previous messages won't appearconst memoryWithoutMatchingMetadata = new VectorStoreRetrieverMemory({  vectorStoreRetriever: vectorStore.asRetriever(    1,    (doc) => doc.metadata?.userId === "2"  ),  memoryKey: "history",});// There are no messages saved for userId 2console.log(  await memoryWithoutMatchingMetadata.loadMemoryVariables({    prompt: "what show should i watch? ",  }));/*{ history: '' }*/// If we need the metadata to be dynamic, we can pass a function insteadconst memoryWithMetadataFunction = new VectorStoreRetrieverMemory({  vectorStoreRetriever: vectorStore.asRetriever(1),  memoryKey: "history",  metadata: (inputValues, _outputValues) => ({    firstWord: inputValues?.input.split(" ")[0], // First word of the input    createdAt: new Date().toLocaleDateString(), // Date when the message was saved    userId: "1", // Hardcoded userId  }),});

#### API Reference:

*   [OpenAI](https://api.js.langchain.com/classes/langchain_openai.OpenAI.html) from `@langchain/openai`
*   [OpenAIEmbeddings](https://api.js.langchain.com/classes/langchain_openai.OpenAIEmbeddings.html) from `@langchain/openai`
*   [VectorStoreRetrieverMemory](https://api.js.langchain.com/classes/langchain_memory.VectorStoreRetrieverMemory.html) from `langchain/memory`
*   [LLMChain](https://api.js.langchain.com/classes/langchain_chains.LLMChain.html) from `langchain/chains`
*   [MemoryVectorStore](https://api.js.langchain.com/classes/langchain_vectorstores_memory.MemoryVectorStore.html) from `langchain/vectorstores/memory`
*   [PromptTemplate](https://api.js.langchain.com/classes/langchain_core_prompts.PromptTemplate.html) from `@langchain/core/prompts`

* * *

#### Help us out by providing feedback on this documentation page:

[

Previous

Conversation summary buffer memory

](/v0.1/docs/modules/memory/types/summary_buffer/)[

Next

Callbacks

](/v0.1/docs/modules/callbacks/)

Community

*   [Discord](https://discord.gg/cU2adEyC7w)
*   [Twitter](https://twitter.com/LangChainAI)

GitHub

*   [Python](https://github.com/langchain-ai/langchain)
*   [JS/TS](https://github.com/langchain-ai/langchainjs)

More

*   [Homepage](https://langchain.com)
*   [Blog](https://blog.langchain.dev)

Copyright © 2024 LangChain, Inc.