在做RAG以前你可以尝试的事:Prompt Caching

2024-08-23 16:36
文章标签 尝试 prompt rag 以前 caching

本文主要是介绍在做RAG以前你可以尝试的事:Prompt Caching,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

image.png

近年来,科技领域的创新不断涌现,为我们带来了许多令人兴奋的技术突破和应用。近期,Anthropic公司引入了与Claude配合使用的提示缓存技术(prompt caching),这项技术能够将长提示的成本降低高达90%,延迟减少高达85%。这一技术有望成为小规模检索增强生成(RAG)的一个良好替代方案。然而,实际上谷歌才是最早通过其API引入上下文缓存(context caching)技术的公司。本文将深入探讨这些技术的应用及其创新性。

image.png

Gemini API的文档处理能力

Gemini API不仅支持上下文缓存,还可以直接通过API处理PDF文件,无需任何预处理。这一创新使得我们不再需要依赖于外部的预处理库,如unstructured IO或LlamaPars。令人惊讶的是,Gemini API最近进行了重大升级,现在可以上传最多1000页的PDF文件,这基本上可以满足大多数应用场景的需求。

虽然这种方法仍然是按令牌计费,但你可以将其与上下文缓存结合使用,以节省令牌成本。以下是我们将要探讨的主要内容:

  1. Gemini API的文档处理能力
  2. 上下文缓存的实际应用
  3. 多文件处理与缓存策略

Gemini API的技术规格

根据官方文档,Gemini 1.5 Pro和Flash版本支持最多3600页的文档处理。文档必须是application/pdf MIME类型,每页文档相当于258个令牌。无论文档的像素多少,较大的页面会缩小到3072x3072像素,同时保持纵横比,而较小的页面会放大到768x768像素。这意味着无论页面大小如何,都可以进行处理,但较小页面的处理成本不会降低,除了带宽和性能改进方面的差异。

实际操作指南

在上传PDF文件之前,有几件事需要注意:应先将页面旋转到正确的方向,避免上传模糊的页面,如果使用单页文档,需将提示放在页面之后。Gemini API允许每个项目存储最多20GB的文件,每个文件最大2GB,文件会在48小时内存储,可在此期间通过API密钥访问,但无法通过API下载。

接下来,我们将展示如何使用Gemini API进行文档处理和上下文缓存。

开始使用Gemini API

首先需要安装Google生成AI包(google generative ai package),然后获取API密钥。以下是一些基本步骤:

  1. 上传PDF文件:使用upload file函数上传文件,提供文件名和显示名,并生成唯一的URI。
  2. 处理PDF文件:通过生成内容函数处理文件,传递生成的文件URI和提示。例如,可以让模型将文档总结为一个项目符号列表。

上下文缓存的应用

上下文缓存可以显著降低处理成本。在上传文件并生成URI后,你可以创建一个缓存并定义缓存的生存时间。例如,将文档缓存15分钟,并在之后的查询中使用该缓存内容。这不仅能减少成本,还能提高处理效率。

多文件处理

如果需要处理多个文件,可以创建多个缓存对象,然后在提示中引用这些缓存。这样可以在单次查询中处理多个文档,非常高效。

实验与测试

为了展示Gemini API的强大功能,我们进行了几个实验:

  1. 文档总结:让模型总结Gemini 1.5技术报告和一篇关于基于上下文学习重新思考对齐的论文。
  2. 图像解释:测试模型的多模态能力,例如解释Gemini 1.5技术报告中的图表。
  3. 多文件对比:比较两篇文档的论文陈述,并提供反驳意见。

通过这些实验,我们发现Gemini API在处理复杂文档和多模态数据方面表现出色,特别是在上下文缓存的支持下,能够以更低的成本和更高的效率完成任务。

未来展望

上下文缓存和提示缓存技术的引入,为我们提供了新的工具来处理和优化大规模数据处理任务。虽然这些新技术可能不会完全取代传统的RAG方法,但在特定场景下,它们提供了更为经济高效的解决方案。

在未来,我们预计会看到更多公司和开发者采用这些创新技术,以提升数据处理的效率和降低成本。对于那些对科技充满热情的普通用户来说,这些进展无疑是非常值得关注和期待的。

总的来说,Gemini API和Claude的上下文缓存和提示缓存技术展示了科技领域的无限可能性。通过不断创新,我们可以期望看到更多类似的突破,为我们的生活和工作带来更多便利和效率。

关注我,每天带你开发一个AI应用,每周二四六直播,欢迎多多交流。

image.png

这篇关于在做RAG以前你可以尝试的事:Prompt Caching的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099921

相关文章

Prompt - 将图片的表格转换成Markdown

Prompt - 将图片的表格转换成Markdown 0. 引言1. 提示词2. 原始版本 0. 引言 最近尝试将图片中的表格转换成Markdown格式,需要不断条件和优化提示词。记录一下调整好的提示词,以后在继续优化迭代。 1. 提示词 英文版本: You are an AI assistant tasked with extracting the content of

