L'API Gemini continue de croître. Le 5 août 2024, j'ai largement mis à jour GeminiWithFiles vers la v2.xx. Avec cette grosse mise à jour, la version passe de la v1 à la v2.
Si vous souhaitez utiliser GeminiWithFiles v1.xx, veuillez voir ici.
Il s'agit d'une bibliothèque Google Apps Script pour l'API Gemini avec des fichiers.
Une nouvelle bibliothèque Google Apps Script appelée GeminiWithFiles simplifie l'utilisation de Gemini, un grand modèle de langage, pour traiter des données non structurées telles que des images et des PDF. GeminiWithFiles peut télécharger des fichiers, générer du contenu et créer des descriptions à partir de plusieurs images à la fois. Cela réduit considérablement la charge de travail et élargit les possibilités d'utilisation de Gemini.
Récemment, Gemini, un grand modèle de langage de Google AI, a apporté de nouvelles possibilités à diverses tâches en permettant l'utilisation de données non structurées comme données structurées. Ceci est particulièrement important car une grande quantité d’informations existe dans des formats non structurés tels que des documents texte, des images et des vidéos.
L'API Gemini 1.5, publiée récemment, étend considérablement ces capacités. Il peut générer du contenu jusqu'à 1 million de jetons, une augmentation substantielle par rapport aux versions précédentes. De plus, Gemini 1.5 peut désormais traiter jusqu'à 3 000 fichiers d'images, dépassant largement la limite de 16 images de Gemini 1.0. Réf
Bien que Gemini ne puisse pas fonctionner directement avec les formats Google Drive tels que Docs, Sheets et Slides, il existe des solutions de contournement. Au stade actuel, les données PDF peuvent être directement traitées avec l'API Gemini. Grâce à cela, ces fichiers Google Docs sont convertis en PDF et utilisés avec l'API Gemini. Réf
Ce rapport présente une nouvelle bibliothèque Google Apps Script appelée « GeminiWithFiles » qui simplifie ce processus. GeminiWithFiles permet aux utilisateurs de télécharger facilement des fichiers et de générer du contenu à l'aide des puissantes capacités de Gemini. Il permet également de créer efficacement des descriptions à partir de plusieurs images avec un seul appel API, ce qui réduit considérablement la charge de travail par rapport au traitement de chaque image individuellement, comme démontré dans mon rapport précédent. Réf
En rationalisant le processus et en élargissant les capacités, GeminiWithFiles est prometteur pour divers cas d'utilisation dans différents domaines. Ce rapport constitue une approche étendue au précédent, visant à réduire davantage les coûts de processus et à améliorer l'efficacité lorsque l'on travaille avec Gemini et des données non structurées.
J'ai créé cette bibliothèque sur la base des rapports suivants.
Cette bibliothèque GeminiWithFiles vous permet d'interagir avec Gemini, une puissante plateforme de traitement et de gestion de documents, via une API facile à utiliser. Voici ce que vous pouvez réaliser avec cette bibliothèque :
Gestion des fichiers :
Téléchargement de contenu :
Gestion de l'historique des discussions :
Génération de contenu :
Spécification de sortie :
Spécifiez le format de sortie souhaité pour les résultats générés par l'API Gemini.
À l'aide response_mime_type
et du schéma JSON, le format de sortie est contrôlé. Réf
Afin de tester ce script, veuillez suivre les étapes suivantes.
Veuillez accéder à https://makersuite.google.com/app/apikey et créer votre clé API. À ce moment-là, veuillez activer l’API Generative Language sur la console API. Cette clé API est utilisée pour cet exemple de script.
Ce document officiel est également visible. Réf.
Veuillez créer un projet Google Apps Script autonome. Bien entendu, ce script peut également être utilisé avec le script lié au conteneur.
Et veuillez ouvrir l'éditeur de script du projet Google Apps Script.
Il existe 2 modèles d'utilisation de GeminiWithFiles.
Si vous utilisez cette bibliothèque comme bibliothèque Google Apps Script, veuillez l'installer dans votre projet Google Apps Script comme suit.
Créez un projet Google Apps Script. Ou ouvrez votre projet Google Apps Script.
Installez cette bibliothèque.
1dolXnIeXKz-BH1BlwRDaKhzC2smJcGyVxMxGYhaY2kqiLa857odLXrIC
Si vous utilisez cette bibliothèque dans votre propre projet Google Apps Script, veuillez copier et coller le script « classGeminiWithFiles.js » dans votre projet Google Apps Script. Grâce à cela, le script peut être utilisé.
"main.js" est utilisé pour la bibliothèque Google Apps Script. Ainsi, dans ce modèle, vous n’êtes pas obligé de l’utiliser.
Cette bibliothèque utilise les 2 étendues suivantes.
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/drive
Si vous souhaitez utiliser le jeton d'accès, veuillez lier le projet Google Cloud Platform au projet Google Apps Script. Et veuillez ajouter la portée suivante.
https://www.googleapis.com/auth/generative-language
Vous pouvez également consulter le document officiel de l'API Gemini sur https://ai.google.dev/api/rest.
Méthodes | Description |
---|---|
setFileIds (fileIds, asImage = false) | Définissez les ID de fichiers. |
setBlobs(blobs) | Définir des blobs. |
avecUploadedFilesByGenerateContent(fileList = []) | Créez un objet pour utiliser la méthode generateContent. |
télécharger des fichiers (n = 50) | Téléchargez des fichiers sur Gemini. |
getFileList() | Obtenez la liste des fichiers dans Gemini. |
deleteFiles (noms, n = 50) | Supprimez des fichiers de Gemini. |
générerContent (objet) | Méthode principale. Générez du contenu par l'API Gemini. |
setFileIdsOrUrlsWithResumableUpload (objet) | Les fichiers de plus de 50 Mo peuvent être téléchargés sur Gemini. |
Lorsque vous installez GeminiWithFiles en tant que bibliothèque dans votre projet Google Apps Script, veuillez utiliser le script suivant.
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
ou
Lorsque vous copiez et collez directement le script de la classe GeminiWithFiles dans votre projet Google Apps Script, veuillez utiliser le script suivant.
const g = new GeminiWithFiles ( object ) ;
La valeur de object
est la suivante.
{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.
Lorsque vous souhaitez utiliser response_mime_type
, veuillez donner à jsonSchema
la méthode generateContent. Au stade actuel, seul "application/json"
peut être utilisé pour response_mime_type
.
Lorsque vous souhaitez utiliser systemInstruction
, veuillez confirmer le document officiel Ref.
Gemini 1.5 Flash Latest ( models/gemini-1.5-flash-latest
) est utilisé comme modèle par défaut. Lorsque vous souhaitez utiliser Gemini 1.5 Pro Latest ( models/gemini-1.5-pro-latest
), veuillez l'utiliser comme const g = GeminiWithFiles.geminiWithFiles({ apiKey, model: "models/gemini-1.5-pro-latest" })
.
Dans l'étape actuelle, lorsque response_schema
est utilisé, response_mime_type: "application/json"
est automatiquement utilisé.
Définissez les ID de fichiers. Les fichiers d'ID de fichier sont téléchargés sur Gemini.
Dans ce cas, async/await est utilisé dans la fonction.
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
sont respectivement String[] (les ID de fichier sur Google Drive) et le booléen. Si le 2ème argument est faux, les fichiers d'ID de fichier saisis sont téléchargés en tant que données brutes. Si le deuxième argument est vrai, les fichiers d'ID de fichier saisis sont convertis en données d'image et sont téléchargés. La valeur par défaut du 2ème argument est fausse.false
avec cette méthode comme setFileIds(fileIds, false)
. Définir des blobs. Les blobs sont téléchargés sur 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
est Blob[].Créez un objet pour utiliser la méthode 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
n'a qu'un seul argument. C'est la valeur de la méthode getFileList. Vous pouvez voir les valeurs réelles après avoir téléchargé les fichiers.Téléchargez des fichiers sur Gemini. Les fichiers sont téléchargés sur Gemini à l'aide des ID de fichier ou des blobs saisis.
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 ) ;
}
Dans ce script, les fichiers de fileIds
sont téléchargés sur Gemini avec les données brutes. Si setFileIds(fileIds, false)
est modifié en setFileIds(fileIds, true)
, les fichiers sont téléchargés sur Gemini sous forme d'images.
Lorsque vous utilisez directement Blob, vous pouvez utiliser le script suivant.
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 ) ;
}
Obtenez la liste des fichiers dans 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 ) ;
}
Supprimez des fichiers 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éthode principale. Générez du contenu par l'API Gemini. D’autres exemples de scripts peuvent être consultés dans la section « Exemples de scripts » suivante.
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 ) ;
}
Dans ce script, le contenu est généré avec l'appel de fonction.
Lorsque vous souhaitez utiliser response_mime_type
, veuillez donner à jsonSchema
la méthode generateContent comme suit. Dans ce cas, en donnant uniquement le schéma JSON, cette bibliothèque peut renvoyer un objet valide. Vous pouvez également voir les informations détaillées sur response_mime_type
dans mon rapport.
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 ) ;
}
Lorsque ce script est exécuté, le résultat suivant est obtenu.
[
{ "recipe_name" : " Chocolate Chip Cookies " },
{ "recipe_name" : " Peanut Butter Cookies " },
{ "recipe_name" : " Oatmeal Cookies " },
{ "recipe_name" : " Sugar Cookies " },
{ "recipe_name" : " Snickerdoodle Cookies " }
]
Cette méthode peut télécharger des fichiers de plus de 50 Mo.
À partir de la v2.xx, cela peut être réalisé. Ceci provient de Réf et Réf.
À partir de la version 2.0.3, lorsque vous utilisez cette méthode, veuillez inclure propertiesService: PropertiesService.getScriptProperties()
dans l'objet initial comme suit. Parce que, lorsque PropertiesService.getScriptProperties()
est utilisé dans la bibliothèque, les valeurs sont placées dans la bibliothèque. Lorsque j'ai créé Ref et Ref, j'ai supposé que le script était utilisé en copiant-collant à la place de la bibliothèque. J'ai donc inclus PropertiesService.getScriptProperties()
dans le script. Mais j'ai remarqué que lorsque ceci est utilisé avec GeminiWithFiles, chaque utilisateur doit utiliser PropertiesService.getScriptProperties()
. Donc, j'ai modifié cela.
L’exemple de script est le suivant.
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 ) ;
}
Lorsque ce script est exécuté, le journal suivant peut être vu dans le journal.
- 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 votre fichier est volumineux et que l'état du fichier téléchargé n'est pas toujours "ACTIF", veuillez tester le script suivant.
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".
}
Grâce à cela, le fichier peut être téléchargé. Et vous pouvez utiliser le fichier téléchargé après avoir attendu suffisamment de temps pour changer l'état en « ACTIF ». Le fichier téléchargé peut être utilisé comme suit.
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 ) ;
}
Comme option supplémentaire, lorsque vous souhaitez télécharger les données avec le téléchargement avec reprise en tant que nouveau téléchargement, veuillez définir resumableUploadAsNewUpload: true
comme suit. Ainsi, la propriété est effacée et le téléchargement est exécuté.
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 ) ;
}
Lorsque q
est utilisé, seule la question textuelle peut être utilisée pour générer du contenu. Lorsque vous souhaitez utiliser vos pièces personnalisées, vous pouvez procéder comme suit.
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 ) ;
}
Lorsque vous souhaitez utiliser l'appel de fonction, vous pouvez utiliser l'exemple de script suivant.
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 ) ;
}
Cet exemple de fonction provient de ce post.
Lorsque vous souhaitez renvoyer les données brutes de l'API Gemini, vous pouvez également utiliser l'exemple de script suivant.
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 ) ) ;
}
En utilisant exportRawData: true
, vous pouvez récupérer les données brutes de l'API Gemini comme suit.
[
{
"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 ) ;
}
Dans cette explication, lorsque ce script est utilisé comme bibliothèque de scripts Google Apps, afin de créer un constructeur, GeminiWithFiles.geminiWithFiles
est utilisé. Lorsque ce script est utilisé en le copiant et en le collant directement dans votre projet Google Apps Script, new GeminiWithFiles
est utilisé à la place de GeminiWithFiles.geminiWithFiles
. Veuillez faire attention à cela.
Les exemples de scripts sont les suivants.
Ce script génère du contenu à partir d'un texte.
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 });
. Ce script génère du contenu avec 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 ) ;
}
Lorsque ce script est exécuté, res1
et res2
sont les suivants.
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 ) ;
}
Lorsque ce script est exécuté, les valeurs suivantes peuvent être vues dans le journal. Par doCountToken: true
, vous pouvez voir le nombre total de jetons.
{
"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
}
Dans ce cas, async/await est utilisé dans la fonction.
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
se produit parfois. Veuillez faire attention à cela. Dans cet exemple, plusieurs fichiers image sont téléchargés et les descriptions sont créées à partir des fichiers image téléchargés. Cet exemple sera la version étendue de mon précédent rapport "Création automatique de descriptions de fichiers sur Google Drive à l'aide de l'API Gemini Pro avec 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 ) ;
}
Lorsque ce script est exécuté, le résultat suivant est obtenu. Dans ce cas, la valeur de name
est l'ID du fichier.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
Lorsque 20 exemples d’images générées par Gemini sont utilisés, le résultat suivant est obtenu.
Lorsque ce script est exécuté, 20 images sont téléchargées et les descriptions des 20 images téléchargées peuvent être obtenues par un seul appel API.
Point important, lors de mon test, lorsque le nombre de fichiers image est important, il était nécessaire de séparer le script entre le téléchargement du fichier et la génération du contenu. De plus, dans le cas de 50 fichiers images, les descriptions pourraient être correctement créées. Mais dans le cas de plus de 50 images, il est arrivé qu’une erreur se soit produite. Veuillez donc adapter le nombre de fichiers à votre situation.
Dans cet exemple, plusieurs factures de fichiers PDF sont téléchargées et analysées en tant qu'objet. Cet exemple sera la version étendue de mon rapport précédent « Analyse des factures à l'aide de l'API Gemini 1.5 avec 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 ) ;
}
Comme exemples de papiers, lorsque les papiers suivants sont utilisés,
Cet exemple de facture provient des modèles de conception de facture de Microsoft.
Cet exemple de facture provient des modèles de conception de facture de Microsoft.
le résultat suivant a été obtenu par un appel API. Il s'avère que les factures téléchargées à partir de données PDF peuvent être correctement analysées.
[
{
"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 "
}
]
Dans cet exemple, plusieurs articles contenant des données PDF sont téléchargés et les textes résumés pour chaque article sont générés.
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 ) ;
}
Comme exemples de papiers, lorsque les papiers suivants sont utilisés,
le résultat suivant a été obtenu par un appel API. Il s'avère que les documents téléchargés convertis des données PDF en données d'image peuvent être traités.
[
{
"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. "
}
]
Au stade actuel, seul "application/json"
peut être utilisé pour 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 ) ;
}
Dans ce cas, le résultat est renvoyé sous forme de tableau comme suit.
[
" 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 ) ;
}
Dans ce cas, les valeurs des résultats peuvent être obtenues en donnant uniquement le schéma JSON. Le résultat est le suivant.
Pour la 1ère question
{
"Kyoto" : 2579970 ,
"Osaka" : 8837684 ,
"Aichi" : 7552873 ,
"Fukuoka" : 5138217 ,
"Tokyo" : 14047594
}
Pour la 2ème question
{
"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 ) ) ;
}
Lorsque ce script est exécuté sur les mêmes factures de la section "Télécharger les factures de données PDF et les analyser", le même résultat est obtenu.
Si vous souhaitez renvoyer la valeur des schémas JSON de haute complexité, response_mime_type
peut convenir.
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 ) ;
}
Lorsque ce script est exécuté, [ 'Meow? What is Google Apps Script? Is it something I can chase? ?' ]
est renvoyé. Vous pouvez voir que la valeur de systemInstruction
se reflète dans le contenu généré.
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 ) ;
}
Lorsque ce script est exécuté, un fichier vidéo MP4 est téléchargé sur Gemini et génère du contenu avec le fichier vidéo téléchargé.
Point important, au stade actuel, la taille maximale de téléchargement avec UrlFetchApp de Google Apps Script est de 50 Mo. Réf Ainsi, lorsque vous téléchargez le fichier vidéo, veuillez utiliser une taille de fichier inférieure à 50 Mo. Veuillez faire attention à cela.
À partir de la version 1.0.7, lorsque doCountToken: true
et exportTotalTokens: true
sont utilisés dans l'objet de l'argument de geminiWithFiles
, le total des jetons est renvoyé. Dans ce cas, la valeur renvoyée est un objet comme {returnValue: "###", totalTokens: ###}
. L’exemple de script est le suivant.
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 ) ;
}
Lorsque ce script est exécuté, le résultat suivant est renvoyé.
{
"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
}
}
À partir de la v2.xx, cela peut être réalisé. Ceci provient de Réf et Réf.
L’exemple de script peut être consulté ici.
Cette invite provient de ce document officiel.
Pour utiliser codeExecution, veuillez utiliser tools: [{ codeExecution: {} }]
et exportRawData: true
dans la méthode geminiWithFiles
comme suit.
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 ) ;
}
Lorsque ce script est exécuté, le résultat suivant est obtenu.
[
{
"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
se produit parfois. Veuillez faire attention à cela.J'ai déjà proposé les futures demandes suivantes au suivi des problèmes de Google. Réf
Je pense qu'il serait encore plus avantageux pour les utilisateurs de Gemini si les fichiers de Google Drive pouvaient être directement utilisés par l'API Gemini en utilisant uniquement leurs identifiants de fichier. Cela réduirait également considérablement le coût de téléchargement des données.
Je pense que la possibilité d'inclure des métadonnées personnalisées dans les fichiers téléchargés serait très utile pour gérer un grand nombre de fichiers.
Lorsque j'ai testé la fonction appelant au contrôle du format de sortie, j'ai parfois eu une erreur du code d'état 500. Mais lorsque j'ai testé response_mime_type
, une telle erreur s'est rarement produite. Je ne sais pas s'il s'agit de la spécification actuelle.
L'image abstraite du haut a été créée par Gemini à partir de la section « Description ».
MIT
Tanaike
Faire un don
v1.0.0 (26 avril 2024)
v1.0.1 (2 mai 2024)
response_mime_type
doit pouvoir être utilisé pour contrôler le format de sortie. Réfv1.0.2 (7 mai 2024)
parts
ont été ajoutées. À partir de cette version, vous pouvez sélectionner l'un des q
, jsonSchema
et parts
.systemInstruction
peut être utilisé.toolConfig
a été ajouté au corps de la requête.v1.0.3 (17 mai 2024)
v1.0.4 (29 mai 2024)
model.countToken
est utilisé avec les fichiers téléchargés, j'ai confirmé qu'une erreur telle que You do not have permission to access the File ### or it may not exist.
s'est produit. Afin de résoudre ce problème, j'ai modifié la bibliothèque.v1.0.5 (7 juin 2024)
v1.0.6 (15 juin 2024)
v1.0.7 (4 juillet 2024)
doCountToken: true
et exportTotalTokens: true
sont utilisés dans l'objet de l'argument de geminiWithFiles
, le total des jetons est renvoyé. Dans ce cas, la valeur renvoyée est un objet comme {returnValue: "###", totalTokens: ###}
.v2.0.0 (3 août 2024)
functions: {}
sont utilisées. Ainsi, l’appel de fonction par défaut a été supprimé. Parce qu'au stade actuel, la sortie JSON peut être facilement renvoyée à l'aide d'un schéma JSON et response_mime_type
. Réf Réfmodels/gemini-1.5-pro-latest
à models/gemini-1.5-flash-latest
.exportTotalTokens
ont été modifiées. Après la version 2.xx, lorsque cela est vrai, les usageMetadata
de l'objet, notamment promptTokenCount
, candidatesTokenCount
et totalTokenCount
, sont exportées. À ce moment-là, le contenu généré et usageMetadata
sont renvoyés sous forme d'objet.v2.0.1 (4 août 2024)
codeExecution
peut être utilisé. Réfv2.0.2 (26 septembre 2024)
generationConfig
, les propriétés response_schema
et temperature
ont été ajoutées.v2.0.3 (19 novembre 2024)
setFileIdsOrUrlsWithResumableUpload
. À partir de la version 2.0.3, lorsque vous utilisez cette méthode, veuillez inclure propertiesService: PropertiesService.getScriptProperties()
dans l'objet initial comme suit. Parce que, lorsque PropertiesService.getScriptProperties()
est utilisé dans la bibliothèque, les valeurs sont placées dans la bibliothèque. Lorsque j'ai créé Ref et Ref, j'ai supposé que le script était utilisé en copiant-collant à la place de la bibliothèque. J'ai donc inclus PropertiesService.getScriptProperties()
dans le script. Mais j'ai remarqué que lorsque ceci est utilisé avec GeminiWithFiles, chaque utilisateur doit utiliser PropertiesService.getScriptProperties()
. Donc, j'ai modifié cela.resumableUploadAsNewUpload: true
. Ref Par cela, la propriété est effacée et le téléchargement est exécuté.HAUT