You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django中调用Replicate API的i2vgen-xl模型上传本地图片报错求助

问题解决步骤

错误原因分析

  • input: prompt is required:i2vgen-xl模型必须传入prompt参数,你的请求未提供该必填项。
  • input.image: Does not match format 'uri':你传入的图片路径格式错误(包含多余单引号),且Replicate API要求图片参数为合法URI(可传入本地文件绝对路径或直接传入文件对象)。

具体修复方案

1. 补充必填的prompt参数

先确保表单包含prompt输入字段(如果你的ImageForm还没有,需添加):

# forms.py 示例代码
from django import forms

class ImageForm(forms.Form):
    Image = forms.ImageField()
    prompt = forms.CharField(label="提示词", max_length=200)

2. 修正图片参数格式

Replicate的Python客户端支持直接传入本地文件对象或绝对路径,以下两种方式任选其一:

方式一:使用已保存图片的绝对路径

def X(request):
    form = ImageForm()
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid():
            # 保存表单并获取实例
            instance = form.save()
            # 获取图片的绝对路径
            image_path = instance.Image.path
            # 设置API Token(建议放到settings.py中,不要硬编码)
            os.environ["REPLICATE_API_TOKEN"] = "你的API Token"
            # 调用模型,补充必填的prompt参数
            output = replicate.run(
                "ali-vilab/i2vgen-xl:5821a338d00033abaaba89080a17eb8783d9a17ed710a6b4246a18e0900ccad4",
                input={
                    "image": open(image_path, "rb"),  # 以二进制模式打开文件并传入
                    "prompt": form.cleaned_data['prompt']
                }
            )
            print(output)
        else:
            print("表单验证失败")
    return render(request, "img2vid.html", {'form': form})

方式二:直接使用上传的文件对象(无需提前保存到本地)

如果不需要持久化保存图片,可以直接用表单中的文件对象:

def X(request):
    form = ImageForm()
    if request.method == 'POST':
        form = ImageForm(request.POST, request.FILES)
        if form.is_valid():
            os.environ["REPLICATE_API_TOKEN"] = "你的API Token"
            # 从表单直接获取文件和提示词
            image_file = form.cleaned_data['Image']
            prompt = form.cleaned_data['prompt']
            # 调用模型
            output = replicate.run(
                "ali-vilab/i2vgen-xl:5821a338d00033abaaba89080a17eb8783d9a17ed710a6b4246a18e0900ccad4",
                input={
                    "image": image_file,
                    "prompt": prompt
                }
            )
            print(output)
            # 如果需要保存表单,取消下面注释
            # form.save()
        else:
            print("表单验证失败")
    return render(request, "img2vid.html", {'form': form})

3. 额外注意事项

  • API Token不要硬编码:建议把REPLICATE_API_TOKEN放到Django的settings.py中,示例:
    # settings.py
    import os
    REPLICATE_API_TOKEN = os.environ.get("REPLICATE_API_TOKEN", "你的默认Token")
    
    然后在视图中通过os.environ["REPLICATE_API_TOKEN"] = settings.REPLICATE_API_TOKEN引用。
  • 避免手动拼接路径:不要用字符串硬编码路径,优先使用模型实例的path属性或os.path.join构建路径,避免跨平台兼容问题。

内容的提问来源于stack exchange,提问作者Pv33_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:03:32