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.