A API Gemini continua a crescer. Em 5 de agosto de 2024, atualizei amplamente GeminiWithFiles para v2.xx. Com esta grande atualização, a versão foi alterada de v1 para v2.
Se você quiser usar GeminiWithFiles v1.xx, veja aqui.
Esta é uma biblioteca de scripts do Google Apps para API Gemini com arquivos.
Uma nova biblioteca de scripts do Google Apps chamada GeminiWithFiles simplifica o uso do Gemini, um grande modelo de linguagem, para processar dados não estruturados, como imagens e PDFs. GeminiWithFiles pode fazer upload de arquivos, gerar conteúdo e criar descrições de várias imagens de uma só vez. Isso reduz significativamente a carga de trabalho e amplia as possibilidades de uso do Gemini.
Recentemente, o Gemini, um grande modelo de linguagem do Google AI, trouxe novas possibilidades para diversas tarefas ao permitir o uso de dados não estruturados como dados estruturados. Isto é particularmente significativo porque existe uma grande quantidade de informações em formatos não estruturados, como documentos de texto, imagens e vídeos.
A API Gemini 1.5, lançada recentemente, expande significativamente esses recursos. Pode gerar conteúdo de até 1 milhão de tokens, um aumento substancial em relação às versões anteriores. Além disso, o Gemini 1.5 agora pode processar até 3.000 arquivos de imagem, excedendo amplamente o limite de 16 imagens do Gemini 1.0. Referência
Embora o Gemini não possa trabalhar diretamente com formatos do Google Drive, como Documentos, Planilhas e Apresentações, existem soluções alternativas. No estágio atual, os dados PDF podem ser processados diretamente com a API Gemini. Usando isso, os arquivos do Google Docs são convertidos em PDF e usados com a API Gemini. Referência
Este relatório apresenta uma nova biblioteca de scripts do Google Apps chamada "GeminiWithFiles" que simplifica esse processo. GeminiWithFiles permite aos usuários fazer upload de arquivos e gerar conteúdo facilmente usando os poderosos recursos do Gemini. Ele também permite a criação eficiente de descrições a partir de várias imagens com uma única chamada de API, reduzindo significativamente a carga de trabalho em comparação com o processamento de cada imagem individualmente, conforme demonstrado em meu relatório anterior. Referência
Ao simplificar o processo e expandir os recursos, GeminiWithFiles é promissor para vários casos de uso em diferentes domínios. Este relatório serve como uma abordagem ampliada ao anterior, visando reduzir ainda mais os custos do processo e melhorar a eficiência ao trabalhar com Gemini e dados não estruturados.
Criei esta biblioteca com base nos seguintes relatórios.
Esta biblioteca GeminiWithFiles permite interagir com Gemini, uma poderosa plataforma de processamento e gerenciamento de documentos, por meio de uma API fácil de usar. Aqui está o que você pode conseguir com esta biblioteca:
Gerenciamento de arquivos:
Carregamento de conteúdo:
Gerenciamento de histórico de bate-papo:
Geração de conteúdo:
Especificação de saída:
Especifique o formato de saída desejado para os resultados gerados pela API Gemini.
Usando response_mime_type
e esquema JSON, o formato de saída é controlado. Referência
Para testar este script, execute as etapas a seguir.
Acesse https://makersuite.google.com/app/apikey e crie sua chave API. Nesse momento, ative a API Generative Language no console da API. Esta chave de API é usada para este script de amostra.
Este documento oficial também pode ser visto. Ref.
Crie um projeto independente do Google Apps Script. Claro, esse script também pode ser usado com o script vinculado ao contêiner.
E abra o editor de script do projeto Google Apps Script.
Existem 2 padrões para usar GeminiWithFiles.
Se você usar esta biblioteca como uma biblioteca do Google Apps Script, instale-a em seu projeto do Google Apps Script da seguinte maneira.
Crie um projeto do Google Apps Script. Ou abra seu projeto do Google Apps Script.
Instale esta biblioteca.
1dolXnIeXKz-BH1BlwRDaKhzC2smJcGyVxMxGYhaY2kqiLa857odLXrIC
Se você usa esta biblioteca em seu próprio projeto do Google Apps Script, copie e cole o script "classGeminiWithFiles.js" em seu projeto do Google Apps Script. Com isso, o script pode ser usado.
"main.js" é usado para a biblioteca de scripts do Google Apps. Portanto, neste padrão, você não é obrigado a usá-lo.
Esta biblioteca usa os 2 escopos a seguir.
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/drive
Se você quiser usar o token de acesso, vincule o projeto Google Cloud Platform ao projeto Google Apps Script. E adicione o seguinte escopo.
https://www.googleapis.com/auth/generative-language
Além disso, você pode ver o documento oficial da API Gemini em https://ai.google.dev/api/rest.
Métodos | Descrição |
---|---|
setFileIds(fileIds, asImage = false) | Defina IDs de arquivo. |
setBlobs(blobs) | Definir bolhas. |
withUploadedFilesByGenerateContent(fileList = []) | Crie um objeto para usar o método generateContent. |
uploadArquivos(n = 50) | Carregar arquivos para o Gemini. |
getListaArquivos() | Obtenha a lista de arquivos no Gemini. |
deleteFiles(nomes, n = 50) | Exclua arquivos do Gemini. |
gerarConteúdo(objeto) | Método principal. Gere conteúdo pela API Gemini. |
setFileIdsOrUrlsWithResumableUpload(objeto) | Arquivos com mais de 50 MB podem ser carregados no Gemini. |
Ao instalar GeminiWithFiles como uma biblioteca em seu projeto do Google Apps Script, use o script a seguir.
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
ou
Ao copiar e colar diretamente o script da classe GeminiWithFiles em seu projeto do Google Apps Script, use o script a seguir.
const g = new GeminiWithFiles ( object ) ;
O valor do object
é o seguinte.
{Object} object API key or access token for using Gemini API.
{String} object.apiKey API key.
{String} object.accessToken Access token.
{String} object.model Model. Default is "models/gemini-1.5-pro-latest".
{String} object.version Version of API. Default is "v1beta".
{Boolean} object.doCountToken Default is false. If this is true, when Gemini API is requested, the token of request is shown in the log.
{Array} object.history History for continuing chat.
{Array} object.functions If you want to give the custom functions, please use this.
{String} object.response_mime_type In the current stage, only "application/json" can be used.
{String} object.responseMimeType In the current stage, only "application/json" can be used.
{Object} object.response_schema JSON schema for controlling the output format.
{Object} object.responseSchema JSON schema for controlling the output format.
{Number} object.temperature Control the randomness of the output.
{Object} object.systemInstruction Ref: https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/gemini.
{Boolean} object.exportTotalTokens When this is true, the total tokens are exported as the result value. At that time, the generated content and the total tokens are returned as an object.
{Boolean} object.exportRawData The default value is false. When this is true, the raw data returned from Gemini API is returned.
{Object} object.toolConfig The default is null. If you want to directly give the object of "toolConfig", please use this.
{Array} object.tools The default value is null. For example, when you want to use "codeExecution", please set `tools: [{ codeExecution: {}}]`.
{PropertiesService.Properties} object.propertiesService PropertiesService.getScriptProperties()
{Boolean} object.resumableUploadAsNewUpload When you want to upload the data with the resumable upload as new upload, please set this as true. The default is false.
Quando você quiser usar response_mime_type
, forneça jsonSchema
para o método generateContent. No estágio atual, apenas "application/json"
pode ser usado para response_mime_type
.
Quando você quiser usar systemInstruction
, confirme o documento oficial Ref.
Gemini 1.5 Flash Latest ( models/gemini-1.5-flash-latest
) é usado como modelo padrão. Quando você quiser usar o Gemini 1.5 Pro Latest ( models/gemini-1.5-pro-latest
), use-o como const g = GeminiWithFiles.geminiWithFiles({ apiKey, model: "models/gemini-1.5-pro-latest" })
.
No estágio atual, quando response_schema
é usado, response_mime_type: "application/json"
é usado automaticamente.
Defina IDs de arquivo. Os arquivos de IDs de arquivo são carregados no Gemini.
Neste caso, async/await é usado na função.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
let fileIds = [ ] ;
const files = DriveApp . getFolderById ( folderId ) . getFiles ( ) ;
while ( files . hasNext ( ) ) {
const file = files . next ( ) ;
fileIds . push ( file . getId ( ) ) ;
}
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setFileIds ( fileIds , false ) . uploadFiles ( ) ;
console . log ( res ) ;
}
setFileIds
são String[] (os IDs dos arquivos no Google Drive) e o booleano, respectivamente. Se o segundo argumento for falso, os arquivos inseridos de IDs de arquivo serão carregados como dados brutos. Se o segundo argumento for verdadeiro, os arquivos de IDs de arquivo inseridos são convertidos em dados de imagem e carregados. O padrão do segundo argumento é falso.false
neste método como setFileIds(fileIds, false)
. Definir bolhas. Os blobs são carregados no Gemini.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
const blobs = [ ] ;
const files = DriveApp . getFolderById ( folderId ) . getFiles ( ) ;
while ( files . hasNext ( ) ) {
blobs . push ( files . next ( ) . getBlob ( ) ) ;
}
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setBlobs ( blobs ) . uploadFiles ( ) ;
console . log ( res ) ;
}
setBlobs
é Blob[].Crie um objeto para usar o método generateContent.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const q = "###" ; // Please set your question.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . getFileList ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { q } ) ;
console . log ( res ) ;
}
withUploadedFilesByGenerateContent
possui apenas um argumento. Esse é o valor do método getFileList. Você pode ver os valores reais depois de fazer upload dos arquivos.Carregar arquivos para o Gemini. Os arquivos são carregados no Gemini usando os IDs de arquivo ou blobs inseridos.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const fileIds = [ "###fileId1###" , "###fileId2###" , , , ] ; // Please set your file IDs in this array.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setFileIds ( fileIds , false ) . uploadFiles ( ) ;
console . log ( res ) ;
}
Neste script, os arquivos de fileIds
são carregados no Gemini com os dados brutos. Se setFileIds(fileIds, false)
for modificado para setFileIds(fileIds, true)
, os arquivos serão carregados no Gemini como imagens.
Ao usar o Blob diretamente, você pode usar o script a seguir.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const fileIds = [ "###fileId1###" , "###fileId2###" , , , ] ; // Please set your file IDs in this array.
const blobs = fileIds . map ( id => DriveApp . getFileById ( id ) . getBlob ( ) ) ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setBlobs ( blobs ) . uploadFiles ( ) ;
console . log ( res ) ;
}
Obtenha a lista de arquivos no Gemini.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . getFileList ( ) ;
console . log ( res ) ;
}
Exclua arquivos do Gemini.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const names = g . getFileList ( ) . map ( ( { name } ) => name ) ;
if ( names . length == 0 ) return ;
g . deleteFiles ( names ) ;
console . log ( ` ${ names . length } files were deleted.` ) ;
}
Método principal. Gere conteúdo pela API Gemini. Mais scripts de exemplo podem ser vistos na seção "Scripts de exemplo" a seguir.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res ) ;
}
Neste script, o conteúdo é gerado com a chamada da função.
Quando você quiser usar response_mime_type
, forneça jsonSchema
para o método generateContent da seguinte maneira. Neste caso, ao fornecer apenas o esquema JSON, esta biblioteca pode retornar um objeto válido. Você também pode ver informações detalhadas sobre response_mime_type
em meu relatório.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( {
apiKey ,
response_mime_type : "application/json" ,
} ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const jsonSchema = {
title : "5 popular cookie recipes" ,
description : "List 5 popular cookie recipes." ,
type : "array" ,
items : {
type : "object" ,
properties : {
recipe_name : {
description : "Names of recipe." ,
type : "string" ,
} ,
} ,
} ,
} ;
const res = g . generateContent ( { jsonSchema } ) ;
console . log ( res ) ;
}
Quando este script é executado, o seguinte resultado é obtido.
[
{ "recipe_name" : " Chocolate Chip Cookies " },
{ "recipe_name" : " Peanut Butter Cookies " },
{ "recipe_name" : " Oatmeal Cookies " },
{ "recipe_name" : " Sugar Cookies " },
{ "recipe_name" : " Snickerdoodle Cookies " }
]
Este método pode fazer upload de arquivos com mais de 50 MB.
A partir da v2.xx, isso pode ser alcançado. Isto é da Ref e Ref.
A partir da versão 2.0.3, ao usar este método, inclua propertiesService: PropertiesService.getScriptProperties()
no objeto inicial da seguinte maneira. Porque, quando PropertiesService.getScriptProperties()
é usado na biblioteca, os valores são colocados na biblioteca. Quando criei Ref e Ref, supus que o script fosse usado copiando e colando em vez da biblioteca. Então, incluí PropertiesService.getScriptProperties()
no script. Mas notei que quando isso é usado com GeminiWithFiles, cada usuário é obrigado a usar PropertiesService.getScriptProperties()
. Então, eu modifiquei isso.
O script de amostra é o seguinte.
function myFunction ( ) {
// This URL is from https://github.com/google/generative-ai-docs/blob/main/site/en/gemini-api/docs/prompting_with_media.ipynb
const url = "https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4" ; // 64,657,027 bytes
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties() }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIdsOrUrlsWithResumableUpload ( [ { url } ] ) . uploadFiles ( ) ;
Utilities . sleep ( 10000 ) ; // This might be required to be used because the state of the uploaded file might not be active.
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
console . log ( res ) ;
}
Quando este script é executado, o seguinte log pode ser visto no log.
- Get metadata
- Calculate chunks
- Get location
- Download and upload data.
- Now... 1/4
- Start downloading data with 0-16777215
- Finished downloading data with 0-16777215
- Start uploading data with 0-16777215
- Finished uploading data with 0-16777215
- Upload the next chunk.
- Now... 2/4
- Start downloading data with 16777216-33554431
- Finished downloading data with 16777216-33554431
- Start uploading data with 16777216-33554431
- Finished uploading data with 16777216-33554431
- Upload the next chunk.
- Now... 3/4
- Start downloading data with 33554432-50331647
- Finished downloading data with 33554432-50331647
- Start uploading data with 33554432-50331647
- Finished uploading data with 33554432-50331647
- Upload the next chunk.
- Now... 4/4
- Start downloading data with 50331648-64657026
- Finished downloading data with 50331648-64657026
- Start uploading data with 50331648-64657026
- Finished uploading data with 50331648-64657026
- Done.
- Now, the state of the uploaded files "url@https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4$page@1$maxPage@1" is not active. So, it will wait until it is active. Please wait for 10 seconds. Retry (1/3)
- 1 uploaded files are used with generateCotent.
- The video is a cartoon that shows a large, white rabbit in a field. The rabbit is shown waking up from a nap and then is seen eating an apple. After eating the apple, the rabbit is approached by a bird. The rabbit is scared of the bird and tries to hide from it. The bird flies away. The rabbit is seen smiling and then a squirrel flies toward the rabbit. The squirrel is startled by the rabbit and flies away. The rabbit is then seen catching another squirrel with its vine and the scene ends with a close-up of the rabbit's face.
Se o seu arquivo for grande e o estado do arquivo enviado ainda não for "ATIVO", teste o script a seguir.
function myFunction ( ) {
// This URL is from https://github.com/google/generative-ai-docs/blob/main/site/en/gemini-api/docs/prompting_with_media.ipynb
const url = "https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4" ; // 64,657,027 bytes
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties() }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIdsOrUrlsWithResumableUpload ( [ { url } ] ) . uploadFiles ( ) ;
console . log ( JSON . stringify ( fileList ) ) ;
// Please copy the value of "fileList".
}
Com isso, o arquivo pode ser carregado. E você pode usar o arquivo carregado depois de esperar tempo suficiente para alterar o estado para "ATIVO". O arquivo carregado pode ser usado da seguinte maneira.
function myFunction ( ) {
const fileList = [ ### ] ; // This is from the above script.
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties() }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
console . log ( res ) ;
}
Como opção adicional, quando você quiser fazer upload dos dados com o upload recuperável como um novo upload, defina resumableUploadAsNewUpload: true
da seguinte maneira. Com isso, a propriedade é limpa e o upload é executado.
function myFunction ( ) {
const fileList = [ ### ] ; // This is from the above script.
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) , resumableUploadAsNewUpload : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties(), resumableUploadAsNewUpload: true }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
console . log ( res ) ;
}
Quando q
é usado, apenas perguntas de texto podem ser usadas para gerar conteúdo. Quando quiser usar suas peças personalizadas, você pode fazer o seguinte.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( {
apiKey ,
response_mime_type : "application/json" ,
} ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const parts = [ { text : "What is Google Apps Script?" } ] ;
const res = g . generateContent ( { parts } ) ;
console . log ( res ) ;
}
Quando quiser usar a chamada de função, você pode usar o script de exemplo a seguir.
function myFunction_functionCalling ( ) {
const apiKey = "###" ; // Please set your API key.
// Sample functions
const functions = {
params_ : {
getTanaike : {
description : "Get information about Tanaike. Value is a text." ,
} ,
} ,
getTanaike : (
_ // ref: https://tanaikech.github.io/about/
) =>
"As a Japanese scientist holding a Ph.D. in Physics, I am also a Google Developer Expert (GDE) in Google Workspace and a Google Cloud Champion Innovator. I am driven by a deep curiosity to explore, think creatively, and ultimately create new things. Specifically, I have a passion for crafting innovative solutions that are entirely novel, solutions that haven't yet been introduced to the world. It's in this spirit that I approach innovation. Interestingly, these new ideas often come to me during sleep, which I then strive to bring to life in the real world. Thankfully, some of these have already found practical applications." ,
} ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , functions } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is Tanaike? Return answer within 50 words." } ) ;
console . log ( res ) ;
}
Esta função de exemplo é deste post.
Quando quiser retornar os dados brutos da API Gemini, você também pode usar o script de exemplo a seguir.
function myFunction_generateContent1b ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , exportRawData : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res1 = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( JSON . stringify ( res1 ) ) ;
}
Usando exportRawData: true
, você pode recuperar os dados brutos da API Gemini da seguinte maneira.
[
{
"candidates" :[
{
"content" :{
"parts" :[
{
"text" : " Google Apps Script is ... "
}
],
"role" : " model "
},
"finishReason" : " STOP " ,
"index" : 0 ,
"safetyRatings" :[
{
"category" : " HARM_CATEGORY_SEXUALLY_EXPLICIT " ,
"probability" : " NEGLIGIBLE "
},
{
"category" : " HARM_CATEGORY_HATE_SPEECH " ,
"probability" : " NEGLIGIBLE "
},
{
"category" : " HARM_CATEGORY_HARASSMENT " ,
"probability" : " NEGLIGIBLE "
},
{
"category" : " HARM_CATEGORY_DANGEROUS_CONTENT " ,
"probability" : " NEGLIGIBLE "
}
]
}
],
"usageMetadata" :{
"promptTokenCount" : 7 ,
"candidatesTokenCount" : 459 ,
"totalTokenCount" : 466
}
}
]
console . log ( GeminiWithFiles . geminiWithFiles ( ) . functions ) ;
ou
console . log ( new GeminiWithFiles ( ) . functions ) ;
function myFunction_history ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
// Question 1
const res1 = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res1 ) ;
// Question 2
const res2 = g . generateContent ( { q : "What is my 1st question?" } ) ;
console . log ( res2 ) ;
console . log ( g . history ) ; // Here
}
function myFunction ( ) {
const history = [ , , , ] ; // Please set your history.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , history } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, history }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is my 1st question?" } ) ;
console . log ( res ) ;
}
Nesta explicação, quando este script é usado como uma biblioteca de scripts do Google Apps, para criar um construtor, é usado GeminiWithFiles.geminiWithFiles
. Quando esse script é usado copiando e colando-o diretamente em seu projeto do Google Apps Script, new GeminiWithFiles
é usado em vez de GeminiWithFiles.geminiWithFiles
. Por favor, tenha cuidado com isso.
Os scripts de amostra são os seguintes.
Este script gera conteúdo a partir de um texto.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res ) ;
}
const g = new GeminiWithFiles.geminiWithFiles({ apiKey });
.const g = new Gemini({ apiKey });
. Este script gera conteúdo com um chat.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
// Question 1
const res1 = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res1 ) ;
// Question 2
const res2 = g . generateContent ( { q : "What is my 1st question?" } ) ;
console . log ( res2 ) ;
}
Quando este script é executado, res1
e res2
são os seguintes.
res1
Google Apps Script is a rapid application development platform that makes it fast and easy to create business applications that integrate with Google Workspace.
res2
Your first question was "What is Google Apps Script?"
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
// Question 1
const q =
"Return the current population of Kyoto, Osaka, Aichi, Fukuoka, Tokyo in Japan as JSON data with the format that the key and values are the prefecture name and the population, respectively." ;
const res1 = g . generateContent ( { q } ) ;
console . log ( res1 ) ;
// Question 2
const res2 = g . generateContent ( {
q : "Also, return the current area of them as JSON data with the format that the key and values are the prefecture name and the area (km^2), respectively." ,
} ) ;
console . log ( res2 ) ;
}
Quando este script é executado, os seguintes valores podem ser vistos no log. Por doCountToken: true
, você pode ver o total de tokens.
{
"totalTokens": 40
}
res1
{
Kyoto: 1464956,
Fukuoka: 5135214,
Osaka: 8838716,
Tokyo: 14047594,
Aichi: 7552873
}
{
"totalTokens": 77
}
res2
{
Kyoto: 4612.71,
Tokyo: 2194.07,
Aichi: 5172.4,
Osaka: 1904.99,
Fukuoka: 4986.51
}
Neste caso, async/await é usado na função.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
let fileIds = [ ] ;
const files = DriveApp . getFolderById ( folderId ) . getFiles ( ) ;
while ( files . hasNext ( ) ) {
const file = files . next ( ) ;
fileIds . push ( file . getId ( ) ) ;
}
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setFileIds ( fileIds , false ) . uploadFiles ( ) ;
console . log ( res ) ;
}
Exceeded maximum execution time
. Por favor, tenha cuidado com isso. Neste exemplo, vários arquivos de imagem são carregados e as descrições são criadas a partir dos arquivos de imagem carregados. Este exemplo será a versão expandida do meu relatório anterior "Criando automaticamente descrições de arquivos no Google Drive usando API Gemini Pro com Google Apps Script".
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
const q = [
`Create each description from each image file within 100 words in the order of given fileData.` ,
`Return the results as an array` ,
`Return only raw Array without a markdown. No markdown format.` ,
`The required properties of each element in the array are as follows` ,
`` ,
`[Properties of each element in the array]` ,
`"name": "Name of file"` ,
`"description": "Created description"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw Array without a markdown. No markdown format. No markdown tags.` ,
] . join ( "n" ) ;
const fileIds = [ ] ;
const files = DriveApp . searchFiles (
`(mimeType = 'image/png' or mimeType = 'image/jpeg') and trashed = false and ' ${ folderId } ' in parents`
) ;
while ( files . hasNext ( ) ) {
fileIds . push ( files . next ( ) . getId ( ) ) ;
}
if ( fileIds . length == 0 ) return ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, doCountToken: true, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
Quando este script é executado, o seguinte resultado é obtido. Neste caso, o valor de name
é o ID do arquivo.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
Quando são utilizadas 20 imagens de amostra geradas pelo Gemini, o seguinte resultado é obtido.
Quando este script é executado, 20 imagens são carregadas e as descrições das 20 imagens carregadas podem ser obtidas por uma chamada de API.
Como ponto importante, no meu teste, quando a quantidade de arquivos de imagem é grande, foi necessário separar o script entre o upload do arquivo e a geração do conteúdo. Além disso, no caso de 50 arquivos de imagem, as descrições poderiam ser criadas corretamente. Mas, no caso de mais de 50 imagens, houve um caso em que ocorreu um erro. Portanto, ajuste o número de arquivos à sua situação.
Neste exemplo, várias faturas de arquivos PDF são carregadas e analisadas como um objeto. Este exemplo será a versão expandida do meu relatório anterior "Analisando faturas usando a API Gemini 1.5 com o Google Apps Script".
function myFunction_parseInvoices ( ) {
const apiKey = "###" ; // Please set your API key.
// Please set file IDs of PDF file of invoices on Google Drive.
const fileIds = [
"###fileID1###" ,
"###fileID2###" ,
,
,
,
] ;
const q = [
`Create an array including JSON object parsed the following images of the invoices.` ,
`The giving images are the invoices.` ,
`Return an array including JSON object.` ,
`No descriptions and explanations. Return only raw array including JSON objects without markdown. No markdown format.` ,
`The required properties in each JSON object in an array are as follows.` ,
`` ,
`[Properties in JSON object]` ,
`"name": "Name given as 'Filename'"` ,
`"invoiceTitle": "title of invoice"` ,
`"invoiceDate": "date of invoice"` ,
`"invoiceNumber": "number of the invoice"` ,
`"invoiceDestinationName": "Name of destination of invoice"` ,
`"invoiceDestinationAddress": "address of the destination of invoice"` ,
`"totalCost": "total cost of all costs"` ,
`"table": "Table of invoice. This is a 2-dimensional array. Add the first header row to the table in the 2-dimensional array."` ,
`` ,
`[Format of 2-dimensional array of "table"]` ,
`"title or description of item", "number of items", "unit cost", "total cost"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw array including JSON objects without markdown. No markdown format. No markcodn tags.` ,
] . join ( "n" ) ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
Como os papéis de amostra, quando os seguintes papéis são usados,
Este exemplo de fatura é dos modelos de design de fatura da Microsoft.
Este exemplo de fatura é dos modelos de design de fatura da Microsoft.
o resultado a seguir foi obtido por uma chamada de API. Verifica-se que as faturas carregadas com dados PDF podem ser analisadas corretamente.
[
{
"name" : " ###fileID1### " ,
"invoiceDate" : " 4/1/2024 " ,
"totalCost" : " $192.50 " ,
"invoiceNumber" : " 100 " ,
"invoiceDestinationAddress" : " The Palm Tree Nursery \ n987 6th Ave \ nSanta Fe, NM 11121 " ,
"invoiceTitle" : " Invoice " ,
"invoiceDestinationName" : " Maria Sullivan " ,
"table" : [
[
" Salesperson " ,
" Job " ,
" Sales " ,
" Description " ,
" Unit Price " ,
" Line Total "
],
[ " Sonu Jain " , " " , " 20.00 " , " Areca palm " , " $2.50 " , " $50.00 " ],
[ " " , " " , " 35.00 " , " Majesty palm " , " $3.00 " , " $105.00 " ],
[ " " , " " , " 15.00 " , " Bismarck palm " , " $2.50 " , " $37.50 " ]
]
},
{
"name" : " ###fileID2### " ,
"invoiceDate" : " 4/5, 2024 " ,
"invoiceTitle" : " INVOICE " ,
"invoiceDestinationAddress" : " Downtown Pets \ n132 South Street \ nManhattan, NY 15161 " ,
"totalCost" : " $4350 " ,
"table" : [
[ " DESCRIPTION " , " HOURS " , " RATE " , " AMOUNT " ],
[ " Pour cement foundation " , " 4.00 " , " $150.00 " , " $600 " ],
[ " Framing and drywall " , " 16.00 " , " $180.00 " , " $2880 " ],
[ " Tiling and flooring install " , " 9.00 " , " $150.00 " , " $1350 " ]
],
"invoiceDestinationName" : " Nazar Neill " ,
"invoiceNumber" : " 4/5 "
}
]
Neste exemplo, vários artigos com dados PDF são carregados e os textos resumidos de cada artigo são gerados.
function myFunction_parsePapers ( ) {
const apiKey = "###" ; // Please set your API key.
// Please set file IDs of the papers of PDF files.
const fileIds = [ "###fileID1###" , "###fileID2###" ] ;
const q = [
`Summary the following manuscripts within 500 words.` ,
`Return the results as an array` ,
`Return only raw Array without a markdown. No markdown format.` ,
`The required properties of each element in the array are as follows` ,
`` ,
`[Properties of each element in the array]` ,
`"name": "Name given as 'Filename'"` ,
`"title": "Title of manuscript` ,
`"summary": "Created description"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw Array without a markdown. No markdown format. No markdown tags.` ,
] . join ( "n" ) ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
Como os papéis de amostra, quando os seguintes papéis são usados,
o resultado a seguir foi obtido por uma chamada de API. Verifica-se que os documentos carregados convertidos de dados PDF em dados de imagem podem ser processados.
[
{
"name" : " ###fileID1### " ,
"title" : " The Particle Problem in the General Theory of Relativity " ,
"summary" : " This paper investigates the possibility of a singularity-free solution to the field equations in general relativity. The authors propose a new theoretical approach that eliminates singularities by introducing a new variable into the equations. They explore the implications of this approach for the understanding of particles, suggesting that particles can be represented as " bridges " connecting different sheets of spacetime. "
},
{
"name" : " ###fileID2### " ,
"title" : " Attention Is All You Need " ,
"summary" : " This paper proposes a novel neural network architecture called the Transformer, which relies entirely on an attention mechanism to draw global dependencies between input and output sequences. The Transformer model achieves state-of-the-art results on machine translation tasks and offers significant advantages in terms of parallelization and computational efficiency compared to recurrent neural networks. "
}
]
No estágio atual, apenas "application/json"
pode ser usado para response_mime_type
.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( {
apiKey ,
doCountToken : true ,
response_mime_type : "application/json" ,
} ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res1 = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res1 ) ;
}
Nesse caso, o resultado é retornado como um array conforme segue.
[
" Google Apps Script is a cloud-based scripting platform that lets you integrate with and automate tasks across Google products like Gmail, Calendar, Drive, and more. It's based on JavaScript and provides easy ways to automate tasks across Google products and third-party services. "
]
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( {
apiKey ,
doCountToken : true ,
response_mime_type : "application/json" ,
} ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
// Question 1
const jsonSchema1 = {
title : "Current population of Kyoto, Osaka, Aichi, Fukuoka, Tokyo in Japan" ,
description :
"Return the current population of Kyoto, Osaka, Aichi, Fukuoka, Tokyo in Japan" ,
type : "object" ,
properties : {
propertyNames : {
description : "Prefecture names" ,
} ,
patternProperties : {
"" : { type : "number" , description : "Population" } ,
} ,
} ,
} ;
const res1 = g . generateContent ( { jsonSchema : jsonSchema1 } ) ;
console . log ( res1 ) ;
// Question 2
const jsonSchema2 = {
title : "Current area of them" ,
description : "Return the current area of them." ,
type : "object" ,
properties : {
propertyNames : {
description : "Prefecture names" ,
} ,
patternProperties : {
"" : { type : "number" , description : "Area. Unit is km^2." } ,
} ,
} ,
} ;
const res2 = g . generateContent ( { jsonSchema : jsonSchema2 } ) ;
console . log ( res2 ) ;
}
Neste caso, os valores dos resultados podem ser obtidos fornecendo apenas o esquema JSON. O resultado é o seguinte.
Para a 1ª pergunta
{
"Kyoto" : 2579970 ,
"Osaka" : 8837684 ,
"Aichi" : 7552873 ,
"Fukuoka" : 5138217 ,
"Tokyo" : 14047594
}
Para a 2ª pergunta
{
"Kyoto" : 4612.19 ,
"Osaka" : 1904.99 ,
"Aichi" : 5172.92 ,
"Fukuoka" : 4986.51 ,
"Tokyo" : 2194.07
}
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
// Please set file IDs of PDF file of invoices.
const fileIds = [ "###fileID1###" , "###fileID2###" ] ;
const jsonSchema = {
title :
"Array including JSON object parsed the following images of the invoices" ,
description :
"Create an array including JSON object parsed the following images of the invoices." ,
type : "array" ,
items : {
type : "object" ,
properties : {
name : {
description : "Name given as 'Filename'" ,
type : "string" ,
} ,
invoiceTitle : {
description : "Title of invoice" ,
type : "string" ,
} ,
invoiceDate : {
description : "Date of invoice" ,
type : "string" ,
} ,
invoiceNumber : {
description : "Number of the invoice" ,
type : "string" ,
} ,
invoiceDestinationName : {
description : "Name of destination of invoice" ,
type : "string" ,
} ,
invoiceDestinationAddress : {
description : "Address of the destination of invoice" ,
type : "string" ,
} ,
totalCost : {
description : "Total cost of all costs" ,
type : "string" ,
} ,
table : {
description :
"Table of invoice. This is a 2-dimensional array. Add the first header row to the table in the 2-dimensional array. The column should be 'title or description of item', 'number of items', 'unit cost', 'total cost'" ,
type : "array" ,
} ,
} ,
required : [
"name" ,
"invoiceTitle" ,
"invoiceDate" ,
"invoiceNumber" ,
"invoiceDestinationName" ,
"invoiceDestinationAddress" ,
"totalCost" ,
"table" ,
] ,
additionalProperties : false ,
} ,
} ;
const g = GeminiWithFiles . geminiWithFiles ( {
apiKey ,
doCountToken : true ,
response_mime_type : "application/json" ,
} ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, doCountToken: true, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds , true ) . uploadFiles ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { jsonSchema } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( JSON . stringify ( res ) ) ;
}
Quando este script é executado nas mesmas faturas da seção "Carregar faturas de dados PDF e analisá-las", obtém-se o mesmo resultado.
Se você deseja retornar o valor de esquemas JSON de alta complexidade, response_mime_type
pode ser adequado.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const systemInstruction = { parts : [ { text : "You are a cat. Your name is Neko." } ] } ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , systemInstruction , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, systemInstruction, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res ) ;
}
Quando este script é executado, [ 'Meow? What is Google Apps Script? Is it something I can chase? ?' ]
é retornado. Você pode ver que o valor de systemInstruction
é refletido no conteúdo gerado.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const fileIds = [ "###" ] ; // Please set your movie file (MP4).
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ;
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q : "Describe this video." } ) ;
console . log ( res ) ;
}
Quando este script é executado, um arquivo de vídeo MP4 é carregado no Gemini e gera conteúdo com o arquivo de vídeo enviado.
Como ponto importante, no estágio atual, o tamanho máximo de upload com UrlFetchApp do Google Apps Script é de 50 MB. Ref Portanto, ao enviar o arquivo de vídeo, use um tamanho de arquivo inferior a 50 MB. Por favor, tenha cuidado com isso.
A partir da v1.0.7, quando doCountToken: true
e exportTotalTokens: true
são usados no objeto do argumento de geminiWithFiles
, o total de tokens é retornado. Nesse caso, o valor retornado é um objeto como {returnValue: "###", totalTokens: ###}
. O script de amostra é o seguinte.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , exportTotalTokens : true } ) ;
const res = g . generateContent ( { q : "What is Gemini?" } ) ;
console . log ( res ) ;
}
Quando este script é executado, o seguinte resultado é retornado.
{
"returnValue" : " " Gemini " can refer to several things, so please provide me with more context. For example, are you asking about: nn * **Gemini (constellation):** A constellation in the Northern Hemisphere, known for its distinctive twin stars, Castor and Pollux. n * **Gemini (astrological sign):** The third sign of the Zodiac, associated with those born between May 21st and June 20th. n * **Gemini (programming language):** A procedural programming language created by Niklaus Wirth, known for its simplicity and emphasis on structured programming. n * **Gemini (Google AI model):** A large language model developed by Google, known for its advanced conversational abilities and ability to generate different creative text formats. n * **Gemini (NASA mission):** A crewed spaceflight mission to the Moon, planned for 2024. nn Once you tell me what kind of Gemini you're interested in, I can give you a more specific answer! " ,
"usageMetadata" :{
"promptTokenCount" : 5 ,
"candidatesTokenCount" : 200 ,
"totalTokenCount" : 205
}
}
A partir da v2.xx, isso pode ser alcançado. Isto é da Ref e Ref.
O script de exemplo pode ser visto aqui.
Este prompt é deste documento oficial.
Para usar codeExecution, use tools: [{ codeExecution: {} }]
e exportRawData: true
no método geminiWithFiles
da seguinte maneira.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , tools : [ { codeExecution : { } } ] , exportRawData : true } ) ;
// const g = new GeminiWithFiles({ apiKey, tools: [{ codeExecution: {} }], exportRawData: true }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : 'What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50.' } ) ;
console . log ( res . candidates [ 0 ] . content . parts ) ;
}
Quando este script é executado, o seguinte resultado é obtido.
[
{
"text" : " I will generate Python code to calculate the sum of the first 50 prime numbers. nn "
},
{
"executableCode" :{
"language" : " PYTHON " ,
"code" : " n def is_prime(num): n """n Checks if a number is prime. n """n if num <= 1: n return False n for i in range(2, int(num**0.5) + 1): n if num % i == 0: n return False n return True nn primes = [] n n = 2 n while len(primes) < 50: n if is_prime(n): n primes.append(n) n n += 1 nn print(f \ 'The first 50 prime numbers are: {primes} \ ') n print(f \ 'The sum of the first 50 prime numbers is: {sum(primes)} \ ') n "
}
},
{
"codeExecutionResult" :{
"outcome" : " OUTCOME_OK " ,
"output" : " The first 50 prime numbers are: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229] n The sum of the first 50 prime numbers is: 5117 n "
}
},
{
"text" : " The code first defines a function `is_prime(num)` to check if a number is prime. The function iterates through all numbers from 2 to the square root of the given number. If any of these numbers divide the given number, then the number is not prime. Otherwise, the number is prime. nn Then, the code initializes an empty list called `primes` to store the prime numbers. It also initializes a variable `n` to 2, which is the first prime number. nn The code then enters a `while` loop that continues until 50 prime numbers are found. Inside the loop, the code checks if the current number `n` is prime using the `is_prime` function. If it is, the number is appended to the `primes` list. nn After the loop, the code prints the list of prime numbers and the sum of the prime numbers. nn The output shows that the sum of the first 50 prime numbers is 5117. "
}
]
image/png,image/jpeg,image/webp,image/heic,image/heif
audio/wav,audio/mp3,audio/aiff,audio/aac,audio/ogg,audio/flac
Exceeded maximum execution time
. Por favor, tenha cuidado com isso.Já propus as seguintes solicitações futuras ao rastreador de problemas do Google. Referência
Acho que seria ainda mais benéfico para os usuários do Gemini se os arquivos no Google Drive pudessem ser usados diretamente pela API do Gemini usando apenas seus IDs de arquivo. Isso também reduziria significativamente o custo de upload de dados.
Acredito que a capacidade de incluir metadados personalizados nos arquivos enviados seria muito útil para gerenciar um grande número de arquivos.
Quando testei a função que chama para controlar o formato de saída, às vezes recebia um erro do código de status 500. Mas, quando testei response_mime_type
, esse erro raramente ocorria. Não tenho certeza se esta é a especificação atual.
A imagem abstrata superior foi criada por Gemini na seção "Descrição".
MIT
Tanaike
Doar
v1.0.0 (26 de abril de 2024)
v1.0.1 (2 de maio de 2024)
response_mime_type
deve poder ser usado para controlar o formato de saída. Referênciav1.0.2 (7 de maio de 2024)
parts
. Nesta versão, você pode selecionar um entre q
, jsonSchema
e parts
.systemInstruction
pode ser usado.toolConfig
foi adicionado ao corpo da solicitação.v1.0.3 (17 de maio de 2024)
v1.0.4 (29 de maio de 2024)
model.countToken
é usado com os arquivos carregados, confirmei que um erro como You do not have permission to access the File ### or it may not exist.
ocorreu. Para lidar com esse problema, modifiquei a biblioteca.v1.0.5 (7 de junho de 2024)
v1.0.6 (15 de junho de 2024)
v1.0.7 (4 de julho de 2024)
doCountToken: true
e exportTotalTokens: true
são usados no objeto do argumento de geminiWithFiles
, o total de tokens é retornado. Nesse caso, o valor retornado é um objeto como {returnValue: "###", totalTokens: ###}
.v2.0.0 (3 de agosto de 2024)
functions: {}
são usadas. Portanto, a chamada de função padrão foi removida. Porque no estágio atual, a saída JSON pode ser facilmente retornada usando um esquema JSON e response_mime_type
. Ref Ref.models/gemini-1.5-pro-latest
para models/gemini-1.5-flash-latest
.exportTotalTokens
foram alterados. Após a v2.xx, quando isso for verdade, o objeto usageMetadata
incluindo promptTokenCount
, candidatesTokenCount
, totalTokenCount
será exportado. Nesse momento, o conteúdo gerado e usageMetadata
são retornados como um objeto.v2.0.1 (4 de agosto de 2024)
codeExecution
pode ser usado. Referênciav2.0.2 (26 de setembro de 2024)
generationConfig
, foram adicionadas as propriedades response_schema
e temperature
.v2.0.3 (19 de novembro de 2024)
setFileIdsOrUrlsWithResumableUpload
. A partir da versão 2.0.3, ao usar este método, inclua propertiesService: PropertiesService.getScriptProperties()
no objeto inicial da seguinte maneira. Porque, quando PropertiesService.getScriptProperties()
é usado na biblioteca, os valores são colocados na biblioteca. Quando criei Ref e Ref, supus que o script fosse usado copiando e colando em vez da biblioteca. Então, incluí PropertiesService.getScriptProperties()
no script. Mas notei que quando isso é usado com GeminiWithFiles, cada usuário é obrigado a usar PropertiesService.getScriptProperties()
. Então, eu modifiquei isso.resumableUploadAsNewUpload: true
. Ref Com isso, a propriedade é limpa e o upload é executado.PRINCIPAL