LangChain如何帮助克服ChatGPT的上下文大小限制?

Han*_*ker 2 document openai-api langchain

由于上下文大小有限,无法将长文档直接传递到 ChatGPT。因此,例如,乍一看不可能回答问题或总结长文档。我已经了解了 ChatGPT 原则上如何“了解”更大的上下文 - 基本上是通过从聊天历史中总结一系列先前的上下文 - 但这是否足以检测很长一段时间内的真正的远程依赖关系(带有“含义”)文本?

LangChain 似乎提供了一个解决方案,利用 OpenAI 的 API 和 矢量存储。我正在寻找一个高级描述,当 LangChain 将长文档甚至长文档语料库提供给 ChatGPT,然后通过巧妙的自动提示(例如问答或摘要)来利用 ChatGPT 的 NLP 功能时,会发生什么情况。我们假设文档已经格式化为 LangChain Document 对象。

小智 6

因此,您的文档包含大量文本。LangChain可以加载这些文档并从这些文档中获取文本。由于文本太大而无法用于上下文,因此需要将其分成几个块。

例如,这可以通过 LangChain 的RecursiveCharacterTextSplitter. 您必须确定块的大小,因此它不会太大而无法用于上下文大小。通过设置块重叠,您可以保留块之间的上下文。

获得所需的块后,您需要为每个块创建嵌入,例如使用OpenAIEmbeddings. 这些嵌入将用于查找最相关的文本块以回答查询。这意味着它不会将文档的全部内容用于上下文,而只会使用文档中最相关的部分。这些块和嵌入被存储到矢量数据库中。

当找到相关块时,可以将它们传递到提示模板中。例如LangChain中的默认提示模板RetrievalQA如下所示:

Use the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer.

{{CONTEXT}}

Question: {{QUESTION}}?
Helpful Answer:
Run Code Online (Sandbox Code Playgroud)

然后将其传递给法学硕士以生成答案。