一架梯子,一头程序猿,仰望星空!
LangChain教程(JS版本) > 内容正文

基于向量存储的记忆组件


基于向量存储的记忆组件

VectorStoreRetrieverMemory 将记忆存储在VectorDB中,并在每次调用时查询最常见的前K个“重要”文档。

与大多数其他Memory类不同的是,它不会显式跟踪交互的顺序。

在这种情况下,“文档”是以前的对话片段。这可以用于引用AI在对话中早先被告知的相关信息。

import { OpenAI } from "langchain/llms/openai";
import { VectorStoreRetrieverMemory } from "langchain/memory";
import { LLMChain } from "langchain/chains";
import { PromptTemplate } from "langchain/prompts";
import { MemoryVectorStore } from "langchain/vectorstores/memory";
import { OpenAIEmbeddings } from "langchain/embeddings/openai";

const vectorStore = new MemoryVectorStore(new OpenAIEmbeddings());
const memory = new VectorStoreRetrieverMemory({
  // 1是要返回的文档数量,你可能需要返回更多,比如4
  vectorStoreRetriever: vectorStore.asRetriever(1),
  memoryKey: "history",
});

// 首先让我们将一些信息保存到内存中,就像在链中使用时一样。
await memory.saveContext(
  { input: "我最喜欢的食物是披萨" },
  { output: "好的,我记住了" }
);
await memory.saveContext(
  { input: "我最喜欢的运动是足球" },
  { output: "..." }
);
await memory.saveContext({ input: "我不喜欢凯尔特人队" }, { output: "好的" });

// 现在让我们使用内存来检索我们保存的信息。
console.log(
  await memory.loadMemoryVariables({ prompt: "我应该看什么运动?" })
);
/*
{ history: 'input: 我最喜欢的运动是足球\noutput: ...' }
*/

// 现在让我们在链中使用它。
const model = new OpenAI({ temperature: 0.9 });
const prompt =
  PromptTemplate.fromTemplate(\`以下是人类和AI之间友好的对话。AI健谈,并提供了大量与上下文相关的详细信息。如果AI不知道问题的答案,它会真诚地说不知道。

先前对话的相关片段:
{history}

(如果不相关,您无需使用这些信息)

当前对话:
人类:{input}
AI:\`);
const chain = new LLMChain({ llm: model, prompt, memory });

const res1 = await chain.call({ input: "嗨,我的名字是佩里,你好吗?" });
console.log({ res1 });
/*
{
  res1: {
    text: " 嗨佩里,我很棒!我正在探索与人工智能相关的不同主题,如自然语言处理和机器学习。你呢?最近在忙什么?"
  }
}
*/

const res2 = await chain.call({ input: "我最喜欢的运动是什么?" });
console.log({ res2 });
/*
{ res2: { text: ' 你说你最喜欢的运动是足球。' } }
*/

const res3 = await chain.call({ input: "我的名字是什么?" });
console.log({ res3 });
/*
{ res3: { text: ' 你的名字是佩里。' } }
*/


关联主题