Die Gemini-API wächst weiter. Am 5. August 2024 habe ich GeminiWithFiles weitgehend auf v2.xx aktualisiert. Mit diesem großen Update wird die Version von v1 auf v2 geändert.
Wenn Sie GeminiWithFiles v1.xx verwenden möchten, lesen Sie bitte hier.
Dies ist eine Google Apps Script-Bibliothek für die Gemini API mit Dateien.
Eine neue Google Apps Script-Bibliothek namens GeminiWithFiles vereinfacht die Verwendung von Gemini, einem großen Sprachmodell, um unstrukturierte Daten wie Bilder und PDFs zu verarbeiten. GeminiWithFiles kann Dateien hochladen, Inhalte generieren und Beschreibungen aus mehreren Bildern gleichzeitig erstellen. Dies reduziert den Arbeitsaufwand erheblich und erweitert die Einsatzmöglichkeiten von Gemini.
Kürzlich hat Gemini, ein großes Sprachmodell von Google AI, neue Möglichkeiten für verschiedene Aufgaben eröffnet, indem es die Verwendung unstrukturierter Daten als strukturierte Daten ermöglicht. Dies ist besonders wichtig, da eine große Menge an Informationen in unstrukturierten Formaten wie Textdokumenten, Bildern und Videos vorliegt.
Die kürzlich veröffentlichte Gemini 1.5 API erweitert diese Funktionen erheblich. Es kann Inhalte mit bis zu 1 Million Token generieren, eine erhebliche Steigerung im Vergleich zu früheren Versionen. Darüber hinaus kann Gemini 1.5 jetzt bis zu 3.000 Bilddateien verarbeiten und übertrifft damit die 16-Bilder-Grenze von Gemini 1.0 bei weitem. Ref
Obwohl Gemini nicht direkt mit Google Drive-Formaten wie Docs, Sheets und Slides arbeiten kann, gibt es Workarounds. Im aktuellen Stadium können PDF-Daten direkt mit der Gemini API verarbeitet werden. Auf diese Weise werden diese Google Docs-Dateien in PDF konvertiert und mit der Gemini-API verwendet. Ref
In diesem Bericht wird eine neue Google Apps Script-Bibliothek namens „GeminiWithFiles“ vorgestellt, die diesen Prozess vereinfacht. GeminiWithFiles ermöglicht Benutzern das einfache Hochladen von Dateien und das Generieren von Inhalten mithilfe der leistungsstarken Funktionen von Gemini. Es ermöglicht außerdem die effiziente Erstellung von Beschreibungen aus mehreren Bildern mit einem einzigen API-Aufruf, wodurch der Arbeitsaufwand im Vergleich zur Verarbeitung jedes Bildes einzeln, wie in meinem vorherigen Bericht gezeigt, erheblich reduziert wird. Ref
Durch die Rationalisierung des Prozesses und die Erweiterung der Funktionen verspricht GeminiWithFiles verschiedene Anwendungsfälle in verschiedenen Domänen. Dieser Bericht dient als erweiterter Ansatz zum vorherigen und zielt darauf ab, die Prozesskosten weiter zu senken und die Effizienz bei der Arbeit mit Gemini und unstrukturierten Daten zu verbessern.
Ich habe diese Bibliothek basierend auf den folgenden Berichten erstellt.
Mit dieser Bibliothek GeminiWithFiles können Sie über eine benutzerfreundliche API mit Gemini, einer leistungsstarken Dokumentenverarbeitungs- und Verwaltungsplattform, interagieren. Folgendes können Sie mit dieser Bibliothek erreichen:
Dateiverwaltung:
Inhalt hochladen:
Chat-Verlaufsverwaltung:
Inhaltsgenerierung:
Ausgabespezifikation:
Geben Sie das gewünschte Ausgabeformat für die von der Gemini-API generierten Ergebnisse an.
Mit Hilfe von response_mime_type
und dem JSON-Schema wird das Ausgabeformat gesteuert. Ref
Um dieses Skript zu testen, führen Sie bitte die folgenden Schritte aus.
Bitte greifen Sie auf https://makersuite.google.com/app/apikey zu und erstellen Sie Ihren API-Schlüssel. Bitte aktivieren Sie zu diesem Zeitpunkt die Generative Language API in der API-Konsole. Dieser API-Schlüssel wird für dieses Beispielskript verwendet.
Dieses offizielle Dokument ist ebenfalls einsehbar. Ref.
Bitte erstellen Sie ein eigenständiges Google Apps Script-Projekt. Natürlich kann dieses Skript auch mit dem Container-gebundenen Skript verwendet werden.
Und öffnen Sie bitte den Skripteditor des Google Apps Script-Projekts.
Es gibt zwei Muster für die Verwendung von GeminiWithFiles.
Wenn Sie diese Bibliothek als Google Apps Script-Bibliothek verwenden, installieren Sie die Bibliothek bitte wie folgt in Ihrem Google Apps Script-Projekt.
Erstellen Sie ein Google Apps Script-Projekt. Oder öffnen Sie Ihr Google Apps Script-Projekt.
Installieren Sie diese Bibliothek.
1dolXnIeXKz-BH1BlwRDaKhzC2smJcGyVxMxGYhaY2kqiLa857odLXrIC
Wenn Sie diese Bibliothek in Ihrem eigenen Google Apps Script-Projekt verwenden, kopieren Sie bitte das Skript „classGeminiWithFiles.js“ und fügen Sie es in Ihr Google Apps Script-Projekt ein. Dadurch kann das Skript verwendet werden.
„main.js“ wird für die Google Apps Script-Bibliothek verwendet. In diesem Muster ist es also nicht erforderlich, es zu verwenden.
Diese Bibliothek verwendet die folgenden zwei Bereiche.
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/drive
Wenn Sie das Zugriffstoken verwenden möchten, verknüpfen Sie bitte das Google Cloud Platform Project mit dem Google Apps Script Project. Und fügen Sie bitte den folgenden Bereich hinzu.
https://www.googleapis.com/auth/generative-language
Außerdem können Sie das offizielle Dokument der Gemini API unter https://ai.google.dev/api/rest einsehen.
Methoden | Beschreibung |
---|---|
setFileIds(fileIds, asImage = false) | Datei-IDs festlegen. |
setBlobs(Blobs) | Blobs setzen. |
withUploadedFilesByGenerateContent(fileList = []) | Erstellen Sie ein Objekt zur Verwendung der Methode „generateContent“. |
uploadFiles(n = 50) | Laden Sie Dateien auf Gemini hoch. |
getFileList() | Dateiliste in Gemini abrufen. |
deleteFiles(names, n = 50) | Löschen Sie Dateien von Gemini. |
generierenContent(Objekt) | Hauptmethode. Generieren Sie Inhalte mit der Gemini-API. |
setFileIdsOrUrlsWithResumableUpload(object) | Dateien über 50 MB können auf Gemini hochgeladen werden. |
Wenn Sie GeminiWithFiles als Bibliothek in Ihrem Google Apps Script-Projekt installieren, verwenden Sie bitte das folgende Skript.
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
oder
Wenn Sie das Skript der Klasse GeminiWithFiles direkt kopieren und in Ihr Google Apps-Skriptprojekt einfügen, verwenden Sie bitte das folgende Skript.
const g = new GeminiWithFiles ( object ) ;
Der Wert des object
ist wie folgt.
{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.
Wenn Sie response_mime_type
verwenden möchten, geben Sie bitte jsonSchema
an die Methode „generateContent“ an. In der aktuellen Phase kann nur "application/json"
für response_mime_type
“ verwendet werden.
Wenn Sie systemInstruction
verwenden möchten, bestätigen Sie bitte das offizielle Dokument Ref.
Gemini 1.5 Flash Latest ( models/gemini-1.5-flash-latest
) wird als Standardmodell verwendet. Wenn Sie Gemini 1.5 Pro Latest ( models/gemini-1.5-pro-latest
) verwenden möchten, verwenden Sie es bitte wie const g = GeminiWithFiles.geminiWithFiles({ apiKey, model: "models/gemini-1.5-pro-latest" })
.
In der aktuellen Phase wird bei Verwendung von response_schema
automatisch response_mime_type: "application/json"
verwendet.
Datei-IDs festlegen. Die Dateien der Datei-IDs werden auf Gemini hochgeladen.
In diesem Fall wird async/await in der Funktion verwendet.
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
sind String[] (die Datei-IDs auf Google Drive) bzw. der boolesche Wert. Wenn das 2. Argument falsch ist, werden die eingegebenen Dateien mit Datei-IDs als Rohdaten hochgeladen. Wenn das 2. Argument wahr ist, werden die eingegebenen Dateien mit Datei-IDs in Bilddaten umgewandelt und hochgeladen. Der Standardwert des 2. Arguments ist falsch.false
wie setFileIds(fileIds, false)
verwenden. Blobs setzen. Die Blobs werden auf Gemini hochgeladen.
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
ist Blob[].Erstellen Sie ein Objekt zur Verwendung der Methode „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
hat nur ein Argument. Das ist der Wert der getFileList-Methode. Sie können die tatsächlichen Werte sehen, nachdem Sie Dateien hochgeladen haben.Laden Sie Dateien auf Gemini hoch. Die Dateien werden mithilfe der eingegebenen Datei-IDs oder Blobs auf Gemini hochgeladen.
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 ) ;
}
In diesem Skript werden die Dateien von fileIds
mit den Rohdaten nach Gemini hochgeladen. Wenn setFileIds(fileIds, false)
in setFileIds(fileIds, true)
geändert wird, werden die Dateien als Bilder auf Gemini hochgeladen.
Wenn Sie Blob direkt verwenden, können Sie das folgende Skript verwenden.
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 ) ;
}
Dateiliste in Gemini abrufen.
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 ) ;
}
Löschen Sie Dateien von 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.` ) ;
}
Hauptmethode. Generieren Sie Inhalte mit der Gemini-API. Weitere Beispielskripte finden Sie im folgenden Abschnitt „Beispielskripte“.
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 ) ;
}
In diesem Skript wird der Inhalt mit dem Funktionsaufruf generiert.
Wenn Sie response_mime_type
verwenden möchten, geben Sie jsonSchema
wie folgt an die Methode „generateContent“ weiter. In diesem Fall kann diese Bibliothek ein gültiges Objekt zurückgeben, indem sie nur das JSON-Schema angibt. Die detaillierten Informationen zu response_mime_type
finden Sie auch in meinem Bericht.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, wird das folgende Ergebnis erhalten.
[
{ "recipe_name" : " Chocolate Chip Cookies " },
{ "recipe_name" : " Peanut Butter Cookies " },
{ "recipe_name" : " Oatmeal Cookies " },
{ "recipe_name" : " Sugar Cookies " },
{ "recipe_name" : " Snickerdoodle Cookies " }
]
Mit dieser Methode können Dateien über 50 MB hochgeladen werden.
Ab v2.xx ist dies möglich. Dies ist aus Ref und Ref.
Wenn Sie diese Methode ab Version 2.0.3 verwenden, fügen Sie bitte propertiesService: PropertiesService.getScriptProperties()
wie folgt in das ursprüngliche Objekt ein. Denn wenn PropertiesService.getScriptProperties()
in der Bibliothek verwendet wird, werden die Werte in die Bibliothek gestellt. Als ich Ref und Ref erstellt habe, ging ich davon aus, dass das Skript durch Kopieren und Einfügen anstelle der Bibliothek verwendet wird. Also habe ich PropertiesService.getScriptProperties()
in das Skript eingefügt. Mir ist jedoch aufgefallen, dass bei Verwendung mit GeminiWithFiles jeder Benutzer PropertiesService.getScriptProperties()
verwenden muss. Also habe ich das geändert.
Das Beispielskript sieht wie folgt aus.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, wird im Protokoll das folgende Protokoll angezeigt.
- 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.
Wenn Ihre Datei groß ist und der Status der hochgeladenen Datei immer noch nicht „AKTIV“ ist, testen Sie bitte das folgende Skript.
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".
}
Dadurch kann die Datei hochgeladen werden. Und Sie können die hochgeladene Datei verwenden, nachdem sie genügend Zeit gewartet hat, um den Status in „AKTIV“ zu ändern. Die hochgeladene Datei kann wie folgt verwendet werden.
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 ) ;
}
Wenn Sie die Daten mit dem fortsetzbaren Upload als neuen Upload hochladen möchten, stellen Sie als zusätzliche Option resumableUploadAsNewUpload: true
wie folgt ein. Dadurch wird die Eigenschaft gelöscht und der Upload ausgeführt.
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 ) ;
}
Wenn q
verwendet wird, können nur Textfragen zum Generieren von Inhalten verwendet werden. Wenn Sie Ihre benutzerdefinierten Teile verwenden möchten, können Sie dies wie folgt tun.
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 ) ;
}
Wenn Sie den Funktionsaufruf verwenden möchten, können Sie das folgende Beispielskript verwenden.
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 ) ;
}
Diese Beispielfunktion stammt aus diesem Beitrag.
Wenn Sie die Rohdaten von der Gemini-API zurückgeben möchten, können Sie auch das folgende Beispielskript verwenden.
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 ) ) ;
}
Mithilfe von exportRawData: true
können Sie die Rohdaten wie folgt von der Gemini-API abrufen.
[
{
"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 ) ;
oder
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 ) ;
}
Wenn dieses Skript in dieser Erklärung als Google Apps-Skriptbibliothek verwendet wird, wird zum Erstellen eines Konstruktors GeminiWithFiles.geminiWithFiles
verwendet. Wenn dieses Skript durch direktes Kopieren und Einfügen in Ihr Google Apps Script-Projekt verwendet wird, wird new GeminiWithFiles
anstelle von GeminiWithFiles.geminiWithFiles
verwendet. Bitte seien Sie diesbezüglich vorsichtig.
Die Beispielskripte lauten wie folgt.
Dieses Skript generiert Inhalte aus einem Text.
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 });
. Dieses Skript generiert Inhalte mit einem 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 ) ;
}
Wenn dieses Skript ausgeführt wird, lauten res1
und res2
wie folgt.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, werden die folgenden Werte im Protokoll angezeigt. Mit doCountToken: true
können Sie die Gesamtzahl der Token sehen.
{
"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
}
In diesem Fall wird async/await in der Funktion verwendet.
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
auf. Bitte seien Sie diesbezüglich vorsichtig. In diesem Beispiel werden mehrere Bilddateien hochgeladen und die Beschreibungen werden aus den hochgeladenen Bilddateien erstellt. Dieses Beispiel ist die erweiterte Version meines vorherigen Berichts „Automatisches Erstellen von Beschreibungen von Dateien auf Google Drive mithilfe der Gemini Pro API mit 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 ) ;
}
Wenn dieses Skript ausgeführt wird, wird das folgende Ergebnis erhalten. In diesem Fall ist der Wert von name
die Datei-ID.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
Wenn 20 von Gemini generierte Beispielbilder verwendet werden, wird das folgende Ergebnis erhalten.
Wenn dieses Skript ausgeführt wird, werden 20 Bilder hochgeladen und die Beschreibungen der hochgeladenen 20 Bilder können durch einen API-Aufruf abgerufen werden.
Ein wichtiger Punkt in meinem Test: Wenn die Anzahl der Bilddateien groß ist, war es erforderlich, das Skript zwischen dem Datei-Upload und der Inhaltsgenerierung zu trennen. Auch bei 50 Bilddateien konnten die Beschreibungen korrekt erstellt werden. Bei mehr als 50 Bildern kam es jedoch vor, dass ein Fehler auftrat. Passen Sie daher bitte die Anzahl der Dateien an Ihre Situation an.
In diesem Beispiel werden mehrere Rechnungen mit PDF-Dateien hochgeladen und als Objekt analysiert. Dieses Beispiel ist die erweiterte Version meines vorherigen Berichts „Parsen von Rechnungen mithilfe der Gemini 1.5-API mit 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 ) ;
}
Wenn als Beispielpapiere die folgenden Papiere verwendet werden:
Diese Beispielrechnung stammt aus Rechnungsentwurfsvorlagen von Microsoft.
Diese Beispielrechnung stammt aus Rechnungsentwurfsvorlagen von Microsoft.
Das folgende Ergebnis wurde durch einen API-Aufruf erhalten. Es wurde festgestellt, dass die hochgeladenen Rechnungen mit PDF-Daten korrekt analysiert werden können.
[
{
"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 "
}
]
In diesem Beispiel werden mehrere Aufsätze mit PDF-Daten hochgeladen und die zusammengefassten Texte für jeden Aufsatz ausgegeben.
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 ) ;
}
Wenn als Beispielpapiere die folgenden Papiere verwendet werden:
Das folgende Ergebnis wurde durch einen API-Aufruf erhalten. Es wurde festgestellt, dass die hochgeladenen Papiere, die von PDF-Daten in Bilddaten umgewandelt wurden, verarbeitet werden können.
[
{
"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. "
}
]
In der aktuellen Phase kann nur "application/json"
für response_mime_type
“ verwendet werden.
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 ) ;
}
In diesem Fall wird das Ergebnis wie folgt als Array zurückgegeben.
[
" 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 ) ;
}
In diesem Fall können die Ergebniswerte erhalten werden, indem nur das JSON-Schema angegeben wird. Das Ergebnis ist wie folgt.
Zur 1. Frage
{
"Kyoto" : 2579970 ,
"Osaka" : 8837684 ,
"Aichi" : 7552873 ,
"Fukuoka" : 5138217 ,
"Tokyo" : 14047594
}
Zur 2. Frage
{
"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 ) ) ;
}
Wenn dieses Skript auf dieselben Rechnungen wie im Abschnitt „Rechnungen mit PDF-Daten hochladen und analysieren“ ausgeführt wird, wird das gleiche Ergebnis erzielt.
Wenn Sie den Wert von JSON-Schemas mit hoher Komplexität zurückgeben möchten, ist response_mime_type
möglicherweise geeignet.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, [ 'Meow? What is Google Apps Script? Is it something I can chase? ?' ]
wird zurückgegeben. Sie können sehen, dass sich der Wert von systemInstruction
im generierten Inhalt widerspiegelt.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, wird eine MP4-Videodatei auf Gemini hochgeladen und Inhalte mit der hochgeladenen Videodatei generiert.
Ein wichtiger Punkt: In der aktuellen Phase beträgt die maximale Upload-Größe mit UrlFetchApp von Google Apps Script 50 MB. Hinweis: Wenn Sie die Videodatei hochladen, verwenden Sie bitte eine Dateigröße von weniger als 50 MB. Bitte seien Sie diesbezüglich vorsichtig.
Ab Version 1.0.7 werden die Gesamttokens zurückgegeben, wenn doCountToken: true
und exportTotalTokens: true
im Objekt des Arguments von geminiWithFiles
verwendet werden. In diesem Fall ist der zurückgegebene Wert ein Objekt wie {returnValue: "###", totalTokens: ###}
. Das Beispielskript sieht wie folgt aus.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, wird das folgende Ergebnis zurückgegeben.
{
"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
}
}
Ab v2.xx ist dies möglich. Dies ist aus Ref und Ref.
Das Beispielskript finden Sie hier.
Diese Eingabeaufforderung stammt aus diesem offiziellen Dokument.
Um codeExecution zu verwenden, verwenden Sie bitte tools: [{ codeExecution: {} }]
und exportRawData: true
in die geminiWithFiles
-Methode wie folgt.
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 ) ;
}
Wenn dieses Skript ausgeführt wird, wird das folgende Ergebnis erhalten.
[
{
"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
auf. Bitte seien Sie diesbezüglich vorsichtig.Ich habe dem Google Issue Tracker bereits die folgenden zukünftigen Anfragen vorgeschlagen. Ref
Ich denke, dass es für Benutzer von Gemini noch vorteilhafter wäre, wenn Dateien auf Google Drive direkt von der Gemini-API verwendet werden könnten, indem nur ihre Datei-IDs verwendet würden. Dies würde auch die Kosten für das Hochladen von Daten erheblich reduzieren.
Ich denke, dass die Möglichkeit, benutzerdefinierte Metadaten in hochgeladene Dateien einzubinden, für die Verwaltung einer großen Anzahl von Dateien sehr nützlich wäre.
Als ich den Funktionsaufruf zur Steuerung des Ausgabeformats getestet habe, erhielt ich manchmal einen Fehler mit dem Statuscode 500. Als ich jedoch response_mime_type
testete, trat ein solcher Fehler selten auf. Ich bin mir nicht sicher, ob dies die aktuelle Spezifikation ist.
Das obere abstrakte Bild wurde von Gemini aus dem Abschnitt „Beschreibung“ erstellt.
MIT
Tanaike
Spenden
v1.0.0 (26. April 2024)
v1.0.1 (2. Mai 2024)
response_mime_type
muss zur Steuerung des Ausgabeformats verwendet werden können. Refv1.0.2 (7. Mai 2024)
parts
hinzugefügt. In dieser Version können Sie eines von q
, jsonSchema
und parts
auswählen.systemInstruction
verwendet werden.toolConfig
zum Anfragetext hinzugefügt.v1.0.3 (17. Mai 2024)
v1.0.4 (29. Mai 2024)
model.countToken
mit den hochgeladenen Dateien verwendet wurde, habe ich bestätigt, dass ein Fehler wie You do not have permission to access the File ### or it may not exist.
geschah. Um dieses Problem zu lösen, habe ich die Bibliothek geändert.v1.0.5 (7. Juni 2024)
v1.0.6 (15. Juni 2024)
v1.0.7 (4. Juli 2024)
doCountToken: true
und exportTotalTokens: true
im Objekt des Arguments von geminiWithFiles
verwendet werden. In diesem Fall ist der zurückgegebene Wert ein Objekt wie {returnValue: "###", totalTokens: ###}
.v2.0.0 (3. August 2024)
functions: {}
verwendet. Daher wurde der Standard-Funktionsaufruf entfernt. Denn in der aktuellen Phase kann die JSON-Ausgabe einfach mithilfe eines JSON-Schemas und response_mime_type
zurückgegeben werden. Ref. Refmodels/gemini-1.5-pro-latest
in models/gemini-1.5-flash-latest
geändert.exportTotalTokens
wurden geändert. Wenn dies nach v2.xx zutrifft, werden die usageMetadata
einschließlich promptTokenCount
, candidatesTokenCount
und totalTokenCount
exportiert. Zu diesem Zeitpunkt werden die generierten Inhalts- und usageMetadata
als Objekt zurückgegeben.v2.0.1 (4. August 2024)
codeExecution
verwendet werden. Refv2.0.2 (26. September 2024)
generationConfig
wurden die Eigenschaften response_schema
und temperature
hinzugefügt.v2.0.3 (19. November 2024)
setFileIdsOrUrlsWithResumableUpload
geändert. Wenn Sie diese Methode ab Version 2.0.3 verwenden, fügen Sie bitte propertiesService: PropertiesService.getScriptProperties()
wie folgt in das ursprüngliche Objekt ein. Denn wenn PropertiesService.getScriptProperties()
in der Bibliothek verwendet wird, werden die Werte in die Bibliothek gestellt. Als ich Ref und Ref erstellt habe, ging ich davon aus, dass das Skript durch Kopieren und Einfügen anstelle der Bibliothek verwendet wird. Also habe ich PropertiesService.getScriptProperties()
in das Skript eingefügt. Mir ist jedoch aufgefallen, dass bei Verwendung mit GeminiWithFiles jeder Benutzer PropertiesService.getScriptProperties()
verwenden muss. Also habe ich das geändert.resumableUploadAsNewUpload: true
fest. Ref Dadurch wird die Eigenschaft gelöscht und der Upload ausgeführt.SPITZE