概要
(日記)前回
の続き。Geminiに画像の説明などを求める。
環境
- Ubuntu 24.04
- Node.js v22.4.1
ファイルをアップロード
画像などのファイルをGeminiにアップロードする。
src/fileUpload.ts
import { FileMetadata, GoogleAIFileManager } from "@google/generative-ai/server"
async function main() {
const file = process.argv[2]
const fileManager = new GoogleAIFileManager(process.env.GOOGLE_API_KEY ?? "")
const metaData: FileMetadata = { mimeType: "image/jpeg", displayName: `Image file '${file}'` }
const uploadResponse = await fileManager.uploadFile(file, metaData)
console.log(uploadResponse)
}
main()
ファイルアップロード
export GOOGLE_API_KEY=<your-api-key>
npx -y ts-node src/fileUpload.ts aaa.jpg
結果(部分)
{ file: { uri: 'https://generativelanguage.googleapis.com/v1beta/files/b7v8vds91atw', ...}}
ファイルの寿命は48h
インラインファイル
src/chatAboutFiles.ts
import { GoogleGenerativeAI, Part, FileDataPart } from "@google/generative-ai"
async function main() {
const url = process.argv[2]
const genAI = new GoogleGenerativeAI(process.env.GOOGLE_API_KEY ?? "")
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" })
const files: Array<Part> = [{ fileData: { fileUri: url, mimeType: "image/jpeg" } },]
const chat = model.startChat()
async function qa(q: string) {
const a = await chat.sendMessage(q)
console.log(`Q: ${q}`)
console.log(`A: ${a.response.text()}`)
console.log(a.response.usageMetadata)
}
await chat.sendMessage(files)
await qa("画像を20文字で説明して")
await qa("カード上の透かし文言は何")
}
main()
実行
npx -y ts-node src/chatAboutFiles.ts https://generativelanguage.googleapis.com/v1beta/files/b7v8vds91atw
ファイルはGemini上のURLで指定される
結果
Q: 画像を20文字で説明して
A: バトルスピリッツの新弾「全天の覇神」が10月26日発売!
{
promptTokenCount: 372,
candidatesTokenCount: 21,
totalTokenCount: 393
}
Q: カード上の透かし文言は何
A: カード上の透かし文言は「SAMPLE」です。
{
promptTokenCount: 404,
candidatesTokenCount: 12,
totalTokenCount: 416
}
参考
サンプル画像(XよりTCGバトルスピリッツのカード紹介): https://pbs.twimg.com/media/GXpZw6casAAbMCX?format=jpg&name=4096x4096