双子座API(Gemini API):通过直接输入PDF来革新内容创作

2024/10/24 21:03:34

本文主要是介绍双子座API(Gemini API):通过直接输入PDF来革新内容创作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

摘要:

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)


这篇关于双子座API(Gemini API):通过直接输入PDF来革新内容创作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程