我刚开始接触大型语言模型(LLMs),特别是OpenAI和其他开源模型。网上有很多关于使用LlamaIndex来创建文档存储并对其进行查询的指南。我尝试了一些样本文档,但发现每次查询的成本很快就变得非常高。我使用了一份50页的PDF文档,进行一次摘要查询就花费了大约1.5美元。我注意到每次查询发送了大量的tokens,所以我猜测每次查询都发送了整个文档。考虑到有人可能想要使用数百万条记录,我不明白像LlamaIndex这样的工具在成本效益方面如何真正有用。
另一方面,我看到OpenAI允许你训练一个ChatGPT模型。使用这种方法,或者使用其他定制训练的LLMs,是不是在自己的数据上进行查询时更便宜、更有效呢?为什么我还要设置LlamaIndex呢?
回答:
简而言之:使用LlamaIndex或LangChain可以从现有数据源中获取特定问题的精确答案(即事实)。
为什么选择LlamaIndex或LangChain而不是微调模型?
答案很简单,但你自己无法回答,因为你只关注了成本。还有其他方面,不仅仅是成本。看看这个问题可用性的一面吧。
微调模型会给模型增加额外的通用知识,但微调后的模型不会对特定问题给出精确答案(即事实)。
人们用一些数据训练OpenAI模型,但当他们问与微调数据相关的问题时,他们惊讶地发现模型并没有用微调获得的知识来回答。请看官方OpenAI论坛上的一个示例解释:
我微调了一本7万字的书。我最初的期望是得到所需的问答,当时我还不了解更好的方法。但这次微调让我看到了这种方法的局限性。它只是学会了风格,并且大致保持在语料库内,但幻觉很多。
然后我将书分成句子,并通过嵌入向量逐步处理,现在我有了一个非常不错的书籍问答系统,但仅限于狭窄的问题。对于需要整个书籍上下文的问题,它就不那么好了。
另请参阅官方OpenAI文档:
微调可以改善结果的一些常见用例:
- 设定风格、语气、格式或其他定性方面
- 提高产生所需输出的可靠性
- 纠正未能遵循复杂提示的失败
- 以特定方式处理许多边缘情况
- 执行难以在提示中表达的新技能或任务
LlamaIndex或LangChain使你能够将OpenAI模型与现有数据源连接起来。例如,一家公司有一堆内部文档,包含各种指令、指南、规则等。LlamaIndex或LangChain可以用来查询所有这些文档,并为需要答案的员工提供精确的答案。
OpenAI模型(GPT-3、GPT-3.5、GPT-4等)无法查询其知识。查询需要从资源中计算嵌入向量,然后计算余弦相似度,这是OpenAI模型无法做到的。OpenAI模型只是根据前一个词后面应该跟哪个词的统计概率来给出答案。
我强烈建议你阅读我关于语义搜索的之前的回答。你会更好地理解这个答案。