Gemini API ยังคงเติบโตอย่างต่อเนื่อง ในวันที่ 5 สิงหาคม 2024 ฉันได้อัปเดต GeminiWithFiles เป็น v2.xx เป็นส่วนใหญ่ ด้วยการอัปเดตครั้งใหญ่นี้ เวอร์ชันจะเปลี่ยนจาก v1 เป็น v2
หากคุณต้องการใช้ GeminiWithFiles v1.xx โปรดดูที่นี่
นี่คือไลบรารี Google Apps Script สำหรับ Gemini API พร้อมไฟล์
ไลบรารี Google Apps Script ใหม่ชื่อ GeminiWithFiles ช่วยให้การใช้ Gemini ซึ่งเป็นโมเดลภาษาขนาดใหญ่ง่ายขึ้น เพื่อประมวลผลข้อมูลที่ไม่มีโครงสร้าง เช่น รูปภาพและ PDF GeminiWithFiles สามารถอัปโหลดไฟล์ สร้างเนื้อหา และสร้างคำอธิบายจากหลายภาพได้ในคราวเดียว สิ่งนี้จะช่วยลดภาระงานลงอย่างมากและเพิ่มความเป็นไปได้ในการใช้ Gemini
เมื่อเร็วๆ นี้ Gemini ซึ่งเป็นโมเดลภาษาขนาดใหญ่จาก Google AI ได้นำความเป็นไปได้ใหม่ๆ มาสู่งานต่างๆ โดยเปิดใช้งานการใช้ข้อมูลที่ไม่มีโครงสร้างเป็นข้อมูลที่มีโครงสร้าง สิ่งนี้มีความสำคัญอย่างยิ่งเนื่องจากมีข้อมูลจำนวนมหาศาลอยู่ในรูปแบบที่ไม่มีโครงสร้าง เช่น เอกสารข้อความ รูปภาพ และวิดีโอ
Gemini 1.5 API ซึ่งเปิดตัวเมื่อเร็วๆ นี้ ได้ขยายขีดความสามารถเหล่านี้อย่างมาก สามารถสร้างเนื้อหาได้มากถึง 1 ล้านโทเค็น ซึ่งเพิ่มขึ้นอย่างมากเมื่อเทียบกับเวอร์ชันก่อนหน้า นอกจากนี้ Gemini 1.5 ยังสามารถประมวลผลไฟล์รูปภาพได้มากถึง 3,000 ไฟล์ ซึ่งเกินขีดจำกัด 16 รูปภาพของ Gemini 1.0 อย่างมากมาย อ้างอิง
แม้ว่า Gemini จะไม่สามารถทำงานกับรูปแบบ Google ไดรฟ์ เช่น เอกสาร ชีต และสไลด์ได้โดยตรง แต่ก็มีวิธีแก้ไขชั่วคราว ในระยะปัจจุบัน ข้อมูล PDF สามารถประมวลผลได้โดยตรงด้วย Gemini API เมื่อใช้สิ่งนี้ ไฟล์ Google Docs เหล่านั้นจะถูกแปลงเป็น PDF และใช้กับ Gemini API อ้างอิง
รายงานนี้จะแนะนำไลบรารี Google Apps Script ใหม่ที่เรียกว่า "GeminiWithFiles" ซึ่งช่วยให้กระบวนการนี้ง่ายขึ้น GeminiWithFiles ช่วยให้ผู้ใช้สามารถอัพโหลดไฟล์และสร้างเนื้อหาได้อย่างง่ายดายโดยใช้ความสามารถอันทรงพลังของ Gemini นอกจากนี้ยังช่วยให้สร้างคำอธิบายที่มีประสิทธิภาพจากรูปภาพหลายรูปด้วยการเรียก API เพียงครั้งเดียว ซึ่งช่วยลดภาระงานได้อย่างมากเมื่อเทียบกับการประมวลผลแต่ละรูปภาพแยกกันดังที่แสดงในรายงานก่อนหน้าของฉัน อ้างอิง
ด้วยการปรับปรุงประสิทธิภาพกระบวนการและขยายขีดความสามารถ GeminiWithFiles ถือเป็นคำมั่นสัญญาสำหรับกรณีการใช้งานที่หลากหลายในโดเมนที่แตกต่างกัน รายงานนี้ทำหน้าที่เป็นแนวทางเพิ่มเติมจากฉบับก่อนหน้า โดยมีเป้าหมายเพื่อลดต้นทุนกระบวนการและปรับปรุงประสิทธิภาพเมื่อทำงานกับ Gemini และข้อมูลที่ไม่มีโครงสร้าง
ฉันสร้างไลบรารีนี้ตามรายงานต่อไปนี้
ไลบรารี GeminiWithFiles นี้ช่วยให้คุณสามารถโต้ตอบกับ Gemini ซึ่งเป็นแพลตฟอร์มการประมวลผลและการจัดการเอกสารอันทรงพลังผ่าน API ที่ใช้งานง่าย นี่คือสิ่งที่คุณสามารถทำได้ด้วยไลบรารีนี้:
การจัดการไฟล์:
การอัปโหลดเนื้อหา:
การจัดการประวัติการแชท:
การสร้างเนื้อหา:
ข้อกำหนดเอาท์พุท:
ระบุรูปแบบเอาต์พุตที่ต้องการสำหรับผลลัพธ์ที่สร้างโดย Gemini API
การใช้ response_mime_type
และสคีมา JSON รูปแบบเอาต์พุตจะถูกควบคุม อ้างอิง
เพื่อทดสอบสคริปต์นี้ โปรดทำตามขั้นตอนต่อไปนี้
โปรดเข้าถึง https://makersuite.google.com/app/apikey และสร้างคีย์ API ของคุณ ในเวลานั้น โปรดเปิดใช้งาน Generative Language API ที่คอนโซล 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 และโปรดเพิ่มขอบเขตต่อไปนี้
https://www.googleapis.com/auth/generative-language
นอกจากนี้ คุณสามารถดูเอกสารอย่างเป็นทางการของ Gemini API ได้ที่ https://ai.google.dev/api/rest
วิธีการ | คำอธิบาย |
---|---|
setFileIds (fileIds, asImage = false) | ตั้งค่า ID ไฟล์ |
setBlobs(หยด) | ตั้งหยด |
withUploadedFilesByGenerateContent (รายการไฟล์ = []) | สร้างอ็อบเจ็กต์สำหรับการใช้เมธอด createContent |
อัพโหลดไฟล์ (n = 50) | อัปโหลดไฟล์ไปยังราศีเมถุน |
getFileList() | รับรายชื่อไฟล์ในราศีเมถุน |
ลบไฟล์(ชื่อ, n = 50) | ลบไฟล์ออกจากราศีเมถุน |
สร้างเนื้อหา (วัตถุ) | วิธีการหลัก. สร้างเนื้อหาโดย Gemini API |
setFileIdsOrUrlsWithResumableUpload (วัตถุ) | ไฟล์ที่มีขนาดเกิน 50 MB สามารถอัปโหลดไปยัง 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
เพื่อสร้างเมธอด Content ในขั้นตอนปัจจุบัน เฉพาะ "application/json"
เท่านั้นที่สามารถใช้เพื่อ response_mime_type
เมื่อคุณต้องการใช้ 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 ไฟล์ ไฟล์รหัสไฟล์จะถูกอัปโหลดไปยังราศีเมถุน
ในกรณีนี้ จะใช้ async/await ในฟังก์ชัน
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
let fileIds = [ ] ;
const files = DriveApp . getFolderById ( folderId ) . getFiles ( ) ;
while ( files . hasNext ( ) ) {
const file = files . next ( ) ;
fileIds . push ( file . getId ( ) ) ;
}
const g = GeminiWithFiles . geminiWithFiles ( { apiKey } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setFileIds ( fileIds , false ) . uploadFiles ( ) ;
console . log ( res ) ;
}
setFileIds
คือ String[] (รหัสไฟล์บน Google Drive) และบูลีน ตามลำดับ หากอาร์กิวเมนต์ที่ 2 เป็นเท็จ ไฟล์ที่ป้อนของรหัสไฟล์จะถูกอัปโหลดเป็นข้อมูลดิบ หากอาร์กิวเมนต์ที่ 2 เป็นจริง ไฟล์ที่ป้อนของ ID ไฟล์จะถูกแปลงเป็นข้อมูลรูปภาพและจะถูกอัปโหลด ค่าเริ่มต้นของอาร์กิวเมนต์ที่ 2 เป็นเท็จfalse
ในวิธีนี้ได้ เช่น setFileIds(fileIds, false)
ตั้งหยด Blobs ถูกอัปโหลดไปยังราศีเมถุน
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[]สร้างอ็อบเจ็กต์สำหรับการใช้เมธอด createContent
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 คุณสามารถดูค่าจริงได้หลังจากที่คุณอัปโหลดไฟล์อัปโหลดไฟล์ไปยังราศีเมถุน ไฟล์จะถูกอัปโหลดไปยังราศีเมถุนโดยใช้ ID ไฟล์ที่ป้อนหรือ blobs
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
สร้างเมธอด Content ดังนี้ ในกรณีนี้ ด้วยการให้เฉพาะสคีมา 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
จากเวอร์ชัน 2.0.3 เมื่อคุณใช้เมธอดนี้ โปรดรวม propertiesService: PropertiesService.getScriptProperties()
ลงในอ็อบเจ็กต์เริ่มต้นดังต่อไปนี้ เนื่องจากเมื่อใช้ PropertiesService.getScriptProperties()
ในไลบรารี ค่าต่างๆ จะถูกใส่ลงในไลบรารี เมื่อฉันสร้าง Ref and 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 ในการสร้าง Constructor จะใช้ GeminiWithFiles.geminiWithFiles
เมื่อสคริปต์นี้ถูกใช้โดยการคัดลอกและวางโดยตรงในโครงการสคริปต์ Google Apps ของคุณ 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
}
ในกรณีนี้ จะใช้ async/await ในฟังก์ชัน
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
let fileIds = [ ] ;
const files = DriveApp . getFolderById ( folderId ) . getFiles ( ) ;
while ( files . hasNext ( ) ) {
const file = files . next ( ) ;
fileIds . push ( file . getId ( ) ) ;
}
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . setFileIds ( fileIds , false ) . uploadFiles ( ) ;
console . log ( res ) ;
}
Exceeded maximum execution time
ขึ้นในบางครั้ง โปรดใช้ความระมัดระวังเกี่ยวกับเรื่องนี้ ในตัวอย่างนี้ มีการอัปโหลดไฟล์รูปภาพหลายไฟล์ และสร้างคำอธิบายจากไฟล์รูปภาพที่อัปโหลด ตัวอย่างนี้จะเป็นเวอร์ชันขยายของรายงานก่อนหน้าของฉัน "การสร้างคำอธิบายไฟล์บน Google ไดรฟ์โดยอัตโนมัติโดยใช้ Gemini Pro API พร้อมสคริปต์ Google Apps"
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const folderId = "###" ; // Please set your folder ID including images.
const q = [
`Create each description from each image file within 100 words in the order of given fileData.` ,
`Return the results as an array` ,
`Return only raw Array without a markdown. No markdown format.` ,
`The required properties of each element in the array are as follows` ,
`` ,
`[Properties of each element in the array]` ,
`"name": "Name of file"` ,
`"description": "Created description"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw Array without a markdown. No markdown format. No markdown tags.` ,
] . join ( "n" ) ;
const fileIds = [ ] ;
const files = DriveApp . searchFiles (
`(mimeType = 'image/png' or mimeType = 'image/jpeg') and trashed = false and ' ${ folderId } ' in parents`
) ;
while ( files . hasNext ( ) ) {
fileIds . push ( files . next ( ) . getId ( ) ) ;
}
if ( fileIds . length == 0 ) return ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey, doCountToken: true, response_mime_type: "application/json" }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
เมื่อรันสคริปต์นี้ จะได้ผลลัพธ์ดังต่อไปนี้ ในกรณีนี้ ค่าของ name
คือรหัสไฟล์
[
{
"name" : " ### " ,
"description" : " ### "
},
,
,
,
]
เมื่อใช้ภาพตัวอย่าง 20 ภาพที่สร้างโดย Gemini จะได้ผลลัพธ์ดังต่อไปนี้
เมื่อเรียกใช้สคริปต์นี้ ระบบจะอัปโหลดรูปภาพ 20 รูปและสามารถรับคำอธิบายของรูปภาพ 20 รูปที่อัปโหลดได้ด้วยการเรียก API เพียงครั้งเดียว
จุดสำคัญในการทดสอบของฉัน เมื่อไฟล์รูปภาพมีจำนวนมาก จำเป็นต้องแยกสคริปต์ระหว่างการอัปโหลดไฟล์และการสร้างเนื้อหา นอกจากนี้ในกรณีของไฟล์ภาพ 50 ไฟล์ สามารถสร้างคำอธิบายได้อย่างถูกต้อง แต่กรณีเกิน 50 ภาพ มีกรณีเกิดข้อผิดพลาด ดังนั้นโปรดปรับจำนวนไฟล์ให้เหมาะกับสถานการณ์ของคุณ
ในตัวอย่างนี้ มีการอัปโหลดใบแจ้งหนี้ของไฟล์ PDF หลายใบและแยกวิเคราะห์เป็นออบเจ็กต์ ตัวอย่างนี้จะเป็นเวอร์ชันขยายของรายงานก่อนหน้าของฉัน "การแยกวิเคราะห์ใบแจ้งหนี้โดยใช้ Gemini 1.5 API พร้อมสคริปต์ Google Apps"
function myFunction_parseInvoices ( ) {
const apiKey = "###" ; // Please set your API key.
// Please set file IDs of PDF file of invoices on Google Drive.
const fileIds = [
"###fileID1###" ,
"###fileID2###" ,
,
,
,
] ;
const q = [
`Create an array including JSON object parsed the following images of the invoices.` ,
`The giving images are the invoices.` ,
`Return an array including JSON object.` ,
`No descriptions and explanations. Return only raw array including JSON objects without markdown. No markdown format.` ,
`The required properties in each JSON object in an array are as follows.` ,
`` ,
`[Properties in JSON object]` ,
`"name": "Name given as 'Filename'"` ,
`"invoiceTitle": "title of invoice"` ,
`"invoiceDate": "date of invoice"` ,
`"invoiceNumber": "number of the invoice"` ,
`"invoiceDestinationName": "Name of destination of invoice"` ,
`"invoiceDestinationAddress": "address of the destination of invoice"` ,
`"totalCost": "total cost of all costs"` ,
`"table": "Table of invoice. This is a 2-dimensional array. Add the first header row to the table in the 2-dimensional array."` ,
`` ,
`[Format of 2-dimensional array of "table"]` ,
`"title or description of item", "number of items", "unit cost", "total cost"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw array including JSON objects without markdown. No markdown format. No markcodn tags.` ,
] . join ( "n" ) ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true , response_mime_type : "application/json" } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g . withUploadedFilesByGenerateContent ( fileList ) . generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
ตามตัวอย่างเอกสาร เมื่อใช้เอกสารดังต่อไปนี้
ใบแจ้งหนี้ตัวอย่างนี้มาจากเทมเพลตการออกแบบใบแจ้งหนี้ของ Microsoft
ใบแจ้งหนี้ตัวอย่างนี้มาจากเทมเพลตการออกแบบใบแจ้งหนี้ของ Microsoft
ผลลัพธ์ต่อไปนี้ได้มาจากการเรียก API หนึ่งครั้ง พบว่าใบแจ้งหนี้ที่อัปโหลดของข้อมูล PDF สามารถแยกวิเคราะห์ได้อย่างถูกต้อง
[
{
"name" : " ###fileID1### " ,
"invoiceDate" : " 4/1/2024 " ,
"totalCost" : " $192.50 " ,
"invoiceNumber" : " 100 " ,
"invoiceDestinationAddress" : " The Palm Tree Nursery \ n987 6th Ave \ nSanta Fe, NM 11121 " ,
"invoiceTitle" : " Invoice " ,
"invoiceDestinationName" : " Maria Sullivan " ,
"table" : [
[
" Salesperson " ,
" Job " ,
" Sales " ,
" Description " ,
" Unit Price " ,
" Line Total "
],
[ " Sonu Jain " , " " , " 20.00 " , " Areca palm " , " $2.50 " , " $50.00 " ],
[ " " , " " , " 35.00 " , " Majesty palm " , " $3.00 " , " $105.00 " ],
[ " " , " " , " 15.00 " , " Bismarck palm " , " $2.50 " , " $37.50 " ]
]
},
{
"name" : " ###fileID2### " ,
"invoiceDate" : " 4/5, 2024 " ,
"invoiceTitle" : " INVOICE " ,
"invoiceDestinationAddress" : " Downtown Pets \ n132 South Street \ nManhattan, NY 15161 " ,
"totalCost" : " $4350 " ,
"table" : [
[ " DESCRIPTION " , " HOURS " , " RATE " , " AMOUNT " ],
[ " Pour cement foundation " , " 4.00 " , " $150.00 " , " $600 " ],
[ " Framing and drywall " , " 16.00 " , " $180.00 " , " $2880 " ],
[ " Tiling and flooring install " , " 9.00 " , " $150.00 " , " $1350 " ]
],
"invoiceDestinationName" : " Nazar Neill " ,
"invoiceNumber" : " 4/5 "
}
]
ในตัวอย่างนี้ มีการอัปโหลดเอกสารข้อมูล PDF หลายฉบับ และข้อความสรุปสำหรับเอกสารแต่ละฉบับจะถูกส่งออก
function myFunction_parsePapers ( ) {
const apiKey = "###" ; // Please set your API key.
// Please set file IDs of the papers of PDF files.
const fileIds = [ "###fileID1###" , "###fileID2###" ] ;
const q = [
`Summary the following manuscripts within 500 words.` ,
`Return the results as an array` ,
`Return only raw Array without a markdown. No markdown format.` ,
`The required properties of each element in the array are as follows` ,
`` ,
`[Properties of each element in the array]` ,
`"name": "Name given as 'Filename'"` ,
`"title": "Title of manuscript` ,
`"summary": "Created description"` ,
`` ,
`If the requirement information is not found, set "no value".` ,
`Return only raw Array without a markdown. No markdown format. No markdown tags.` ,
] . join ( "n" ) ;
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , doCountToken : true } ) ; // This is for installing GeminiWithFiles as a library.
// const g = new GeminiWithFiles({ apiKey }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const fileList = g . setFileIds ( fileIds ) . uploadFiles ( ) ;
const res = g
. withUploadedFilesByGenerateContent ( fileList )
. generateContent ( { q } ) ;
// g.deleteFiles(fileList.map(({ name }) => name)); // If you want to delete the uploaded files, please use this.
console . log ( res ) ;
}
ตามตัวอย่างเอกสาร เมื่อใช้เอกสารต่อไปนี้
ผลลัพธ์ต่อไปนี้ได้มาจากการเรียก API หนึ่งครั้ง พบว่าเอกสารที่อัปโหลดซึ่งแปลงจากข้อมูล PDF เป็นข้อมูลรูปภาพสามารถประมวลผลได้
[
{
"name" : " ###fileID1### " ,
"title" : " The Particle Problem in the General Theory of Relativity " ,
"summary" : " This paper investigates the possibility of a singularity-free solution to the field equations in general relativity. The authors propose a new theoretical approach that eliminates singularities by introducing a new variable into the equations. They explore the implications of this approach for the understanding of particles, suggesting that particles can be represented as " bridges " connecting different sheets of spacetime. "
},
{
"name" : " ###fileID2### " ,
"title" : " Attention Is All You Need " ,
"summary" : " This paper proposes a novel neural network architecture called the Transformer, which relies entirely on an attention mechanism to draw global dependencies between input and output sequences. The Transformer model achieves state-of-the-art results on machine translation tasks and offers significant advantages in terms of parallelization and computational efficiency compared to recurrent neural networks. "
}
]
ในขั้นตอนปัจจุบัน เฉพาะ "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 เท่านั้น ผลลัพธ์จะเป็นดังนี้
สำหรับคำถามที่ 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 และสร้างเนื้อหาด้วยไฟล์วิดีโอที่อัปโหลด
สิ่งสำคัญคือ ในระยะปัจจุบัน ขนาดการอัปโหลดสูงสุดด้วย UrlFetchApp ของ Google Apps Script คือ 50 MB Ref ดังนั้น เมื่อคุณอัปโหลดไฟล์วิดีโอ โปรดใช้ขนาดไฟล์น้อยกว่า 50 MB โปรดใช้ความระมัดระวังเกี่ยวกับเรื่องนี้
จากเวอร์ชัน 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 สามารถทำได้ นี่มาจาก Ref และ Ref
สามารถดูสคริปต์ตัวอย่างได้ที่นี่
ข้อความแจ้งนี้มาจากเอกสารอย่างเป็นทางการนี้
ในการใช้ codeExecution โปรดใช้ tools: [{ codeExecution: {} }]
และ exportRawData: true
ในเมธอด geminiWithFiles
ดังต่อไปนี้
function myFunction ( ) {
const apiKey = "###" ; // Please set your API key.
const g = GeminiWithFiles . geminiWithFiles ( { apiKey , tools : [ { codeExecution : { } } ] , exportRawData : true } ) ;
// const g = new GeminiWithFiles({ apiKey, tools: [{ codeExecution: {} }], exportRawData: true }); // This is for directly copying and pasting Class GeminiWithFiles into your Google Apps Script project.
const res = g . generateContent ( { q : 'What is the sum of the first 50 prime numbers? Generate and run code for the calculation, and make sure you get all 50.' } ) ;
console . log ( res . candidates [ 0 ] . content . parts ) ;
}
เมื่อรันสคริปต์นี้ จะได้ผลลัพธ์ดังต่อไปนี้
[
{
"text" : " I will generate Python code to calculate the sum of the first 50 prime numbers. nn "
},
{
"executableCode" :{
"language" : " PYTHON " ,
"code" : " n def is_prime(num): n """n Checks if a number is prime. n """n if num <= 1: n return False n for i in range(2, int(num**0.5) + 1): n if num % i == 0: n return False n return True nn primes = [] n n = 2 n while len(primes) < 50: n if is_prime(n): n primes.append(n) n n += 1 nn print(f \ 'The first 50 prime numbers are: {primes} \ ') n print(f \ 'The sum of the first 50 prime numbers is: {sum(primes)} \ ') n "
}
},
{
"codeExecutionResult" :{
"outcome" : " OUTCOME_OK " ,
"output" : " The first 50 prime numbers are: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229] n The sum of the first 50 prime numbers is: 5117 n "
}
},
{
"text" : " The code first defines a function `is_prime(num)` to check if a number is prime. The function iterates through all numbers from 2 to the square root of the given number. If any of these numbers divide the given number, then the number is not prime. Otherwise, the number is prime. nn Then, the code initializes an empty list called `primes` to store the prime numbers. It also initializes a variable `n` to 2, which is the first prime number. nn The code then enters a `while` loop that continues until 50 prime numbers are found. Inside the loop, the code checks if the current number `n` is prime using the `is_prime` function. If it is, the number is appended to the `primes` list. nn After the loop, the code prints the list of prime numbers and the sum of the prime numbers. nn The output shows that the sum of the first 50 prime numbers is 5117. "
}
]
image/png,image/jpeg,image/webp,image/heic,image/heif
audio/wav,audio/mp3,audio/aiff,audio/aac,audio/ogg,audio/flac
Exceeded maximum execution time
ขึ้นในบางครั้ง โปรดใช้ความระมัดระวังเกี่ยวกับเรื่องนี้ฉันได้เสนอคำขอในอนาคตต่อไปนี้ไปยังเครื่องมือติดตามปัญหาของ Google แล้ว อ้างอิง
ฉันคิดว่ามันจะเป็นประโยชน์มากขึ้นสำหรับผู้ใช้ Gemini หากไฟล์บน Google Drive สามารถใช้โดยตรงโดย Gemini API โดยใช้เพียง ID ไฟล์ของพวกเขา นอกจากนี้ยังช่วยลดต้นทุนในการอัพโหลดข้อมูลได้อย่างมาก
ฉันคิดว่าความสามารถในการรวมข้อมูลเมตาที่กำหนดเองเข้ากับไฟล์ที่อัปโหลดจะมีประโยชน์มากในการจัดการไฟล์จำนวนมาก
เมื่อฉันทดสอบฟังก์ชันที่เรียกใช้การควบคุมรูปแบบเอาต์พุต บางครั้งฉันได้รับข้อผิดพลาดของรหัสสถานะ 500 แต่เมื่อฉันทดสอบ response_mime_type
ก็ไม่ค่อยเกิดข้อผิดพลาดดังกล่าว ฉันไม่แน่ใจว่านี่เป็นข้อกำหนดปัจจุบันหรือไม่
ภาพนามธรรมด้านบนสร้างโดย Gemini จากส่วนของ "คำอธิบาย"
เอ็มไอที
ทานาอิเก
บริจาค
เวอร์ชัน 1.0.0 (26 เมษายน 2567)
เวอร์ชัน 1.0.1 (2 พฤษภาคม 2567)
response_mime_type
เพื่อควบคุมรูปแบบเอาต์พุตได้ อ้างอิงเวอร์ชัน 1.0.2 (7 พฤษภาคม 2567)
parts
จากเวอร์ชันนี้ คุณสามารถเลือกหนึ่งใน q
, jsonSchema
และ parts
systemInstruction
ได้toolConfig
ได้ถูกเพิ่มเข้าไปในเนื้อหาคำขอเวอร์ชัน 1.0.3 (17 พฤษภาคม 2567)
เวอร์ชัน 1.0.4 (29 พฤษภาคม 2567)
model.countToken
กับไฟล์ที่อัปโหลด ฉันยืนยันว่ามีข้อผิดพลาดเช่น You do not have permission to access the File ### or it may not exist.
ที่เกิดขึ้น. เพื่อจัดการกับปัญหานี้ ฉันจึงแก้ไขไลบรารีเวอร์ชัน 1.0.5 (7 มิถุนายน 2567)
เวอร์ชัน 1.0.6 (15 มิถุนายน 2567)
เวอร์ชัน 1.0.7 (4 กรกฎาคม 2567)
doCountToken: true
และ exportTotalTokens: true
ในอ็อบเจ็กต์ของอาร์กิวเมนต์ของ geminiWithFiles
โทเค็นทั้งหมดจะถูกส่งกลับ ในกรณีนี้ ค่าที่ส่งคืนจะเป็นออบเจ็กต์เช่น {returnValue: "###", totalTokens: ###}
เวอร์ชัน 2.0.0 (3 สิงหาคม 2567)
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 สิงหาคม 2567)
codeExecution
ได้ อ้างอิงเวอร์ชัน 2.0.2 (26 กันยายน 2024)
generationConfig
คุณสมบัติ response_schema
และ temperature
จึงถูกเพิ่มเข้าไปเวอร์ชัน 2.0.3 (19 พฤศจิกายน 2567)
setFileIdsOrUrlsWithResumableUpload
จากเวอร์ชัน 2.0.3 เมื่อคุณใช้เมธอดนี้ โปรดรวม propertiesService: PropertiesService.getScriptProperties()
ลงในอ็อบเจ็กต์เริ่มต้นดังต่อไปนี้ เนื่องจากเมื่อใช้ PropertiesService.getScriptProperties()
ในไลบรารี ค่าต่างๆ จะถูกใส่ลงในไลบรารี เมื่อฉันสร้าง Ref and Ref ฉันคิดว่าสคริปต์นั้นถูกใช้โดยการคัดลอกและวางแทนไลบรารี ดังนั้นฉันจึงรวม PropertiesService.getScriptProperties()
ไว้ในสคริปต์ แต่ฉันสังเกตเห็นว่าเมื่อใช้สิ่งนี้กับ GeminiWithFiles ผู้ใช้แต่ละคนจะต้องใช้ PropertiesService.getScriptProperties()
ดังนั้นฉันจึงแก้ไขสิ่งนี้resumableUploadAsNewUpload: true
Ref โดยสิ่งนี้ คุณสมบัติจะถูกล้างและรันการอัปโหลดสูงสุด