Gemini API现在支持直接处理PDF文档以生成内容,消除图像转换并降低成本。本报告提供一个示例脚本,以展示此新功能及其潜在应用。
开始Gemini API最近引入了直接处理PDF数据以生成内容的能力,大大增强了其功能,。此前,为了使用PDF数据生成内容,需要将每个PDF页面转换成单独的图像。这个耗时且资源密集的过程已被简化,从而大幅降低了处理成本。
通过直接读取PDF内容,Gemini API为各种应用程序带来了新的可能性。本报告将提供一个示例脚本,以展示如何有效利用Gemini API直接从PDF数据生成内容。
一个样本脚本在此脚本中使用了GeminiWithFiles(谷歌应用脚本)。因此,在运行下面的脚本之前,请先安装它。参考更多使用说明请参见。
请将下面的脚本复制并粘贴到 Google 应用脚本的脚本编辑器中。然后,请设置您的 API 密钥。
function sample() {
const apiKey = "###"; // 请设置您的API密钥。
const urls = [
"https://journals.aps.org/pr/pdf/10.1103/PhysRev.48.73", // 来自 https://journals.aps.org/pr/abstract/10.1103/PhysRev.48.73
"https://arxiv.org/pdf/1706.03762.pdf", // 来自 https://research.google/pubs/attention-is-all-you-need/
];
const blobs = UrlFetchApp.fetchAll(urls).map((r) => r.getBlob());
const jsonSchema = {
description:
"请总结以下论文,每篇总结不超过50字。同时,获取每篇论文的标题和作者。",
type: "array",
items: {
type: "object",
properties: {
title: { description: "论文标题", type: "string" },
authors: { description: "论文作者", type: "string" },
summary: {
description: "论文总结,50字以内。",
type: "string",
},
},
required: ["title", "summary"],
additionalProperties: false,
},
};
const g = new GeminiWithFiles.geminiWithFiles({
apiKey,
response_mime_type: "application/json",
model: "models/gemini-1.5-pro-latest",
doCountToken: true,
});
const fileList = g.setBlobs(blobs).uploadFiles();
console.log(fileList); // 在这里,你可以看到上传数据的元数据。
const res = g
.使用已上传文件生成内容(fileList)
.generateContent({ jsonSchema });
g.deleteFiles(fileList.map(({ name }) => name));
console.log(res);
}
脚本中的这些URL如下。
-
https://journals.aps.org/pr/pdf/10.1103/PhysRev.48.7
:这个PDF来自这篇论文。 https://arxiv.org/pdf/1706.03762.pdf
:这个PDF来自这篇论文。
在这个脚本里,PDF数据被下载下来并用于Gemini API。脚本流程可以在本报告顶部的图片中看到。
zh: 2024年8月3日这天,GeminiWithFiles 更新至 v2.0.0。这次更新还包括我更新了上述脚本。
结果如下运行此脚本时,会得到以下结果。多个PDF文件可以一次性通过一个API调用来解析。
[
{
"title": "广义相对论中的粒子难题",
"authors": "A. 爱因斯坦 和 N. 罗森",
"summary": "本文探讨了一种基于广义相对论和电磁学的物质和电原子论理论。它修改了引力方程,以便在静态球对称情况下有规则的解,并将粒子表示为“桥”,连接两个相同的空间片层。该理论解释了没有负质量粒子的存在,并提供了一个对场和运动的统一处理。"
},
{
"title": "注意力就够了",
"authors": "Ashish Vaswani, Noam Shazeer, Niki Parmar, Llion Jones, Aidan N. Gomez, Illia Polosukhin, Łukasz Kaiser, Jakob Uszkoreit,",
"summary": "本文介绍了一种基于注意力机制的新颖网络架构——Transformer,用于序列转换。它用多头自注意力机制替代了传统的循环和卷积层,从而实现了更好的并行化和性能。在机器翻译实验中,显著提高了BLEU分数和训练时间,达到了最先进的水平。"
}
]
从v2开始,GeminiWithFiles可以直接使用PDF blob,就像上述脚本那样。但是,当使用v1时,PDF blob会被转换成每页的图片。当使用v1时,脚本通过const fileList = await g.setBlobs(blobs, false).uploadFiles();
这一行中的false
参数来决定如何处理PDF数据。这里,false
表示脚本会直接将PDF数据提供给API进行处理。相反,如果将参数设置为true
(例如const fileList = await g.setBlobs(blobs, true).uploadFiles();
),脚本会将每一页PDF转换成单独的图片后再发送给API。
这项实验比较了直接使用PDF文件和将PDF转换为图像的处理时间的对比。具体如下:
此处直接使用了Markdown格式中的破折号列表,未做更改。
- 直接处理PDF:15秒,基于图像的处理方式:120秒
分别在(测试过的)来自https://journals.aps.org/pr/pdf/10.1103/PhysRev.48.7
的5页数PDF和来自https://arxiv.org/pdf/1706.03762.pdf
的15页数PDF上进行了测试。
如结果所示,直接将PDF数据输入Gemini API的处理成本明显低于基于图像转换的方法。这很可能是由于每一页图像转换过程中产生的额外开销。
注此示例脚本是为Google Apps Script编写的。不过,这种方法也可以应用于其他语言,除了Google Apps Script之外。
参考- GeminiWithFiles(点击链接查看 GeminiWithFiles 的 GitHub 页面)
(A file processing tool based on Gemini)
共同学习,写下你的评论
评论加载中...
作者其他优质文章