上一条消息的链接是在读 Claude 提出的一种新的 RAG 检索方式——Contextual Retrieval 的时候发现的:
https://www.anthropic.com/news/contextual-retrieval
在开发 RAG 应用时,第一步就是将数据源文本预处理,最简单的方式是将长文本分割成较小的 chunk,但分割会导致信息失去在原本上下文中的相关性,使得最终检索结果不准确。这是个非常普遍的问题,有许多解决方案,但一直没有标准的最佳实践。
Contextual Retrieval 提供了一种新的思路,在分割 chunk 时,为每个 chunk 用 LLM 生成一段基于其上下文的总结,再生成 text embedding 并进行检索。比如一段 chunk 原本是:
公司收入比上一季度增长了3%
处理后则变成:
这段摘自关于ACME公司2023年第二季度表现的SEC文件;上一季度的收入为3.14亿美元。公司的收入比上一季度增长了3%
在进行检索时,能更好地匹配用户的问题。
这种方式看起来是不错,但需要对每段 chunk 都使用原文询问 LLM,会导致费用的几何级增长,这时就可以用到 Prompt Caching 了,把原文作为系统提示词进行缓存,可以大幅减少开销。不得不说 Claude 真是打得一手好算盘,通过开发一种新技术让用户的使用量大大增加,关键是确实有用,而且咱们还得谢谢它呢。
https://www.anthropic.com/news/contextual-retrieval
在开发 RAG 应用时,第一步就是将数据源文本预处理,最简单的方式是将长文本分割成较小的 chunk,但分割会导致信息失去在原本上下文中的相关性,使得最终检索结果不准确。这是个非常普遍的问题,有许多解决方案,但一直没有标准的最佳实践。
Contextual Retrieval 提供了一种新的思路,在分割 chunk 时,为每个 chunk 用 LLM 生成一段基于其上下文的总结,再生成 text embedding 并进行检索。比如一段 chunk 原本是:
公司收入比上一季度增长了3%
处理后则变成:
这段摘自关于ACME公司2023年第二季度表现的SEC文件;上一季度的收入为3.14亿美元。公司的收入比上一季度增长了3%
在进行检索时,能更好地匹配用户的问题。
这种方式看起来是不错,但需要对每段 chunk 都使用原文询问 LLM,会导致费用的几何级增长,这时就可以用到 Prompt Caching 了,把原文作为系统提示词进行缓存,可以大幅减少开销。不得不说 Claude 真是打得一手好算盘,通过开发一种新技术让用户的使用量大大增加,关键是确实有用,而且咱们还得谢谢它呢。