Gemini API는 계속해서 성장하고 있습니다. 2024년 8월 5일 GeminiWithFiles를 v2.xx로 대폭 업데이트했습니다. 이번 대규모 업데이트로 버전이 v1에서 v2로 변경되었습니다.
GeminiWithFiles v1.xx를 사용하려면 여기를 참조하세요.
이것은 파일이 포함된 Gemini API용 Google Apps Script 라이브러리입니다.
GeminiWithFiles라는 새로운 Google Apps Script 라이브러리는 대규모 언어 모델인 Gemini를 사용하여 이미지 및 PDF와 같은 구조화되지 않은 데이터를 처리하는 작업을 단순화합니다. GeminiWithFiles는 파일을 업로드하고, 콘텐츠를 생성하고, 여러 이미지에서 한 번에 설명을 만들 수 있습니다. 이는 작업 부하를 크게 줄이고 Gemini 사용 가능성을 확장합니다.
최근에는 Google AI의 대규모 언어 모델인 Gemini를 통해 비정형 데이터를 정형 데이터로 활용 가능하게 함으로써 다양한 작업에 새로운 가능성을 가져왔습니다. 텍스트 문서, 이미지, 비디오 등 구조화되지 않은 형식으로 방대한 양의 정보가 존재하기 때문에 이는 특히 중요합니다.
최근 출시된 Gemini 1.5 API는 이러한 기능을 크게 확장합니다. 최대 100만 개의 토큰으로 콘텐츠를 생성할 수 있으며, 이는 이전 버전에 비해 상당히 증가한 수치입니다. 또한 Gemini 1.5는 이제 최대 3,000개의 이미지 파일을 처리할 수 있으며 이는 Gemini 1.0의 16개 이미지 제한을 크게 초과합니다. 참조
Gemini는 Docs, Sheets, Slides와 같은 Google 드라이브 형식으로 직접 작업할 수 없지만 해결 방법이 있습니다. 현 단계에서는 PDF 데이터를 Gemini API로 직접 처리할 수 있습니다. 이를 사용하여 Google Docs 파일을 PDF로 변환하고 Gemini API와 함께 사용합니다. 참조
이 보고서에서는 이 프로세스를 단순화하는 "GeminiWithFiles"라는 새로운 Google Apps Script 라이브러리를 소개합니다. GeminiWithFiles를 사용하면 사용자는 Gemini의 강력한 기능을 사용하여 쉽게 파일을 업로드하고 콘텐츠를 생성할 수 있습니다. 또한 단일 API 호출로 여러 이미지에서 효율적인 설명 생성이 가능하므로 이전 보고서에서 설명한 것처럼 각 이미지를 개별적으로 처리하는 것에 비해 작업 부하가 크게 줄어듭니다. 참조
프로세스를 간소화하고 기능을 확장함으로써 GeminiWithFiles는 다양한 도메인에 걸쳐 다양한 사용 사례를 약속합니다. 이 보고서는 Gemini 및 비정형 데이터로 작업할 때 프로세스 비용을 더욱 줄이고 효율성을 향상시키는 것을 목표로 이전 보고서에 대한 확장된 접근 방식을 제공합니다.
다음 보고서를 기반으로 이 라이브러리를 만들었습니다.
이 라이브러리 GeminiWithFiles를 사용하면 사용하기 쉬운 API를 통해 강력한 문서 처리 및 관리 플랫폼인 Gemini와 상호 작용할 수 있습니다. 이 라이브러리를 사용하여 얻을 수 있는 작업은 다음과 같습니다.
파일 관리:
콘텐츠 업로드:
채팅 기록 관리:
콘텐츠 생성:
출력 사양:
Gemini API에서 생성된 결과에 대해 원하는 출력 형식을 지정합니다.
response_mime_type
및 JSON 스키마를 사용하여 출력 형식이 제어됩니다. 참조
이 스크립트를 테스트하려면 다음 단계를 수행하십시오.
https://makerssuite.google.com/app/apikey에 접속하여 API 키를 생성하세요. 이때 API 콘솔에서 Generative Language API를 활성화하세요. 이 API 키는 이 샘플 스크립트에 사용됩니다.
이 공식 문서도 볼 수 있습니다. 참조.
독립형 Google Apps Script 프로젝트를 만드세요. 물론 이 스크립트는 컨테이너 바인딩 스크립트와 함께 사용할 수도 있습니다.
그리고 Google Apps Script 프로젝트의 스크립트 편집기를 열어주세요.
GeminiWithFiles를 사용하는 데는 두 가지 패턴이 있습니다.
이 라이브러리를 Google Apps Script 라이브러리로 사용하는 경우 다음과 같이 Google Apps Script 프로젝트에 라이브러리를 설치하세요.
Google Apps Script 프로젝트를 만듭니다. 또는 Google Apps Script 프로젝트를 엽니다.
이 라이브러리를 설치하세요.
1dolXnIeXKz-BH1BlwRDaKhzC2smJcGyVxMxGYhaY2kqiLa857odLXrIC
자신의 Google Apps Script 프로젝트에서 이 라이브러리를 사용하는 경우 "classGeminiWithFiles.js" 스크립트를 복사하여 Google Apps Script 프로젝트에 붙여넣으세요. 이를 통해 스크립트를 사용할 수 있습니다.
"main.js"는 Google Apps Script 라이브러리에 사용됩니다. 따라서 이 패턴에서는 사용할 필요가 없습니다.
이 라이브러리는 다음 2가지 범위를 사용합니다.
https://www.googleapis.com/auth/script.external_request
https://www.googleapis.com/auth/drive
액세스 토큰을 사용하려면 Google Cloud Platform 프로젝트를 Google Apps Script 프로젝트에 연결하세요. 그리고, 다음 범위를 추가해주세요.
https://www.googleapis.com/auth/generative-language
또한 https://ai.google.dev/api/rest에서 Gemini API 공식 문서를 보실 수 있습니다.
행동 양식 | 설명 |
---|---|
setFileIds(fileIds, asImage = false) | 파일 ID를 설정합니다. |
setBlob(블롭) | 얼룩을 설정합니다. |
withUploadedFilesByGenerateContent(fileList = []) | generateContent 메소드를 사용하기 위한 객체를 생성합니다. |
업로드파일(n = 50) | Gemini에 파일을 업로드합니다. |
파일목록() | Gemini에서 파일 목록을 가져옵니다. |
deleteFiles(이름, n = 50) | Gemini에서 파일을 삭제합니다. |
생성컨텐트(객체) | 주요 방법. Gemini API로 콘텐츠를 생성합니다. |
setFileIdsOrUrlsWithResumableUpload(객체) | 50MB가 넘는 파일은 Gemini에 업로드할 수 있습니다. |
Google Apps Script 프로젝트에 GeminiWithFiles를 라이브러리로 설치할 때 다음 스크립트를 사용하세요.
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
또는
Class GeminiWithFiles의 스크립트를 Google Apps Script 프로젝트에 직접 복사하여 붙여넣을 때 다음 스크립트를 사용하세요.
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
사용하려면 generateContent 메소드에 jsonSchema
지정하세요. 현재 단계에서는 response_mime_type
에 "application/json"
만 사용할 수 있습니다.
systemInstruction
사용하려면 공식 문서 Ref.를 확인하세요.
Gemini 1.5 Flash 최신( 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"
자동으로 사용됩니다.
파일 ID를 설정합니다. 파일 ID의 파일이 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 드라이브의 파일 ID) 및 부울입니다. 두 번째 인수가 false이면 입력된 파일 ID의 파일이 원시 데이터로 업로드됩니다. 두 번째 인수가 true이면 입력된 파일 ID의 파일을 이미지 데이터로 변환하여 업로드한다. 두 번째 인수의 기본값은 false입니다.setFileIds(fileIds, false)
와 같은 이 메서드에서 false
사용할 수 있습니다. 얼룩을 설정합니다. Blob이 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[]입니다.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
인수가 하나만 있습니다. 이는 getFileList 메소드의 값입니다. 파일을 업로드한 후 실제 값을 볼 수 있습니다.Gemini에 파일을 업로드합니다. 파일은 입력된 파일 ID 또는 Blob을 사용하여 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
사용하고 싶다면 generateContent 메소드에 다음과 같이 jsonSchema
부여해주세요. 이 경우 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 " }
]
이 방법을 사용하면 50MB가 넘는 파일을 업로드할 수 있습니다.
v2.xx부터는 이를 달성할 수 있습니다. 이것은 Ref와 Ref에서 나온 것입니다.
v2.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.
파일이 크고 업로드된 파일의 상태가 아직 "ACTIVE"가 아닌 경우 다음 스크립트를 테스트하십시오.
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".
}
이를 통해 파일을 업로드할 수 있습니다. 그리고 업로드된 파일은 상태가 "ACTIVE"로 변경될 때까지 충분한 시간을 기다린 후 사용할 수 있습니다. 업로드한 파일은 다음과 같이 사용할 수 있습니다.
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 ) ;
}
이 샘플 함수는 이 게시물에서 가져온 것입니다.
Gemini API에서 원시 데이터를 반환하려는 경우 다음 샘플 스크립트를 사용할 수도 있습니다.
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 Script 라이브러리로 사용할 때 생성자를 생성하기 위해 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 Apps Script와 함께 Gemini Pro API를 사용하여 Google 드라이브에 파일 설명 자동 생성"의 확장 버전입니다.
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
값은 파일 ID입니다.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
Gemini에서 생성된 20개의 샘플 이미지를 이용하면 다음과 같은 결과가 나온다.
이 스크립트를 실행하면 20개의 이미지가 업로드되며, 업로드된 20개의 이미지에 대한 설명은 한 번의 API 호출로 얻을 수 있습니다.
중요한 점은 제 테스트에서 이미지 파일의 양이 많을 때 파일 업로드와 콘텐츠 생성 사이에서 스크립트를 분리해야 한다는 점이었습니다. 또한 50개의 이미지 파일의 경우에도 설명이 올바르게 생성될 수 있었습니다. 다만, 50개 이상의 이미지의 경우 오류가 발생하는 경우가 있었습니다. 따라서 상황에 맞게 파일 수를 조정하시기 바랍니다.
이 샘플에서는 PDF 파일의 여러 송장을 업로드하고 개체로 구문 분석합니다. 이 샘플은 이전 보고서 "Google Apps Script와 함께 Gemini 1.5 API를 사용하여 송장 구문 분석"의 확장 버전입니다.
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 스키마만 주어서 결과값을 얻을 수 있다. 결과는 다음과 같습니다.
첫 번째 질문의 경우
{
"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에 업로드되고 업로드된 비디오 파일로 콘텐츠를 생성합니다.
중요한 점은 현재 단계에서 Google Apps Script의 UrlFetchApp을 통한 최대 업로드 크기는 50MB입니다. 참고로, 영상 파일 업로드 시 파일 크기가 50MB 이하인 파일을 사용해 주시기 바랍니다. 이에 주의하시기 바랍니다.
v1.0.7부터 geminiWithFiles
인수의 객체에 doCountToken: true
및 exportTotalTokens: true
사용하면 총 토큰이 반환됩니다. 이 경우 반환된 값은 {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
}
}
v2.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 Issue Tracker에 다음과 같은 향후 요청을 제안했습니다. 참조
Google Drive의 파일을 파일 ID만 사용하여 Gemini API에서 직접 사용할 수 있다면 Gemini 사용자에게는 더욱 유익할 것이라고 생각합니다. 이를 통해 데이터 업로드 비용도 크게 절감됩니다.
업로드된 파일에 사용자 정의 메타데이터를 포함하는 기능은 많은 수의 파일을 관리하는 데 매우 유용할 것이라고 생각합니다.
출력 형식을 제어하는 함수를 호출하는 함수를 테스트할 때 상태 코드 500의 오류가 가끔 발생했습니다. 그런데 response_mime_type
테스트를 해보니 이러한 오류가 거의 발생하지 않았습니다. 이것이 현재 사양인지 확실하지 않습니다.
상단 추상 이미지는 "설명" 섹션에서 Gemini에 의해 생성되었습니다.
MIT
다나이케
기부
v1.0.0(2024년 4월 26일)
v1.0.1(2024년 5월 2일)
response_mime_type
사용하여 출력 형식을 제어할 수 있습니다. 참조v1.0.2(2024년 5월 7일)
parts
추가되었습니다. 이번 버전에서는 q
, jsonSchema
, parts
중 하나를 선택할 수 있습니다.systemInstruction
사용할 수 있습니다.toolConfig
추가되었습니다.v1.0.3(2024년 5월 17일)
v1.0.4(2024년 5월 29일)
model.countToken
사용할 때 You do not have permission to access the File ### or it may not exist.
발생했습니다. 이 문제를 해결하기 위해 라이브러리를 수정했습니다.v1.0.5(2024년 6월 7일)
v1.0.6(2024년 6월 15일)
v1.0.7(2024년 7월 4일)
geminiWithFiles
인수의 객체에 doCountToken: true
및 exportTotalTokens: true
사용되면 총 토큰이 반환됩니다. 이 경우 반환된 값은 {returnValue: "###", totalTokens: ###}
와 같은 객체입니다.v2.0.0(2024년 8월 3일)
functions: {}
사용됩니다. 따라서 기본 함수 호출이 제거되었습니다. 현재 단계에서는 JSON 스키마와 response_mime_type
사용하여 JSON 출력을 쉽게 반환할 수 있기 때문입니다. 참조 참조models/gemini-1.5-pro-latest
에서 models/gemini-1.5-flash-latest
로 변경되었습니다.exportTotalTokens
의 내보내기 값이 변경되었습니다. v2.xx 이후에는 true인 경우 promptTokenCount
, candidatesTokenCount
, totalTokenCount
포함한 객체 usageMetadata
내보냅니다. 이때 생성된 콘텐츠와 usageMetadata
객체로 반환됩니다.v2.0.1(2024년 8월 4일)
codeExecution
사용할 수 있습니다. 참조v2.0.2(2024년 9월 26일)
generationConfig
옵션으로 response_schema
및 temperature
속성이 추가되었습니다.v2.0.3(2024년 11월 19일)
setFileIdsOrUrlsWithResumableUpload
사양을 수정했습니다. v2.0.3부터는 이 메소드를 사용할 때 초기 객체에 다음과 같이 propertiesService: PropertiesService.getScriptProperties()
포함시켜 주시기 바랍니다. 라이브러리에서 PropertiesService.getScriptProperties()
사용하면 해당 값이 라이브러리에 저장되기 때문입니다. Ref와 Ref를 만들 때 라이브러리 대신 스크립트를 복사하여 붙여넣는 방식으로 사용한다고 가정했습니다. 그래서 스크립트에 PropertiesService.getScriptProperties()
포함시켰습니다. 그러나 이것이 GeminiWithFiles와 함께 사용될 때 각 사용자는 PropertiesService.getScriptProperties()
사용해야 한다는 것을 알았습니다. 그래서 이것을 수정했습니다.resumableUploadAsNewUpload: true
설정해주세요. Ref 이를 통해 속성이 지워지고 업로드가 실행됩니다.맨 위