Gemini API продолжает расти. 5 августа 2024 г. я значительно обновил GeminiWithFiles до версии v2.xx. В этом большом обновлении версия изменена с v1 на v2.
Если вы хотите использовать GeminiWithFiles v1.xx, см. здесь.
Это библиотека сценариев Google Apps для Gemini API с файлами.
Новая библиотека сценариев Google Apps под названием GeminiWithFiles упрощает использование Gemini, большой языковой модели, для обработки неструктурированных данных, таких как изображения и PDF-файлы. GeminiWithFiles может загружать файлы, генерировать контент и создавать описания из нескольких изображений одновременно. Это значительно снижает рабочую нагрузку и расширяет возможности использования Gemini.
Недавно Gemini, большая языковая модель от Google AI, привнесла новые возможности в решение различных задач, позволив использовать неструктурированные данные в качестве структурированных. Это особенно важно, поскольку огромное количество информации существует в неструктурированных форматах, таких как текстовые документы, изображения и видео.
API Gemini 1.5, выпущенный недавно, существенно расширяет эти возможности. Он может генерировать контент до 1 миллиона токенов, что значительно больше по сравнению с предыдущими версиями. Кроме того, Gemini 1.5 теперь может обрабатывать до 3000 файлов изображений, что значительно превышает лимит Gemini 1.0 на 16 изображений. Ссылка
Хотя Gemini не может напрямую работать с форматами Google Диска, такими как Документы, Таблицы и Презентации, существуют обходные пути. На текущем этапе данные PDF могут обрабатываться напрямую с помощью Gemini API. Благодаря этому файлы Google Docs преобразуются в PDF и используются с Gemini API. Ссылка
В этом отчете представлена новая библиотека сценариев Google Apps под названием GeminiWithFiles, которая упрощает этот процесс. GeminiWithFiles позволяет пользователям легко загружать файлы и создавать контент, используя мощные возможности Gemini. Это также позволяет эффективно создавать описания из нескольких изображений с помощью одного вызова API, что значительно снижает рабочую нагрузку по сравнению с обработкой каждого изображения по отдельности, как показано в моем предыдущем отчете. Ссылка
Оптимизируя процесс и расширяя возможности, GeminiWithFiles обещает множество вариантов использования в разных областях. Этот отчет представляет собой расширенный подход к предыдущему, направленный на дальнейшее снижение затрат на процессы и повышение эффективности при работе с Gemini и неструктурированными данными.
Я создал эту библиотеку на основе следующих отчетов.
Эта библиотека GeminiWithFiles позволяет вам взаимодействовать с Gemini, мощной платформой обработки и управления документами, через простой в использовании API. Вот чего вы можете достичь с помощью этой библиотеки:
Управление файлами:
Загрузка контента:
Управление историей чата:
Генерация контента:
Выходная спецификация:
Укажите желаемый формат вывода результатов, генерируемых API Gemini.
Формат вывода контролируется с помощью response_mime_type
и схемы JSON. Ссылка
Чтобы протестировать этот скрипт, выполните следующие действия.
Откройте https://makersuite.google.com/app/apikey и создайте свой ключ API. В это время включите API генеративного языка на консоли API. Этот ключ API используется для этого примера сценария.
Этот официальный документ также можно увидеть. Ссылка.
Создайте отдельный проект скрипта Google Apps. Конечно, этот сценарий также можно использовать со сценарием, привязанным к контейнеру.
И откройте редактор сценариев проекта Google Apps Script.
Существует два шаблона использования GeminiWithFiles.
Если вы используете эту библиотеку в качестве библиотеки сценариев Google Apps, установите ее в свой проект сценариев Google Apps следующим образом.
Создайте проект скрипта Google Apps. Или откройте проект Google Apps Script.
Установите эту библиотеку.
1dolXnIeXKz-BH1BlwRDaKhzC2smJcGyVxMxGYhaY2kqiLa857odLXrIC
Если вы используете эту библиотеку в своем собственном проекте скрипта Google Apps, скопируйте и вставьте скрипт «classGeminiWithFiles.js» в свой проект скрипта Google Apps. При этом скрипт можно использовать.
«main.js» используется для библиотеки сценариев Google Apps. Итак, в этом шаблоне вам не обязательно его использовать.
Эта библиотека использует следующие две области видимости.
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/drive
Если вы хотите использовать токен доступа, свяжите проект Google Cloud Platform с проектом скрипта Google Apps. И, пожалуйста, добавьте следующую область действия.
https://www.googleapis.com/auth/generative-language
Также вы можете просмотреть официальный документ Gemini API по адресу https://ai.google.dev/api/rest.
Методы | Описание |
---|---|
setFileIds (fileIds, asImage = false) | Установите идентификаторы файлов. |
setBlobs(капли) | Установите капли. |
withUploadedFilesByGenerateContent (fileList = []) | Создайте объект для использования методаgenerContent. |
загрузить файлы (n = 50) | Загрузите файлы в Gemini. |
getFileList() | Получить список файлов в Gemini. |
deleteFiles(имена, n = 50) | Удалить файлы из Gemini. |
генерироватьСодержимое (объект) | Основной метод. Генерируйте контент с помощью Gemini API. |
setFileIdsOrUrlsWithResumableUpload (объект) | Файл размером более 50 МБ можно загрузить в Gemini. |
При установке GeminiWithFiles в качестве библиотеки в проект скрипта Google Apps используйте следующий скрипт.
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
или
При непосредственном копировании и вставке сценария класса GeminiWithFiles в проект сценария Google Apps используйте следующий сценарий.
const g = new GeminiWithFiles ( object ) ;
Стоимость object
следующая.
{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.
Если вы хотите использовать response_mime_type
, укажите jsonSchema
для методаgenerateContent. На текущем этапе для response_mime_type
можно использовать только "application/json"
.
Если вы хотите использовать systemInstruction
, подтвердите официальный документ Ref.
В качестве модели по умолчанию используется Gemini 1.5 Flash Latest ( models/gemini-1.5-flash-latest
). Если вы хотите использовать последнюю версию Gemini 1.5 Pro ( models/gemini-1.5-pro-latest
), используйте ее следующим образом: const g = GeminiWithFiles.geminiWithFiles({ apiKey, model: "models/gemini-1.5-pro-latest" })
.
На текущем этапе, когда используется response_schema
, автоматически используется response_mime_type: "application/json"
.
Установите идентификаторы файлов. Файлы с идентификаторами файлов загружаются в Gemini.
В этом случае в функции используется async/await.
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
— это String[] (идентификаторы файлов на Google Диске) и логическое значение соответственно. Если второй аргумент имеет значение false, введенные файлы с идентификаторами файлов загружаются как необработанные данные. Если второй аргумент имеет значение true, введенные файлы с идентификаторами файлов преобразуются в данные изображения и загружаются. По умолчанию второй аргумент имеет значение false.false
в этом методе, например setFileIds(fileIds, false)
. Установите капли. Капли загружаются в Gemini.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
const blobs = [ ] ;
const files = DriveApp . getFolderById ( folderId ) . getFiles ( ) ;
while ( files . hasNext ( ) ) {
blobs . push ( files . next ( ) . getBlob ( ) ) ;
}
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setBlobs ( blobs ) . uploadFiles ( ) ;
console . log ( res ) ;
}
setBlobs
— Blob[].Создайте объект для использования методаgenerContent.
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
имеет только один аргумент. Это значение метода getFileList. Вы можете увидеть фактические значения после загрузки файлов.Загрузите файлы в Gemini. Файлы загружаются в Gemini с использованием введенных идентификаторов файлов или больших двоичных объектов.
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 ) ;
}
В этом скрипте файлы fileIds
загружаются в Gemini с необработанными данными. Если setFileIds(fileIds, false)
изменен на setFileIds(fileIds, true)
, файлы загружаются в Gemini в виде изображений.
Когда вы напрямую используете Blob, вы можете использовать следующий скрипт.
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 ) ;
}
Получить список файлов в 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 ) ;
}
Удалить файлы из 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.` ) ;
}
Основной метод. Генерируйте контент с помощью Gemini API. Дополнительные примеры сценариев можно увидеть в следующем разделе «Примеры сценариев».
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 ) ;
}
В этом скрипте контент генерируется с помощью вызова функции.
Если вы хотите использовать response_mime_type
, укажите jsonSchema
для методаgenerateContent следующим образом. В этом случае, предоставляя только схему JSON, эта библиотека может вернуть действительный объект. Вы также можете увидеть подробную информацию об response_mime_type
в моем отчете.
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 ) ;
}
При запуске этого сценария получается следующий результат.
[
{ "recipe_name" : " Chocolate Chip Cookies " },
{ "recipe_name" : " Peanut Butter Cookies " },
{ "recipe_name" : " Oatmeal Cookies " },
{ "recipe_name" : " Sugar Cookies " },
{ "recipe_name" : " Snickerdoodle Cookies " }
]
Этот метод позволяет загружать файлы размером более 50 МБ.
Этого можно добиться начиная с версии 2.xx. Это из Ref и Ref.
Начиная с версии 2.0.3, когда вы используете этот метод, включите propertiesService: PropertiesService.getScriptProperties()
в исходный объект следующим образом. Потому что, когда PropertiesService.getScriptProperties()
используется в библиотеке, значения помещаются в библиотеку. Когда я создавал Ref и Ref, я предполагал, что вместо библиотеки используется скрипт копирования и вставки. Итак, я включил в скрипт PropertiesService.getScriptProperties()
. Но я заметил, что когда это используется с GeminiWithFiles, каждый пользователь должен использовать PropertiesService.getScriptProperties()
. Итак, я изменил это.
Пример сценария выглядит следующим образом.
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 ) ;
}
Когда этот сценарий запускается, в журнале можно увидеть следующий журнал.
- 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.
Если ваш файл большой и состояние загруженного файла еще не «АКТИВНО», протестируйте следующий скрипт.
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".
}
Благодаря этому файл можно загрузить. И вы можете использовать загруженный файл после того, как он подождет достаточно времени, чтобы изменить состояние на «АКТИВНО». Загруженный файл можно использовать следующим образом.
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 ) ;
}
В качестве дополнительной опции, если вы хотите загрузить данные с возобновляемой загрузкой как новую загрузку, установите resumableUploadAsNewUpload: true
следующим образом. При этом свойство очищается и запускается загрузка.
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 ) ;
}
Когда используется q
, для создания контента можно использовать только текстовый вопрос. Если вы хотите использовать свои собственные детали, вы можете сделать это следующим образом.
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 ) ;
}
Если вы хотите использовать вызов функции, вы можете использовать следующий пример сценария.
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 ) ;
}
Этот пример функции взят из этого поста.
Если вы хотите вернуть необработанные данные из API Gemini, вы также можете использовать следующий пример сценария.
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 ) ) ;
}
Используя exportRawData: true
, вы можете получить необработанные данные из Gemini API следующим образом.
[
{
"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 ) ;
или
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 ) ;
}
В этом объяснении, когда этот сценарий используется в качестве библиотеки сценариев Google Apps, для создания конструктора используется GeminiWithFiles.geminiWithFiles
. Когда этот скрипт используется путем прямого копирования и вставки его в проект Google Apps Script, вместо GeminiWithFiles.geminiWithFiles
используется new GeminiWithFiles
. Пожалуйста, будьте осторожны с этим.
Примеры сценариев следующие.
Этот скрипт генерирует контент из текста.
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 });
. Этот скрипт генерирует контент с помощью чата.
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 ) ;
}
При запуске этого сценария значения res1
и res2
имеют следующий вид.
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 ) ;
}
При запуске этого сценария в журнале можно увидеть следующие значения. По doCountToken: true
вы можете увидеть общее количество токенов.
{
"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
}
В этом случае в функции используется async/await.
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
. Пожалуйста, будьте осторожны с этим. В этом примере загружается несколько файлов изображений, и на основе загруженных файлов изображений создаются описания. Этот образец будет расширенной версией моего предыдущего отчета «Автоматическое создание описаний файлов на Google Диске с использованием Gemini Pro API со скриптом Google Apps».
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 ) ;
}
При запуске этого сценария получается следующий результат. В этом случае значением name
является идентификатор файла.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
При использовании 20 образцов изображений, созданных Gemini, получается следующий результат.
При запуске этого скрипта загружается 20 изображений, и описания 20 загруженных изображений можно получить одним вызовом API.
Важным моментом является то, что в моем тесте, когда количество файлов изображений велико, требовалось разделить скрипт между загрузкой файла и генерацией контента. Кроме того, в случае 50 файлов изображений описания могут быть созданы правильно. Но в случае с более чем 50 изображениями был случай, когда возникала ошибка. Поэтому, пожалуйста, отрегулируйте количество файлов в зависимости от вашей ситуации.
В этом примере загружаются несколько счетов-фактур в формате PDF, и они анализируются как объект. Этот образец будет расширенной версией моего предыдущего отчета «Разбор счетов с использованием API Gemini 1.5 со скриптом Google Apps».
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 ) ;
}
В качестве образцов бумаги при использовании следующих бумаг:
Этот образец счета взят из шаблонов оформления счетов Microsoft.
Этот образец счета взят из шаблонов оформления счетов Microsoft.
следующий результат был получен одним вызовом API. Обнаружено, что загруженные счета-фактуры с данными PDF можно правильно проанализировать.
[
{
"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 "
}
]
В этом примере загружаются несколько документов с данными PDF и выводятся сводные тексты для каждого документа.
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 ) ;
}
В качестве образцов бумаги при использовании следующих бумаг:
следующий результат был получен одним вызовом API. Обнаружено, что загруженные документы, преобразованные из данных PDF в данные изображений, могут быть обработаны.
[
{
"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. "
}
]
На текущем этапе для response_mime_type
можно использовать только "application/json"
.
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 ) ;
}
В этом случае результат возвращается в виде массива следующим образом.
[
" 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 ) ;
}
В этом случае значения результата можно получить, указав только схему JSON. Результат следующий.
На 1-й вопрос
{
"Kyoto" : 2579970 ,
"Osaka" : 8837684 ,
"Aichi" : 7552873 ,
"Fukuoka" : 5138217 ,
"Tokyo" : 14047594
}
На второй вопрос
{
"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 ) ) ;
}
При запуске этого скрипта к тем же счетам из раздела «Загрузить счета-фактуры с данными PDF и проанализировать их» получается тот же результат.
Если вы хотите вернуть значение схем JSON высокой сложности, вам может подойти response_mime_type
.
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 ) ;
}
Когда этот сценарий запускается, [ 'Meow? What is Google Apps Script? Is it something I can chase? ?' ]
возвращается. Вы можете видеть, что значение systemInstruction
отражается в сгенерированном контенте.
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 ) ;
}
При запуске этого сценария видеофайл MP4 загружается в Gemini и генерирует контент с использованием загруженного видеофайла.
Важным моментом является то, что на текущем этапе максимальный размер загрузки с помощью UrlFetchApp скрипта Google Apps составляет 50 МБ. Ссылка Итак, при загрузке видеофайла используйте размер файла менее 50 МБ. Пожалуйста, будьте осторожны с этим.
Начиная с версии 1.0.7, когда doCountToken: true
и exportTotalTokens: true
используются в объекте аргумента geminiWithFiles
, возвращается общее количество токенов. В этом случае возвращаемое значение представляет собой объект типа {returnValue: "###", totalTokens: ###}
. Пример сценария выглядит следующим образом.
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 ) ;
}
При запуске этого сценария возвращается следующий результат.
{
"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
}
}
Этого можно добиться начиная с версии 2.xx. Это из Ref и Ref.
Пример скрипта можно увидеть здесь.
Эта подсказка взята из официального документа.
Чтобы использовать codeExecution, используйте tools: [{ codeExecution: {} }]
и exportRawData: true
в методе geminiWithFiles
следующим образом.
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 ) ;
}
При запуске этого сценария получается следующий результат.
[
{
"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
. Пожалуйста, будьте осторожны с этим.Я уже предложил следующие запросы в систему отслеживания ошибок Google. Ссылка
Я думаю, что для пользователей Gemini было бы еще полезнее, если бы файлы на Google Диске могли напрямую использоваться API Gemini, используя только их идентификаторы файлов. Это также позволит значительно снизить стоимость загрузки данных.
Я думаю, что возможность включать пользовательские метаданные в загружаемые файлы будет очень полезна для управления большим количеством файлов.
Когда я тестировал вызов функции для управления форматом вывода, иногда получал ошибку с кодом состояния 500. Но когда я тестировал response_mime_type
, такая ошибка возникала редко. Я не уверен, является ли это текущей спецификацией.
Верхнее абстрактное изображение создано Близнецами из раздела «Описание».
Массачусетский технологический институт
Танаике
Пожертвовать
v1.0.0 (26 апреля 2024 г.)
v1.0.1 (2 мая 2024 г.)
response_mime_type
должен использоваться для управления выходным форматом. Ссылкаv1.0.2 (7 мая 2024 г.)
parts
. В этой версии вы можете выбрать один из q
, jsonSchema
и parts
.systemInstruction
.toolConfig
.v1.0.3 (17 мая 2024 г.)
v1.0.4 (29 мая 2024 г.)
model.countToken
используется с загруженными файлами, я подтвердил, что появляется ошибка типа You do not have permission to access the File ### or it may not exist.
произошел. Чтобы решить эту проблему, я изменил библиотеку.v1.0.5 (7 июня 2024 г.)
v1.0.6 (15 июня 2024 г.)
v1.0.7 (4 июля 2024 г.)
doCountToken: true
и exportTotalTokens: true
используются в объекте аргумента geminiWithFiles
, возвращается общее количество токенов. В этом случае возвращаемое значение представляет собой объект типа {returnValue: "###", totalTokens: ###}
.v2.0.0 (3 августа 2024 г.)
functions: {}
. Таким образом, вызов функции по умолчанию был удален. Потому что на текущем этапе вывод JSON можно легко вернуть с помощью схемы JSON и response_mime_type
. Ссылка Ссылкаmodels/gemini-1.5-pro-latest
на models/gemini-1.5-flash-latest
.exportTotalTokens
были изменены. После версии 2.xx, когда это верно, экспортируются usageMetadata
объекта, включая promptTokenCount
, candidatesTokenCount
, totalTokenCount
. В этот момент сгенерированный контент и usageMetadata
возвращаются как объект.v2.0.1 (4 августа 2024 г.)
codeExecution
. Ссылкаv2.0.2 (26 сентября 2024 г.)
generationConfig
были добавлены свойства response_schema
и temperature
.v2.0.3 (19 ноября 2024 г.)
setFileIdsOrUrlsWithResumableUpload
. Начиная с версии 2.0.3, когда вы используете этот метод, включите propertiesService: PropertiesService.getScriptProperties()
в исходный объект следующим образом. Потому что, когда PropertiesService.getScriptProperties()
используется в библиотеке, значения помещаются в библиотеку. Когда я создавал Ref и Ref, я предполагал, что вместо библиотеки используется скрипт копирования и вставки. Итак, я включил в скрипт PropertiesService.getScriptProperties()
. Но я заметил, что когда это используется с GeminiWithFiles, каждый пользователь должен использовать PropertiesService.getScriptProperties()
. Итак, я изменил это.resumableUploadAsNewUpload: true
. Ссылка При этом свойство очищается и запускается загрузка.ВЕРШИНА