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 はドキュメント、スプレッドシート、スライドなどの Google ドライブ形式を直接操作することはできませんが、回避策はあります。現段階では、PDF データを Gemini API で直接処理できます。これを使用すると、これらの Google ドキュメント ファイルは PDF に変換され、Gemini API で使用されます。参照
このレポートでは、このプロセスを簡素化する「GeminiWithFiles」と呼ばれる新しい Google Apps Script ライブラリを紹介します。 GeminiWithFiles を使用すると、ユーザーは Gemini の強力な機能を使用してファイルを簡単にアップロードし、コンテンツを生成できます。また、単一の API 呼び出しで複数の画像から効率的に説明を作成できるため、以前のレポートで示したように各画像を個別に処理する場合と比べて作業負荷が大幅に軽減されます。参照
プロセスを合理化し、機能を拡張することで、GeminiWithFiles はさまざまなドメインにわたるさまざまなユースケースを約束します。このレポートは、以前のレポートを拡張したアプローチとして機能し、Gemini および非構造化データを扱う際のプロセス コストをさらに削減し、効率を向上させることを目的としています。
このライブラリは以下のレポートをもとに作成しました。
このライブラリ GeminiWithFiles を使用すると、使いやすい API を通じて、強力なドキュメント処理および管理プラットフォームである Gemini と対話できるようになります。このライブラリを使用して達成できることは次のとおりです。
ファイル管理:
コンテンツのアップロード:
チャット履歴管理:
コンテンツの生成:
出力仕様:
Gemini API によって生成された結果に必要な出力形式を指定します。
response_mime_type
と JSON スキーマを使用して、出力形式を制御します。参照
このスクリプトをテストするには、次の手順を実行してください。
https://makersuite.google.com/app/apikey にアクセスして API キーを作成してください。その際、APIコンソールでGenerative Language APIを有効にしてください。この API キーは、このサンプル スクリプトで使用されます。
こちらの公式ドキュメントもご覧いただけます。参照。
スタンドアロンの Google Apps Script プロジェクトを作成してください。もちろん、このスクリプトはコンテナーバインドされたスクリプトでも使用できます。
そして、Google Apps Scriptプロジェクトのスクリプトエディタを開いてください。
GeminiWithFiles の利用方法は 2 パターンあります。
このライブラリを 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
また、Gemini API の公式ドキュメントは https://ai.google.dev/api/rest でご覧いただけます。
メソッド | 説明 |
---|---|
setFileIds(fileIds, asImage = false) | ファイルIDを設定します。 |
setBlobs(ブロブ) | BLOB を設定します。 |
withUploadedFilesByGenerateContent(fileList = []) | generateContentメソッドを使用するためのオブジェクトを作成します。 |
アップロードファイル(n = 50) | ファイルを Gemini にアップロードします。 |
getFileList() | Gemini でファイルリストを取得します。 |
deleteFiles(名前、n = 50) | Gemini からファイルを削除します。 |
生成コンテンツ(オブジェクト) | メインメソッド。 Gemini API でコンテンツを生成します。 |
setFileIdsOrUrlsWithResumableUpload(オブジェクト) | 50 MB を超えるファイルは Gemini にアップロードできます。 |
GeminiWithFiles をライブラリとして Google Apps Script プロジェクトにインストールする場合は、次のスクリプトを使用してください。
const g = GeminiWithFiles . geminiWithFiles ( object ) ;
または
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
の 1 番目と 2 番目の引数は、それぞれ String[] (Google ドライブ上のファイル ID) とブール値です。第2引数がfalseの場合、入力されたファイルIDのファイルを生データとしてアップロードします。第2引数がtrueの場合、入力されたファイルIDのファイルを画像データに変換してアップロードします。第 2 引数のデフォルトは false です。setFileIds(fileIds, false)
のようにこのメソッドでfalse
使用できます。 BLOB を設定します。 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
の第 1 引数は 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
引数が 1 つだけあります。これは 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 " }
]
この方法では、50 MB を超えるファイルをアップロードできます。
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
エラーが発生する場合があります。ご注意ください。 このサンプルでは、複数の画像ファイルがアップロードされ、アップロードされた画像ファイルから説明が作成されます。このサンプルは、以前のレポート「Gemini Pro API と Google Apps Script を使用した 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 枚の画像の説明を 1 回の API 呼び出しで取得できます。
重要な点として、私のテストでは、画像ファイルの数が多い場合、ファイルのアップロードとコンテンツの生成でスクリプトを分離する必要がありました。また、画像ファイル数が50枚の場合も正しく記述が作成できました。ただし、50枚を超える画像の場合、エラーが発生する場合がありました。したがって、状況に応じてファイルの数を調整してください。
このサンプルでは、PDF ファイルの複数の請求書がアップロードされ、オブジェクトとして解析されます。このサンプルは、以前のレポート「Gemini 1.5 API と Google Apps Script を使用した請求書の解析」の拡張バージョンになります。
function myFunction_parseInvoices ( ) {
const apiKey = "###" ; // Please set your API key.
// Please set file IDs of PDF file of invoices on Google Drive.
const fileIds = [
"###fileID1###" ,
"###fileID2###" ,
,
,
,
] ;
const q = [
`Create an array including JSON object parsed the following images of the invoices.` ,
`The giving images are the invoices.` ,
`Return an array including JSON object.` ,
`No descriptions and explanations. Return only raw array including JSON objects without markdown. No markdown format.` ,
`The required properties in each JSON object in an array are as follows.` ,
`` ,
`[Properties in JSON object]` ,
`"name": "Name given as 'Filename'"` ,
`"invoiceTitle": "title of invoice"` ,
`"invoiceDate": "date of invoice"` ,
`"invoiceNumber": "number of the invoice"` ,
`"invoiceDestinationName": "Name of destination of invoice"` ,
`"invoiceDestinationAddress": "address of the destination of invoice"` ,
`"totalCost": "total cost of all costs"` ,
`"table": "Table of invoice. This is a 2-dimensional array. Add the first header row to the table in the 2-dimensional array."` ,
`` ,
`[Format of 2-dimensional array of "table"]` ,
`"title or description of item", "number of items", "unit cost", "total cost"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw array including JSON objects without markdown. No markdown format. No markcodn tags.` ,
] . join ( "n" ) ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
サンプル用紙として以下の用紙を使用した場合、
このサンプル請求書は、Microsoft の請求書デザイン テンプレートからのものです。
このサンプル請求書は、Microsoft の請求書デザイン テンプレートからのものです。
次の結果は 1 回の 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 ) ;
}
サンプル用紙として以下の用紙を使用した場合、
次の結果は 1 回の 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
}
2番目の質問については
{
"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 の問題トラッカーに次の将来のリクエストを提案しました。参照
Google Drive 上のファイルを、ファイル ID だけを使用して Gemini API で直接使用できるようになれば、Gemini ユーザーにとってさらに有益になると思います。これにより、データのアップロードにかかるコストも大幅に削減されます。
アップロードされたファイルにカスタム メタデータを含めることができる機能は、多数のファイルを管理する場合に非常に役立つと思います。
出力形式を制御する関数呼び出しをテストした場合、ステータスコード 500 のエラーが発生することがありましたが、 response_mime_type
をテストした場合は、そのようなエラーはほとんど発生しませんでした。これが現在の仕様なのかどうかはわかりません。
一番上の抽象的な画像は、「説明」のセクションから Gemini によって作成されました。
マサチューセッツ工科大学
棚池
寄付する
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
を設定してください。参照 これによりプロパティがクリアされ、アップロードが実行されます。トップ