跳至主要内容

Zep 云

Zep 是一款针对 AI 助手应用的长期记忆服务。使用 Zep,您可以赋予 AI 助手回忆过去对话的能力,无论这些对话有多久远,同时还能减少幻觉、延迟和成本。

注意:ZepCloudVectorStoreDocuments 一起使用,旨在用作 Retriever。它提供了与 Zep 的 ZepCloudMemory 类不同的功能,该类旨在用于持久化、丰富和搜索用户的聊天历史记录。

为什么选择 Zep 的 VectorStore? 🤖🚀

Zep 使用 Zep 服务器本地的低延迟模型自动嵌入添加到 Zep Vector Store 的文档。Zep TS/JS 客户端可在非 Node 边缘环境中使用。这两者加上 Zep 的聊天记忆功能,使 Zep 成为构建以延迟和性能为重的对话式 LLM 应用的理想选择。

支持的搜索类型

Zep 支持相似性搜索和最大边际相关性 (MMR) 搜索。MMR 搜索对于检索增强生成应用程序特别有用,因为它重新排列结果以确保返回的文档的多样性。

安装

注册 Zep 云 并创建一个项目。

按照 Zep 云 Typescript SDK 安装指南 安装并开始使用 Zep。

用法

您需要 Zep 云项目 API 密钥才能使用 Zep VectorStore。有关更多信息,请参阅 Zep 云文档

默认情况下,Zep 会自动嵌入所有文档,并且它不期望从用户那里接收任何嵌入。由于 LangChain 要求传递 Embeddings 实例,因此我们传递了 FakeEmbeddings

示例:从文档创建 ZepVectorStore 并查询

npm install @getzep/zep-cloud @langchain/openai @langchain/community @langchain/core
import { ZepCloudVectorStore } from "@langchain/community/vectorstores/zep_cloud";
import { FakeEmbeddings } from "@langchain/core/utils/testing";
import { TextLoader } from "langchain/document_loaders/fs/text";
import { randomUUID } from "crypto";

const loader = new TextLoader("src/document_loaders/example_data/example.txt");
const docs = await loader.load();
const collectionName = `collection${randomUUID().split("-")[0]}`;

const zepConfig = {
// Your Zep Cloud Project API key https://help.getzep.com/projects
apiKey: "<Zep Api Key>",
collectionName,
};

// We're using fake embeddings here, because Zep Cloud handles embedding for you
const embeddings = new FakeEmbeddings();

const vectorStore = await ZepCloudVectorStore.fromDocuments(
docs,
embeddings,
zepConfig
);

// Wait for the documents to be embedded
// eslint-disable-next-line no-constant-condition
while (true) {
const c = await vectorStore.client.document.getCollection(collectionName);
console.log(
`Embedding status: ${c.documentEmbeddedCount}/${c.documentCount} documents embedded`
);
// eslint-disable-next-line no-promise-executor-return
await new Promise((resolve) => setTimeout(resolve, 1000));
if (c.documentEmbeddedCount === c.documentCount) {
break;
}
}

const results = await vectorStore.similaritySearchWithScore("bar", 3);

console.log("Similarity Results:");
console.log(JSON.stringify(results));

const results2 = await vectorStore.maxMarginalRelevanceSearch("bar", {
k: 3,
});

console.log("MMR Results:");
console.log(JSON.stringify(results2));

API 参考

示例:使用 ZepCloudVectorStore 和表达式语言

import { ZepClient } from "@getzep/zep-cloud";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { ConsoleCallbackHandler } from "@langchain/core/tracers/console";
import { ChatOpenAI } from "@langchain/openai";
import { Document } from "@langchain/core/documents";
import {
RunnableLambda,
RunnableMap,
RunnablePassthrough,
} from "@langchain/core/runnables";
import { ZepCloudVectorStore } from "@langchain/community/vectorstores/zep_cloud";
import { StringOutputParser } from "@langchain/core/output_parsers";

async function combineDocuments(docs: Document[], documentSeparator = "\n\n") {
const docStrings: string[] = await Promise.all(
docs.map((doc) => doc.pageContent)
);
return docStrings.join(documentSeparator);
}

// Your Zep Collection Name
const collectionName = "<Zep Collection Name>";

const zepClient = new ZepClient({
// Your Zep Cloud Project API key https://help.getzep.com/projects
apiKey: "<Zep Api Key>",
});

const vectorStore = await ZepCloudVectorStore.init({
client: zepClient,
collectionName,
});

const prompt = ChatPromptTemplate.fromMessages([
[
"system",
`Answer the question based only on the following context: {context}`,
],
["human", "{question}"],
]);

const model = new ChatOpenAI({
temperature: 0.8,
modelName: "gpt-3.5-turbo-1106",
});
const retriever = vectorStore.asRetriever();

const setupAndRetrieval = RunnableMap.from({
context: new RunnableLambda({
func: (input: string) => retriever.invoke(input).then(combineDocuments),
}),
question: new RunnablePassthrough(),
});
const outputParser = new StringOutputParser();

const chain = setupAndRetrieval
.pipe(prompt)
.pipe(model)
.pipe(outputParser)
.withConfig({
callbacks: [new ConsoleCallbackHandler()],
});

const result = await chain.invoke("Project Gutenberg?");

console.log("result", result);

API 参考


本页面是否有用?


您也可以在 GitHub 上留下详细的反馈 GitHub.