تستمر واجهة برمجة تطبيقات Gemini في النمو. في 5 أغسطس 2024، قمت بتحديث GeminiWithFiles إلى حد كبير إلى الإصدار v2.xx. وبهذا التحديث الكبير، تم تغيير الإصدار من الإصدار v1 إلى الإصدار 2.
إذا كنت تريد استخدام GeminiWithFiles v1.xx، يرجى الاطلاع هنا.
هذه مكتبة Google Apps Script لـ Gemini API مع الملفات.
تعمل مكتبة Google Apps Script الجديدة المسماة GeminiWithFiles على تبسيط استخدام Gemini، وهو نموذج لغة كبير، لمعالجة البيانات غير المنظمة مثل الصور وملفات PDF. يمكن لـ GeminiWithFiles تحميل الملفات وإنشاء المحتوى وإنشاء أوصاف من صور متعددة في وقت واحد. وهذا يقلل بشكل كبير من عبء العمل ويوسع إمكانيات استخدام الجوزاء.
في الآونة الأخيرة، جلب نموذج Gemini، وهو نموذج لغة كبير من Google AI، إمكانيات جديدة لمختلف المهام من خلال تمكين استخدام البيانات غير المنظمة كبيانات منظمة. وهذا مهم بشكل خاص لأن كمية هائلة من المعلومات موجودة في تنسيقات غير منظمة مثل المستندات النصية والصور ومقاطع الفيديو.
تعمل واجهة برمجة تطبيقات Gemini 1.5، التي تم إصدارها مؤخرًا، على توسيع هذه القدرات بشكل كبير. يمكنه إنشاء محتوى بما يصل إلى مليون رمز، وهي زيادة كبيرة مقارنة بالإصدارات السابقة. بالإضافة إلى ذلك، يمكن لـ Gemini 1.5 الآن معالجة ما يصل إلى 3000 ملف صورة، وهو ما يتجاوز بشكل كبير حد Gemini 1.0 البالغ 16 صورة. المرجع
على الرغم من أن Gemini لا يمكنه العمل مباشرة مع تنسيقات Google Drive مثل المستندات وجداول البيانات والعروض التقديمية، إلا أن هناك حلول بديلة. في المرحلة الحالية، يمكن معالجة بيانات PDF مباشرة باستخدام Gemini API. باستخدام هذا، يتم تحويل ملفات Google Docs إلى PDF واستخدامها مع Gemini API. المرجع
يقدم هذا التقرير مكتبة Google Apps Script جديدة تسمى "GeminiWithFiles" والتي تعمل على تبسيط هذه العملية. يتيح برنامج GeminiWithFiles للمستخدمين إمكانية تحميل الملفات وإنشاء المحتوى بسهولة باستخدام إمكانات Gemini القوية. كما أنه يتيح إنشاء وصف فعال من صور متعددة من خلال استدعاء واجهة برمجة التطبيقات (API) واحد، مما يقلل بشكل كبير من عبء العمل مقارنة بمعالجة كل صورة على حدة كما هو موضح في تقريري السابق. المرجع
من خلال تبسيط العملية وتوسيع القدرات، يعد برنامج GeminiWithFiles بحالات استخدام متنوعة عبر مجالات مختلفة. يعد هذا التقرير بمثابة نهج موسع للتقرير السابق، ويهدف إلى تقليل تكاليف العملية بشكل أكبر وتحسين الكفاءة عند العمل مع Gemini والبيانات غير المنظمة.
لقد قمت بإنشاء هذه المكتبة بناءً على التقارير التالية.
تتيح لك مكتبة GeminiWithFiles هذه التفاعل مع Gemini، وهي منصة قوية لمعالجة المستندات وإدارتها، من خلال واجهة برمجة تطبيقات سهلة الاستخدام. إليك ما يمكنك تحقيقه باستخدام هذه المكتبة:
إدارة الملفات:
تحميل المحتوى:
إدارة سجل الدردشة:
إنشاء المحتوى:
مواصفات الإخراج:
حدد تنسيق الإخراج المطلوب للنتائج التي تم إنشاؤها بواسطة Gemini API.
باستخدام response_mime_type
ومخطط JSON، يتم التحكم في تنسيق الإخراج. المرجع
من أجل اختبار هذا البرنامج النصي، يرجى القيام بالخطوات التالية.
الرجاء الوصول إلى https://makerssuite.google.com/app/apikey وإنشاء مفتاح واجهة برمجة التطبيقات (API) الخاص بك. في ذلك الوقت، يرجى تمكين Geneative Language API في وحدة تحكم 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. لذلك، في هذا النمط، لا يطلب منك استخدامه.
تستخدم هذه المكتبة النطاقين التاليين.
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) | تعيين معرفات الملفات. |
مجموعة النقط (النقط) | تعيين النقط. |
معUploadedFilesByGenerateContent(fileList = []) | قم بإنشاء كائن لاستخدام طريقة generatorContent. |
تحميل الملفات (ن = 50) | تحميل الملفات إلى الجوزاء. |
قائمة الملف () | الحصول على قائمة الملفات في الجوزاء. |
حذف الملفات (الأسماء، ن = 50) | حذف الملفات من الجوزاء. |
إنشاء المحتوى (كائن) | الطريقة الرئيسية. إنشاء محتوى بواسطة Gemini API. |
setFileIdsOrUrlsWithResumableUpload(object) | يمكن تحميل ملف يزيد حجمه عن 50 ميجابايت إلى Gemini. |
عند تثبيت GeminiWithFiles كمكتبة لمشروع Google Apps Script، يرجى استخدام النص البرمجي التالي.
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
، يرجى إعطاء jsonSchema
لطريقة إنشاء المحتوى. في المرحلة الحالية، يمكن استخدام "application/json"
فقط response_mime_type
.
عندما تريد استخدام systemInstruction
، يرجى تأكيد الوثيقة الرسمية المرجع.
يتم استخدام Gemini 1.5 Flash Last ( models/gemini-1.5-flash-latest
) كنموذج افتراضي. عندما تريد استخدام Gemini 1.5 Pro الأحدث ( models/gemini-1.5-pro-latest
)، يرجى استخدامه مثل const g = GeminiWithFiles.geminiWithFiles({ apiKey, model: "models/gemini-1.5-pro-latest" })
.
في المرحلة الحالية، عند استخدام response_schema
، يتم استخدام response_mime_type: "application/json"
تلقائيًا.
تعيين معرفات الملفات. يتم تحميل ملفات معرفات الملفات إلى Gemini.
في هذه الحالة، يتم استخدام المزامنة/الانتظار في الوظيفة.
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 Drive) والوسيطة المنطقية، على التوالي. إذا كانت الوسيطة الثانية خاطئة، فسيتم تحميل الملفات المدخلة لمعرفات الملفات كبيانات أولية. إذا كانت الوسيطة الثانية صحيحة، فسيتم تحويل الملفات المدخلة لمعرفات الملفات إلى بيانات صورة ويتم تحميلها. الافتراضي للوسيطة الثانية غير صحيح.false
في هذه الطريقة مثل setFileIds(fileIds, false)
. تعيين النقط. يتم تحميل النقط إلى الجوزاء.
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[].قم بإنشاء كائن لاستخدام طريقة generatorContent.
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 باستخدام معرفات الملفات المدخلة أو النقط.
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 ) ;
}
الحصول على قائمة الملفات في الجوزاء.
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 ) ;
}
حذف الملفات من الجوزاء.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const names = g . getFileList ( ) . map ( ( { name } ) => name ) ;
if ( names . length == 0 ) return ;
g . deleteFiles ( names ) ;
console . log ( ` ${ names . length } files were deleted.` ) ;
}
الطريقة الرئيسية. إنشاء محتوى بواسطة Gemini API. يمكن رؤية المزيد من نماذج البرامج النصية في قسم "نماذج البرامج النصية" التالي.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is Google Apps Script?" } ) ;
console . log ( res ) ;
}
في هذا البرنامج النصي، يتم إنشاء المحتوى باستخدام استدعاء الوظيفة.
عندما تريد استخدام response_mime_type
، يرجى إعطاء jsonSchema
طريقة إنشاء المحتوى على النحو التالي. في هذه الحالة، من خلال إعطاء مخطط 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 ميجابايت.
من v2.xx، يمكن تحقيق ذلك. هذا من المرجع والمرجع.
من الإصدار 2.0.3، عند استخدام هذا الأسلوب، يرجى تضمين propertiesService: PropertiesService.getScriptProperties()
في الكائن الأولي كما يلي. لأنه عند استخدام PropertiesService.getScriptProperties()
في المكتبة، يتم وضع القيم في المكتبة. عندما قمت بإنشاء Ref و Ref، افترضت أن البرنامج النصي يستخدم عن طريق النسخ واللصق بدلاً من المكتبة. لذلك، قمت بتضمين PropertiesService.getScriptProperties()
في البرنامج النصي. لكنني لاحظت أنه عند استخدام هذا مع GeminiWithFiles، يُطلب من كل مستخدم استخدام PropertiesService.getScriptProperties()
. لذلك، قمت بتعديل هذا.
نموذج البرنامج النصي كما يلي.
function myFunction ( ) {
// This URL is from https://github.com/google/generative-ai-docs/blob/main/site/en/gemini-api/docs/prompting_with_media.ipynb
const url = "https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4" ; // 64,657,027 bytes
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties() }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIdsOrUrlsWithResumableUpload ( [ { url } ] ) . uploadFiles ( ) ;
Utilities . sleep ( 10000 ) ; // This might be required to be used because the state of the uploaded file might not be active.
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
console . log ( res ) ;
}
عند تشغيل هذا البرنامج النصي، يمكن رؤية السجل التالي في السجل.
- Get metadata
- Calculate chunks
- Get location
- Download and upload data.
- Now... 1/4
- Start downloading data with 0-16777215
- Finished downloading data with 0-16777215
- Start uploading data with 0-16777215
- Finished uploading data with 0-16777215
- Upload the next chunk.
- Now... 2/4
- Start downloading data with 16777216-33554431
- Finished downloading data with 16777216-33554431
- Start uploading data with 16777216-33554431
- Finished uploading data with 16777216-33554431
- Upload the next chunk.
- Now... 3/4
- Start downloading data with 33554432-50331647
- Finished downloading data with 33554432-50331647
- Start uploading data with 33554432-50331647
- Finished uploading data with 33554432-50331647
- Upload the next chunk.
- Now... 4/4
- Start downloading data with 50331648-64657026
- Finished downloading data with 50331648-64657026
- Start uploading data with 50331648-64657026
- Finished uploading data with 50331648-64657026
- Done.
- Now, the state of the uploaded files "url@https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4$page@1$maxPage@1" is not active. So, it will wait until it is active. Please wait for 10 seconds. Retry (1/3)
- 1 uploaded files are used with generateCotent.
- The video is a cartoon that shows a large, white rabbit in a field. The rabbit is shown waking up from a nap and then is seen eating an apple. After eating the apple, the rabbit is approached by a bird. The rabbit is scared of the bird and tries to hide from it. The bird flies away. The rabbit is seen smiling and then a squirrel flies toward the rabbit. The squirrel is startled by the rabbit and flies away. The rabbit is then seen catching another squirrel with its vine and the scene ends with a close-up of the rabbit's face.
إذا كان ملفك كبيرًا ولم تكن حالة الملف الذي تم تحميله "نشطة"، فيرجى اختبار البرنامج النصي التالي.
function myFunction ( ) {
// This URL is from https://github.com/google/generative-ai-docs/blob/main/site/en/gemini-api/docs/prompting_with_media.ipynb
const url = "https://download.blender.org/peach/bigbuckbunny_movies/BigBuckBunny_320x180.mp4" ; // 64,657,027 bytes
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties() }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIdsOrUrlsWithResumableUpload ( [ { url } ] ) . uploadFiles ( ) ;
console . log ( JSON . stringify ( fileList ) ) ;
// Please copy the value of "fileList".
}
وبهذا يمكن تحميل الملف. ويمكنك استخدام الملف الذي تم تحميله بعد أن ينتظر وقتًا كافيًا لتغيير الحالة إلى "نشط". يمكن استخدام الملف الذي تم تحميله على النحو التالي.
function myFunction ( ) {
const fileList = [ ### ] ; // This is from the above script.
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties() }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
console . log ( res ) ;
}
كخيار إضافي، عندما تريد تحميل البيانات مع التحميل القابل للاستئناف كتحميل جديد، يرجى تعيين resumableUploadAsNewUpload: true
على النحو التالي. وبهذا يتم مسح الخاصية وتشغيل التحميل.
function myFunction ( ) {
const fileList = [ ### ] ; // This is from the above script.
const apiKey = "###" ; // Please set your API key.
const q = "Description this video." ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , propertiesService : PropertiesService . getScriptProperties ( ) , resumableUploadAsNewUpload : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, propertiesService: PropertiesService.getScriptProperties(), resumableUploadAsNewUpload: true }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
console . log ( res ) ;
}
عند استخدام q
، يمكن استخدام السؤال النصي فقط لإنشاء المحتوى. عندما تريد استخدام الأجزاء المخصصة الخاصة بك، يمكنك القيام بذلك على النحو التالي.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( {
apiKey ,
response_mime_type : "application/json" ,
} ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const parts = [ { text : "What is Google Apps Script?" } ] ;
const res = g . generateContent ( { parts } ) ;
console . log ( res ) ;
}
عندما تريد استخدام استدعاء الدالة، يمكنك استخدام نموذج البرنامج النصي التالي.
function myFunction_functionCalling ( ) {
const apiKey = "###" ; // Please set your API key.
// Sample functions
const functions = {
params_ : {
getTanaike : {
description : "Get information about Tanaike. Value is a text." ,
} ,
} ,
getTanaike : (
_ // ref: https://tanaikech.github.io/about/
) =>
"As a Japanese scientist holding a Ph.D. in Physics, I am also a Google Developer Expert (GDE) in Google Workspace and a Google Cloud Champion Innovator. I am driven by a deep curiosity to explore, think creatively, and ultimately create new things. Specifically, I have a passion for crafting innovative solutions that are entirely novel, solutions that haven't yet been introduced to the world. It's in this spirit that I approach innovation. Interestingly, these new ideas often come to me during sleep, which I then strive to bring to life in the real world. Thankfully, some of these have already found practical applications." ,
} ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , functions } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : "What is Tanaike? Return answer within 50 words." } ) ;
console . log ( res ) ;
}
هذه الوظيفة النموذجية مأخوذة من هذا المنشور.
عندما تريد إرجاع البيانات الأولية من 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، يتم استخدام new GeminiWithFiles
بدلاً من GeminiWithFiles.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
}
في هذه الحالة، يتم استخدام المزامنة/الانتظار في الوظيفة.
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 Drive باستخدام Gemini Pro API مع Google Apps Script".
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
const q = [
`Create each description from each image file within 100 words in the order of given fileData.` ,
`Return the results as an array` ,
`Return only raw Array without a markdown. No markdown format.` ,
`The required properties of each element in the array are as follows` ,
`` ,
`[Properties of each element in the array]` ,
`"name": "Name of file"` ,
`"description": "Created description"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw Array without a markdown. No markdown format. No markdown tags.` ,
] . join ( "n" ) ;
const fileIds = [ ] ;
const files = DriveApp . searchFiles (
`(mimeType = 'image/png' or mimeType = 'image/jpeg') and trashed = false and ' ${ folderId } ' in parents`
) ;
while ( files . hasNext ( ) ) {
fileIds . push ( files . next ( ) . getId ( ) ) ;
}
if ( fileIds . length == 0 ) return ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, doCountToken: true, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
عند تشغيل هذا البرنامج النصي، يتم الحصول على النتيجة التالية. في هذه الحالة، قيمة name
هي معرف الملف.
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
عند استخدام 20 عينة من الصور التي تم إنشاؤها بواسطة الجوزاء، يتم الحصول على النتيجة التالية.
عند تشغيل هذا البرنامج النصي، يتم تحميل 20 صورة ويمكن الحصول على أوصاف الصور العشرين التي تم تحميلها من خلال استدعاء واجهة برمجة التطبيقات (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.
تم الحصول على النتيجة التالية من خلال استدعاء 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. "
}
]
في المرحلة الحالية، يمكن استخدام "application/json"
فقط response_mime_type
.
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 وإنشاء محتوى باستخدام ملف الفيديو الذي تم تحميله.
كنقطة مهمة، في المرحلة الحالية، الحد الأقصى لحجم التحميل باستخدام UrlFetchApp لـ Google Apps Script هو 50 ميغابايت. المرجع لذلك، عند تحميل ملف الفيديو، يرجى استخدام حجم الملف أقل من 50 ميغابايت. يرجى توخي الحذر بشأن هذا.
بدءًا من الإصدار 1.0.7، عند استخدام doCountToken: true
و exportTotalTokens: true
في كائن وسيطة geminiWithFiles
، يتم إرجاع إجمالي الرموز المميزة. في هذه الحالة، القيمة التي تم إرجاعها هي كائن مثل {returnValue: "###", totalTokens: ###}
. نموذج البرنامج النصي كما يلي.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , exportTotalTokens : true } ) ;
const res = g . generateContent ( { q : "What is Gemini?" } ) ;
console . log ( res ) ;
}
عند تشغيل هذا البرنامج النصي، يتم إرجاع النتيجة التالية.
{
"returnValue" : " " Gemini " can refer to several things, so please provide me with more context. For example, are you asking about: nn * **Gemini (constellation):** A constellation in the Northern Hemisphere, known for its distinctive twin stars, Castor and Pollux. n * **Gemini (astrological sign):** The third sign of the Zodiac, associated with those born between May 21st and June 20th. n * **Gemini (programming language):** A procedural programming language created by Niklaus Wirth, known for its simplicity and emphasis on structured programming. n * **Gemini (Google AI model):** A large language model developed by Google, known for its advanced conversational abilities and ability to generate different creative text formats. n * **Gemini (NASA mission):** A crewed spaceflight mission to the Moon, planned for 2024. nn Once you tell me what kind of Gemini you're interested in, I can give you a more specific answer! " ,
"usageMetadata" :{
"promptTokenCount" : 5 ,
"candidatesTokenCount" : 200 ,
"totalTokenCount" : 205
}
}
من v2.xx، يمكن تحقيق ذلك. هذا من المرجع والمرجع.
يمكن رؤية نموذج البرنامج النصي هنا.
هذه المطالبة من هذه الوثيقة الرسمية.
من أجل استخدام codeExecution، يرجى استخدام tools: [{ codeExecution: {} }]
و exportRawData: true
في طريقة geminiWithFiles
كما يلي.
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , tools : [ { codeExecution : { } } ] , exportRawData : true } ) ;
// const g = new GeminiWithFiles({ apiKey, tools: [{ codeExecution: {} }], exportRawData: true }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : 'What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50.' } ) ;
console . log ( res . candidates [ 0 ] . content . parts ) ;
}
عند تشغيل هذا البرنامج النصي، يتم الحصول على النتيجة التالية.
[
{
"text" : " I will generate Python code to calculate the sum of the first 50 prime numbers. nn "
},
{
"executableCode" :{
"language" : " PYTHON " ,
"code" : " n def is_prime(num): n """n Checks if a number is prime. n """n if num <= 1: n return False n for i in range(2, int(num**0.5) + 1): n if num % i == 0: n return False n return True nn primes = [] n n = 2 n while len(primes) < 50: n if is_prime(n): n primes.append(n) n n += 1 nn print(f \ 'The first 50 prime numbers are: {primes} \ ') n print(f \ 'The sum of the first 50 prime numbers is: {sum(primes)} \ ') n "
}
},
{
"codeExecutionResult" :{
"outcome" : " OUTCOME_OK " ,
"output" : " The first 50 prime numbers are: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229] n The sum of the first 50 prime numbers is: 5117 n "
}
},
{
"text" : " The code first defines a function `is_prime(num)` to check if a number is prime. The function iterates through all numbers from 2 to the square root of the given number. If any of these numbers divide the given number, then the number is not prime. Otherwise, the number is prime. nn Then, the code initializes an empty list called `primes` to store the prime numbers. It also initializes a variable `n` to 2, which is the first prime number. nn The code then enters a `while` loop that continues until 50 prime numbers are found. Inside the loop, the code checks if the current number `n` is prime using the `is_prime` function. If it is, the number is appended to the `primes` list. nn After the loop, the code prints the list of prime numbers and the sum of the prime numbers. nn The output shows that the sum of the first 50 prime numbers is 5117. "
}
]
image/png,image/jpeg,image/webp,image/heic,image/heif
audio/wav,audio/mp3,audio/aiff,audio/aac,audio/ogg,audio/flac
Exceeded maximum execution time
. يرجى توخي الحذر بشأن هذا.لقد اقترحت بالفعل الطلبات المستقبلية التالية على أداة تعقب المشكلات في Google. المرجع
أعتقد أنه سيكون أكثر فائدة لمستخدمي Gemini إذا كان من الممكن استخدام الملفات الموجودة على Google Drive مباشرة بواسطة Gemini API باستخدام معرفات الملفات الخاصة بهم فقط. وهذا من شأنه أيضًا أن يقلل بشكل كبير من تكلفة تحميل البيانات.
أعتقد أن القدرة على تضمين بيانات التعريف المخصصة مع الملفات التي تم تحميلها ستكون مفيدة جدًا لإدارة أعداد كبيرة من الملفات.
عندما اختبرت وظيفة الاستدعاء للتحكم في تنسيق الإخراج، تلقيت أحيانًا خطأ في رمز الحالة 500. ولكن عندما اختبرت response_mime_type
، نادرًا ما يحدث مثل هذا الخطأ. لست متأكدا ما إذا كانت هذه هي المواصفات الحالية.
تم إنشاء الصورة المجردة العليا بواسطة Gemini من قسم "الوصف".
معهد ماساتشوستس للتكنولوجيا
تانيكي
يتبرع
الإصدار 1.0.0 (26 أبريل 2024)
الإصدار 1.0.1 (2 مايو 2024)
response_mime_type
للتحكم في تنسيق الإخراج. المرجعالإصدار 1.0.2 (7 مايو 2024)
parts
. من هذا الإصدار، يمكنك تحديد واحد من q
و jsonSchema
و parts
.systemInstruction
.toolConfig
إلى نص الطلب.الإصدار 1.0.3 (17 مايو 2024)
الإصدار 1.0.4 (29 مايو 2024)
model.countToken
مع الملفات التي تم تحميلها، تأكدت من وجود خطأ مثل You do not have permission to access the File ### or it may not exist.
حصل. من أجل التعامل مع هذه المشكلة، قمت بتعديل المكتبة.الإصدار 1.0.5 (7 يونيو 2024)
الإصدار 1.0.6 (15 يونيو 2024)
الإصدار 1.0.7 (4 يوليو 2024)
doCountToken: true
و exportTotalTokens: true
في كائن وسيطة geminiWithFiles
، يتم إرجاع إجمالي الرموز المميزة. في هذه الحالة، القيمة التي تم إرجاعها هي كائن مثل {returnValue: "###", totalTokens: ###}
.الإصدار 2.0.0 (3 أغسطس 2024)
functions: {}
. لذلك، تمت إزالة استدعاء الوظيفة الافتراضية. لأنه في المرحلة الحالية، يمكن إرجاع مخرجات JSON بسهولة باستخدام مخطط JSON و response_mime_type
. المرجع المرجعmodels/gemini-1.5-pro-latest
إلى models/gemini-1.5-flash-latest
.exportTotalTokens
. بعد الإصدار v2.xx، عندما يكون هذا صحيحًا، يتم تصدير usageMetadata
الكائن بما في ذلك promptTokenCount
و candidatesTokenCount
و totalTokenCount
. في ذلك الوقت، يتم إرجاع المحتوى الذي تم إنشاؤه وبيانات usageMetadata
ككائن.الإصدار 2.0.1 (4 أغسطس 2024)
codeExecution
. المرجعالإصدار 2.0.2 (26 سبتمبر 2024)
generationConfig
، تمت إضافة خصائص response_schema
ودرجة temperature
.الإصدار 2.0.3 (19 نوفمبر 2024)
setFileIdsOrUrlsWithResumableUpload
. من الإصدار 2.0.3، عند استخدام هذا الأسلوب، يرجى تضمين propertiesService: PropertiesService.getScriptProperties()
في الكائن الأولي كما يلي. لأنه عند استخدام PropertiesService.getScriptProperties()
في المكتبة، يتم وضع القيم في المكتبة. عندما قمت بإنشاء Ref وRef، افترضت أن البرنامج النصي يستخدم عن طريق النسخ واللصق بدلاً من المكتبة. لذلك، قمت بتضمين PropertiesService.getScriptProperties()
في البرنامج النصي. لكنني لاحظت أنه عند استخدام هذا مع GeminiWithFiles، يُطلب من كل مستخدم استخدام PropertiesService.getScriptProperties()
. لذلك، قمت بتعديل هذا.resumableUploadAsNewUpload: true
. المرجع بهذا، يتم مسح الخاصية وتشغيل التحميل.قمة