我目前正在使用Gemini AI API 1.5 Pro(最新版本),需要发送数百兆字节的大型视频文件进行推理。这些视频每个大约700MB,但都在API的限制范围内(例如,长度少于1小时)。我希望能够上传一次视频并进行推理,而不需要重新上传。
在GPT-4o中,有一个选项可以使用image_url
来引用图片。Gemini AI API 1.5 Pro是否有类似的方法或最佳实践来处理大型视频文件?
这些视频太大,无法反复发送,因此上传和引用它们的有效方法至关重要。
关于API端点、所需参数或示例代码片段的任何指导都将不胜感激。
回答:
在您的情况下,以下示例脚本如何?
示例脚本1:
在测试以下脚本之前,请将google-generativeai
更新到最新版本。
import google.generativeai as genaiimport timeapiKey = "###" # 请设置您的API密钥。video_file_name = "sample.mp4" # 请设置您的视频文件路径。display_name = "sampleDisplayName" # 请设置在Gemini上上传文件的显示名称。使用此值从文件列表中搜索文件。genai.configure(api_key=apiKey)# 获取Gemini中的文件列表fileList = genai.list_files(page_size=100)# 检查已上传的文件。video_file = next((f for f in fileList if f.display_name == display_name), None)if video_file is None: print(f"正在上传文件...") video_file = genai.upload_file(path=video_file_name, display_name=display_name, resumable=True) print(f"上传完成: {video_file.uri}")else: print(f"文件URI: {video_file.uri}")# 检查已上传文件的状态。while video_file.state.name == "PROCESSING": print(".", end="") time.sleep(10) video_file = genai.get_file(video_file.name)if video_file.state.name == "FAILED": raise ValueError(video_file.state.name)# 使用已上传的文件生成内容。prompt = "描述这个视频。"model = genai.GenerativeModel(model_name="models/gemini-1.5-pro-latest")print("正在进行LLM推理请求...")response = model.generate_content([video_file, prompt], request_options={"timeout": 600})print(response.text)
在这个示例脚本中,当文件已经上传时,将使用现有文件。另一方面,当文件未找到时,将上传文件并使用已上传的文件。为了搜索文件,在这个示例中使用了display_name
。
示例脚本2:
作为另一种方法,当可以直接提供name
的值时,也可以使用以下示例脚本。在这种情况下,name的值需要在已上传的文件中是唯一的。
import google.generativeai as genaiimport timeapiKey = "###" # 请设置您的API密钥。video_file_name = "sample.mp4" # 请设置您的视频文件路径。name = "sample-name-1" # 请设置在Gemini上上传文件的名称。使用此值从文件列表中搜索文件。genai.configure(api_key=apiKey)# 检查已上传的文件。try: video_file = genai.get_file(f"files/{name}") print(f"文件URI: {video_file.uri}")except: print(f"正在上传文件...") video_file = genai.upload_file(path=video_file_name, name=name, resumable=True) print(f"上传完成: {video_file.uri}")# 检查已上传文件的状态。while video_file.state.name == "PROCESSING": print(".", end="") time.sleep(10) video_file = genai.get_file(video_file.name)if video_file.state.name == "FAILED": raise ValueError(video_file.state.name)# 使用已上传的文件生成内容。prompt = "描述这个视频。"model = genai.GenerativeModel(model_name="models/gemini-1.5-pro-latest")print("正在进行LLM推理请求...")response = model.generate_content([video_file, prompt], request_options={"timeout": 600})print(response.text)
这个脚本与上面的脚本结果相同。
注意:
- 这是一个简单的示例脚本。因此,请根据您的实际情况进行修改。