概率DP (由一道绿题引起的若干问题。目前为一些老题,蒟蒻的尝试学习1.0)

概率DP: 利用动态规划去解决 概率 期望 的题目。 概率DP 求概率(采用顺推) 从 初始状态推向结果,同一般的DP类似,只是经历了概率论知识的包装。 老题: 添加链接描述 题意: 袋子里有w只白鼠,b只黑鼠,A和B轮流从袋子里抓,谁先抓到白色谁就赢。A每次随机抓一只,B每次随机 抓完一只后 会有另外一只随机老鼠跑出来。如果两个人都没有抓到白色,那么B赢。A先抓,问A赢得概率。 w b 均在

重复采样魔法:用更多样本击败单次尝试的最强模型

这篇文章探讨了通过增加生成样本的数量来扩展大型语言模型(LLMs)在推理任务中的表现。 研究发现,重复采样可以显著提高模型的覆盖率,特别是在具有自动验证工具的任务中。研究还发现,覆盖率与样本数量之间的关系可以用指数幂律建模,揭示了推理时间的扩展规律。尽管多数投票和奖励模型在样本数量增加时趋于饱和,但在没有自动验证工具的任务中,识别正确样本仍然是一个重要的研究方向。 总体而言,重复采样提供了一种

尝试用java spring boot+VUE3实现前后端分离部署(8/31)

前言         这几天开学了,公司这边几个和学校对接的项目都挺忙的,然后我又开始有点闲的情况了。问大佬能不能继续看看若依的项目,大佬让我自己去学了。在看若依的项目的时候在想,python的FLASK后端实现和JAVA spring boot的实现差别大不大,两者实现的思路估计大差不差,那具体的代码逻辑和代码实现又有多大差别,java面向对象的编程思想又是怎么体现的。这些想法迫使我将原来使用

我的第2个AI项目-RAG with Gemma hosted on HuggingFace and Weaviate in DSPy

目录 项目简介概述时间kaggle地址主要工作和收获技术栈数据集模型表现 未来项目说明思路和原则为什么不把现在的项目做深一点?博客风格转变 bug修复版本兼容问题 项目简介 概述 本项目简要介绍了如何使用 DSPy 构建一个简单的 RAG 管道,且利用了托管在 Hugging Face 上的 Gemma LLM模型 和 Weaviate 向量数据库。 时间 2024.09

【异常】java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_password‘.

异常现象 执行mysql数据库操作的时候,出现以下异常信息: java.sql.SQLException: Unable to load authentication plugin 'caching_sha2_password'.at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:868) ~[mysql-connector-

jmeter压力测试,通过LLM利用RAG实现知识库问答,NEO4J部署,GraphRAG以知识图谱在查询时增强提示实现更准确的知识库问答(9/7)

前言         这周也是杂七杂八的一天(高情商:我是一块砖,哪里需要往哪里搬),首先是接触了jemter这个压力测试工具,然后帮公司的AIGC项目编写使用手册和问答手册的第一版,并通过这个平台的智能体实现知识库问答的功能展示,以及部分个人扩展和思考(NEO4J创建知识图谱的GraphRAG)。 Jmeter         Jmeter是一个压力测试工具,一开始导师叫我熟悉的时候我还说

尝试制作和使用lib与dll

前言 关于lib和dll这两种库的概念,网上已有很多讨论可以参阅。这篇博客主要记录我动手尝试用VS来制作lib和dll并随后使用的过程。 参考: lib和dll的区别与使用 - LuckyAnnika - 博客园 C++编写一个简单的DLL - _No.47 - 博客园 dumpbin工具 在开始之前,需要介绍一下VS提供的dumpbin工具,这个工具可以获取一些lib与dll中的信息。 它

【UE4源代码观察】尝试调试UBT

前言 在之前的博客《【UE4源代码观察】手动建立一个使用UBT进行编译的空白工程》中我尝试动手搭建了一个用UBT进行编译的空白的工程。但是对UBT其中的逻辑并不理解。 后来在学习UE4源代码的过程中,又了解了它的一些行为。目前,对我影响较大的是:1.他会有一些逻辑去添加一些宏。2.他会有一些逻辑去给修改ModuleRules(和.build.cs中内容的角色一样)。这时候我发现一些和预期不太一

尝试进入Vulkan的ValidationLayer中的代码调用栈

问题 当前,我遇到了一个Vulkan中的错误断点: (可以看到最后的位置是“VkLayer_khronos_validation.dll”,即Validation Layer) 这个中断可以在工程YaksueGraphics的这个提交中复现: 当我双击最后的栈时,提示没有cpp文件可供查看 这个core_validation.cpp是Validation Layer中的代码,而对于V