La API Gemini sigue creciendo. El 5 de agosto de 2024, actualicé en gran medida GeminiWithFiles a v2.xx. Con esta gran actualización, la versión cambia de v1 a v2.
Si desea utilizar GeminiWithFiles v1.xx, consulte aquí.
Esta es una biblioteca de Google Apps Script para la API de Gemini con archivos.
Una nueva biblioteca de Google Apps Script llamada GeminiWithFiles simplifica el uso de Gemini, un modelo de lenguaje grande, para procesar datos no estructurados como imágenes y archivos PDF. GeminiWithFiles puede cargar archivos, generar contenido y crear descripciones a partir de varias imágenes a la vez. Esto reduce significativamente la carga de trabajo y amplía las posibilidades de utilizar Gemini.
Recientemente, Gemini, un gran modelo de lenguaje de Google AI, ha brindado nuevas posibilidades a diversas tareas al permitir el uso de datos no estructurados como datos estructurados. Esto es particularmente significativo porque existe una gran cantidad de información en formatos no estructurados como documentos de texto, imágenes y videos.
La API Gemini 1.5, lanzada recientemente, amplía significativamente estas capacidades. Puede generar contenido de hasta 1 millón de tokens, un aumento sustancial en comparación con versiones anteriores. Además, Gemini 1.5 ahora puede procesar hasta 3000 archivos de imágenes, superando ampliamente el límite de 16 imágenes de Gemini 1.0. Árbitro
Si bien Gemini no puede trabajar directamente con formatos de Google Drive como Docs, Sheets y Slides, existen soluciones. En la etapa actual, los datos PDF se pueden procesar directamente con la API de Gemini. Con esto, esos archivos de Google Docs se convierten a PDF y se usan con la API de Gemini. Árbitro
Este informe presenta una nueva biblioteca de Google Apps Script llamada "GeminiWithFiles" que simplifica este proceso. GeminiWithFiles permite a los usuarios cargar archivos y generar contenido fácilmente utilizando las poderosas capacidades de Gemini. También permite la creación eficiente de descripciones a partir de múltiples imágenes con una sola llamada API, lo que reduce significativamente la carga de trabajo en comparación con el procesamiento de cada imagen individualmente, como se demostró en mi informe anterior. Árbitro
Al optimizar el proceso y ampliar las capacidades, GeminiWithFiles es prometedor para varios casos de uso en diferentes dominios. Este informe sirve como un enfoque ampliado del anterior, con el objetivo de reducir aún más los costos de proceso y mejorar la eficiencia al trabajar con Gemini y datos no estructurados.
Creé esta biblioteca en base a los siguientes informes.
Esta biblioteca GeminiWithFiles le permite interactuar con Gemini, una potente plataforma de gestión y procesamiento de documentos, a través de una API fácil de usar. Esto es lo que puede lograr con esta biblioteca:
Gestión de archivos:
Carga de contenido:
Gestión del historial de chat:
Generación de contenido:
Especificación de salida:
Especifique el formato de salida deseado para los resultados generados por la API de Gemini.
Utilizando response_mime_type
y el esquema JSON, se controla el formato de salida. Árbitro
Para probar este script, siga los siguientes pasos.
Acceda a https://makersuite.google.com/app/apikey y cree su clave API. En ese momento, habilite la API de lenguaje generativo en la consola API. Esta clave API se utiliza para este script de muestra.
Este documento oficial también se puede ver. Árbitro.
Cree un proyecto independiente de Google Apps Script. Por supuesto, este script también se puede utilizar con el script vinculado al contenedor.
Y abra el editor de secuencias de comandos del proyecto Google Apps Script.
Hay 2 patrones para usar GeminiWithFiles.
Si utiliza esta biblioteca como biblioteca de Google Apps Script, instálela en su proyecto de Google Apps Script de la siguiente manera.
Cree un proyecto de Google Apps Script. O abra su proyecto de Google Apps Script.
Instale esta biblioteca.
1dolXnIeXKz-BH1BlwRDaKhzC2smJcGyVxMxGYhaY2kqiLa857odLXrIC
Si utiliza esta biblioteca en su propio proyecto de Google Apps Script, copie y pegue el script "classGeminiWithFiles.js" en su proyecto de Google Apps Script. De esta manera, se puede utilizar el script.
"main.js" se utiliza para la biblioteca de Google Apps Script. Entonces, en este patrón, no es necesario que lo utilices.
Esta biblioteca utiliza los siguientes 2 ámbitos.
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/drive
Si desea utilizar el token de acceso, vincule el proyecto Google Cloud Platform al proyecto Google Apps Script. Y agregue el siguiente alcance.
https://www.googleapis.com/auth/generative-language
Además, puede ver el documento oficial de la API de Gemini en https://ai.google.dev/api/rest.
Métodos | Descripción |
---|---|
setFileIds(fileIds, asImage = false) | Establecer ID de archivos. |
establecerBlobs(blobs) | Establecer manchas. |
withUploadedFilesByGenerateContent(listadearchivos = []) | Cree un objeto para usar el método generateContent. |
cargar archivos (n = 50) | Sube archivos a Gemini. |
obtener lista de archivos() | Obtener lista de archivos en Gemini. |
eliminar archivos (nombres, n = 50) | Eliminar archivos de Gemini. |
generar contenido (objeto) | Método principal. Generar contenido mediante API Gemini. |
setFileIdsOrUrlsWithResumableUpload(objeto) | Se pueden cargar archivos de más de 50 MB en Gemini. |
Cuando instale GeminiWithFiles como biblioteca para su proyecto de Google Apps Script, utilice el siguiente script.
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
o
Cuando copie y pegue directamente el script de Class GeminiWithFiles en su proyecto de Google Apps Script, utilice el siguiente script.
const g = new GeminiWithFiles ( object ) ;
El valor del object
es el siguiente.
{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.
Cuando desee utilizar response_mime_type
, proporcione jsonSchema
para generar el método Content. En la etapa actual, solo se puede usar "application/json"
para response_mime_type
.
Cuando desee utilizar systemInstruction
, confirme el documento oficial Ref.
Gemini 1.5 Flash Latest ( models/gemini-1.5-flash-latest
) se utiliza como modelo predeterminado. Cuando desee utilizar Gemini 1.5 Pro Latest ( models/gemini-1.5-pro-latest
), utilícelo como const g = GeminiWithFiles.geminiWithFiles({ apiKey, model: "models/gemini-1.5-pro-latest" })
.
En la etapa actual, cuando se usa response_schema
, se usa automáticamente response_mime_type: "application/json"
.
Establecer ID de archivos. Los archivos de ID de archivo se cargan en Gemini.
En este caso, se utiliza async/await en la función.
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
son String[] (los ID de archivo en Google Drive) y el booleano, respectivamente. Si el segundo argumento es falso, los archivos ingresados con ID de archivo se cargan como datos sin procesar. Si el segundo argumento es verdadero, los archivos ingresados con ID de archivo se convierten en datos de imagen y se cargan. El valor predeterminado del segundo argumento es falso.false
en este método como setFileIds(fileIds, false)
. Establecer manchas. Los blobs se cargan en 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
es Blob[].Cree un objeto para usar el 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
tiene un solo argumento. Ese es el valor del método getFileList. Puede ver los valores reales después de cargar los archivos.Sube archivos a Gemini. Los archivos se cargan en Gemini utilizando los ID de archivo o blobs ingresados.
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 ) ;
}
En este script, los archivos de fileIds
se cargan en Gemini con los datos sin procesar. Si setFileIds(fileIds, false)
se modifica a setFileIds(fileIds, true)
, los archivos se cargan en Gemini como imágenes.
Cuando usa Blob directamente, puede usar el siguiente script.
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 ) ;
}
Obtener lista de archivos en 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 ) ;
}
Eliminar archivos de 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. Generar contenido mediante API Gemini. Se pueden ver más scripts de muestra en la siguiente sección "Scripts de muestra".
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 ) ;
}
En este script, el contenido se genera con la llamada a la función.
Cuando desee utilizar response_mime_type
, proporcione jsonSchema
para generar el método Content de la siguiente manera. En este caso, al proporcionar solo el esquema JSON, esta biblioteca puede devolver un objeto válido. También puedes ver la información detallada sobre response_mime_type
en mi informe.
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 ) ;
}
Cuando se ejecuta este script, se obtiene el siguiente resultado.
[
{ "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 puede cargar archivos de más de 50 MB.
A partir de v2.xx, esto se puede lograr. Esto es de Ref y Ref.
A partir de v2.0.3, cuando utilice este método, incluya propertiesService: PropertiesService.getScriptProperties()
en el objeto inicial de la siguiente manera. Porque, cuando se usa PropertiesService.getScriptProperties()
en la biblioteca, los valores se colocan en la biblioteca. Cuando creé Ref y Ref, supuse que el script se usa copiando y pegando en lugar de la biblioteca. Entonces, incluí PropertiesService.getScriptProperties()
en el script. Pero noté que cuando esto se usa con GeminiWithFiles, cada usuario debe usar PropertiesService.getScriptProperties()
. Entonces, modifiqué esto.
El script de muestra es el siguiente.
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 ) ;
}
Cuando se ejecuta este script, se puede ver el siguiente registro en el registro.
- 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.
Si su archivo es grande y el estado del archivo cargado aún no es "ACTIVO", pruebe el siguiente script.
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".
}
Con esto, se puede cargar el archivo. Y puede usar el archivo cargado después de que espere el tiempo suficiente para cambiar el estado a "ACTIVO". El archivo cargado se puede utilizar de la siguiente manera.
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 opción adicional, cuando desee cargar los datos con la carga reanudable como una carga nueva, configure resumableUploadAsNewUpload: true
de la siguiente manera. Con esto, la propiedad se borra y se ejecuta la carga.
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 ) ;
}
Cuando se usa q
, solo se puede usar pregunta de texto para generar contenido. Cuando desee utilizar sus piezas personalizadas, puede hacerlo de la siguiente manera.
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 ) ;
}
Cuando desee utilizar la llamada de función, puede utilizar el siguiente script de muestra.
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 función de muestra es de esta publicación.
Cuando desee devolver los datos sin procesar de la API de Gemini, también puede utilizar el siguiente script de muestra.
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 ) ) ;
}
Al utilizar exportRawData: true
, puede recuperar los datos sin procesar de la API de Gemini de la siguiente manera.
[
{
"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 ) ;
o
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 ) ;
}
En esta explicación, cuando este script se usa como biblioteca de Google Apps Script, para crear un constructor, se usa GeminiWithFiles.geminiWithFiles
. Cuando se usa este script copiándolo y pegándolo directamente en su proyecto de Google Apps Script, se usa new GeminiWithFiles
en lugar de GeminiWithFiles.geminiWithFiles
. Por favor tenga cuidado con esto.
Los scripts de muestra son los siguientes.
Este script genera contenido a partir de un 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 genera contenido con un 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 ) ;
}
Cuando se ejecuta este script, res1
y res2
son los siguientes.
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 ) ;
}
Cuando se ejecuta este script, se pueden ver los siguientes valores en el registro. Por doCountToken: true
, puedes ver el 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
}
En este caso, se utiliza async/await en la función.
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 tenga cuidado con esto. En este ejemplo, se cargan varios archivos de imagen y las descripciones se crean a partir de los archivos de imagen cargados. Este ejemplo será la versión ampliada de mi informe anterior "Creación automática de descripciones de archivos en Google Drive utilizando la API Gemini Pro con 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 ) ;
}
Cuando se ejecuta este script, se obtiene el siguiente resultado. En este caso, el valor del name
es el ID del archivo.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
Cuando se utilizan 20 imágenes de muestra generadas por Gemini, se obtiene el siguiente resultado.
Cuando se ejecuta este script, se cargan 20 imágenes y las descripciones de las 20 imágenes cargadas se pueden obtener mediante una llamada API.
Como punto importante, en mi prueba, cuando la cantidad de archivos de imagen es grande, fue necesario separar el script entre la carga del archivo y la generación del contenido. Además, en el caso de 50 archivos de imágenes, las descripciones podrían crearse correctamente. Pero, en el caso de más de 50 imágenes, se dio el caso de que se produjera un error. Por lo tanto, ajuste la cantidad de archivos a su situación.
En este ejemplo, se cargan varias facturas de archivos PDF y se analizan como un objeto. Este ejemplo será la versión ampliada de mi informe anterior "Análisis de facturas utilizando la API Gemini 1.5 con 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 documentos de muestra, cuando se utilizan los siguientes papeles,
Esta factura de muestra proviene de plantillas de diseño de facturas de Microsoft.
Esta factura de muestra proviene de plantillas de diseño de facturas de Microsoft.
El siguiente resultado se obtuvo mediante una llamada API. Se descubre que las facturas cargadas de datos PDF se pueden analizar correctamente.
[
{
"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 "
}
]
En este ejemplo, se cargan varios artículos con datos PDF y se generan los textos resumidos de cada artículo.
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 documentos de muestra, cuando se utilizan los siguientes papeles,
El siguiente resultado se obtuvo mediante una llamada API. Se descubre que los documentos cargados convertidos de datos PDF a datos de imagen se pueden procesar.
[
{
"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. "
}
]
En la etapa actual, solo se puede usar "application/json"
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 ) ;
}
En este caso, el resultado se devuelve como una matriz de la siguiente manera.
[
" 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 ) ;
}
En este caso, los valores de los resultados se pueden obtener proporcionando únicamente el esquema JSON. El resultado es el siguiente.
Para la primera pregunta
{
"Kyoto" : 2579970 ,
"Osaka" : 8837684 ,
"Aichi" : 7552873 ,
"Fukuoka" : 5138217 ,
"Tokyo" : 14047594
}
Para la segunda pregunta
{
"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 ) ) ;
}
Cuando se ejecuta este script en las mismas facturas de la sección "Cargar facturas con datos PDF y analizarlas", se obtiene el mismo resultado.
Si desea devolver el valor de esquemas JSON de alta complejidad, response_mime_type
podría ser adecuado.
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 ) ;
}
Cuando se ejecuta este script, [ 'Meow? What is Google Apps Script? Is it something I can chase? ?' ]
se devuelve. Puede ver que el valor de systemInstruction
se refleja en el contenido generado.
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 ) ;
}
Cuando se ejecuta este script, se carga un archivo de video MP4 en Gemini y se genera contenido con el archivo de video cargado.
Como punto importante, en la etapa actual, el tamaño máximo de carga con UrlFetchApp de Google Apps Script es de 50 MB. Ref. Entonces, cuando cargue el archivo de video, utilice un tamaño de archivo inferior a 50 MB. Por favor tenga cuidado con esto.
Desde v1.0.7, cuando doCountToken: true
y exportTotalTokens: true
se utilizan en el objeto del argumento de geminiWithFiles
, se devuelven los tokens totales. En este caso, el valor devuelto es un objeto como {returnValue: "###", totalTokens: ###}
. El script de muestra es el siguiente.
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 ) ;
}
Cuando se ejecuta este script, se devuelve el siguiente resultado.
{
"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 de v2.xx, esto se puede lograr. Esto es de Ref y Ref.
El script de muestra se puede ver aquí.
Este mensaje proviene de este documento oficial.
Para utilizar codeExecution, utilice tools: [{ codeExecution: {} }]
y exportRawData: true
en el método geminiWithFiles
de la siguiente manera.
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 ) ;
}
Cuando se ejecuta este script, se obtiene el siguiente resultado.
[
{
"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 tenga cuidado con esto.Ya propuse las siguientes solicitudes futuras al rastreador de problemas de Google. Árbitro
Creo que sería aún más beneficioso para los usuarios de Gemini si la API de Gemini pudiera utilizar directamente los archivos de Google Drive utilizando solo sus ID de archivo. Esto también reduciría significativamente el costo de cargar datos.
Creo que la capacidad de incluir metadatos personalizados con los archivos cargados sería muy útil para administrar una gran cantidad de archivos.
Cuando probé la función que pedía controlar el formato de salida, a veces recibía un error del código de estado 500. Pero, cuando probé response_mime_type
, ese error rara vez ocurría. No estoy seguro de si esta es la especificación actual.
La imagen abstracta superior fue creada por Gemini en la sección "Descripción".
MIT
Tanaike
Donar
v1.0.0 (26 de abril de 2024)
v1.0.1 (2 de mayo de 2024)
response_mime_type
debe poder usarse para controlar el formato de salida. Árbitrov1.0.2 (7 de mayo de 2024)
parts
. Desde esta versión, puede seleccionar uno de q
, jsonSchema
y parts
.systemInstruction
.toolConfig
al cuerpo de la solicitud.v1.0.3 (17 de mayo de 2024)
v1.0.4 (29 de mayo de 2024)
model.countToken
con los archivos cargados, confirmé que aparece un error como You do not have permission to access the File ### or it may not exist.
ocurrió. Para solucionar este problema, modifiqué la biblioteca.v1.0.5 (7 de junio de 2024)
v1.0.6 (15 de junio de 2024)
v1.0.7 (4 de julio de 2024)
doCountToken: true
y exportTotalTokens: true
en el objeto del argumento de geminiWithFiles
, se devuelven los tokens totales. En este caso, el valor devuelto es un objeto como {returnValue: "###", totalTokens: ###}
.v2.0.0 (3 de agosto de 2024)
functions: {}
. Entonces, se eliminó la llamada a la función predeterminada. Porque en la etapa actual, la salida JSON se puede devolver fácilmente usando un esquema JSON y response_mime_type
. Ref. Ref.models/gemini-1.5-pro-latest
a models/gemini-1.5-flash-latest
.exportTotalTokens
. Después de v2.xx, cuando esto es cierto, se exporta el objeto usageMetadata
, incluidos promptTokenCount
, candidatesTokenCount
y totalTokenCount
. En ese momento, el contenido generado y usageMetadata
se devuelven como un objeto.v2.0.1 (4 de agosto de 2024)
codeExecution
. Árbitrov2.0.2 (26 de septiembre de 2024)
generationConfig
, se agregaron las propiedades response_schema
y temperature
.v2.0.3 (19 de noviembre de 2024)
setFileIdsOrUrlsWithResumableUpload
. A partir de v2.0.3, cuando utilice este método, incluya propertiesService: PropertiesService.getScriptProperties()
en el objeto inicial de la siguiente manera. Porque, cuando se usa PropertiesService.getScriptProperties()
en la biblioteca, los valores se colocan en la biblioteca. Cuando creé Ref y Ref, supuse que el script se usa copiando y pegando en lugar de la biblioteca. Entonces, incluí PropertiesService.getScriptProperties()
en el script. Pero noté que cuando esto se usa con GeminiWithFiles, cada usuario debe usar PropertiesService.getScriptProperties()
. Entonces, modifiqué esto.resumableUploadAsNewUpload: true
. Ref. Con esto, la propiedad se borra y se ejecuta la carga.ARRIBA