图像生成与编辑
wan2.5-i2i-preview 是阿里云百炼通义万相系列的图生图预览模型,支持基于输入图片与文本提示词生成新图像。模型能够理解输入图像的内容与风格,结合文本描述进行图像转换、风格迁移、细节增强等操作,适用于需要基于现有图像进行二次创作与风格化处理的场景。wan2.5-i2i-preview 在保持原图核心内容的同时,能够灵活响应文本指令,实现多样化的图像变换效果。
字段名 | 字段类型 | 是否必传 | 字段默认值 | 字段说明 |
|---|---|---|---|---|
| model | string | 否 | "wan2.5-i2i-preview" | 模型名称,SDK 内部会自动设置为当前实例的 modelName |
| messages | Array<{ role: "user"; content: Array<{ type: "image_url"|"text"; image_url?: { url: string }; text?: string }> }> | 是 | - | 单轮对话消息数组,必须传一条 role 为 user 的消息 |
| messages.role | "user" | 是 | - | 消息角色,目前固定为 "user" |
| messages.content | Array<{ type: "image_url"|"text"; image_url?: { url: string }; text?: string }> | 是 | - | 内容数组,可包含图像(image_url)和/或文本(text),至少需要一张图片和一个文本 |
| messages.content.type | "image_url" | "text" | 是 | - | 内容类型,image_url 表示图片,text 表示文本提示词 |
| messages.content.image_url | { url: string } | 可选但至少一个 | - | 输入图像的URL,支持多个图片输入用于参考图、风格图等场景 |
| messages.content.text | string | 可选但至少一个 | - | 文本提示词,支持中英文,不超过2000字符,支持多个文本输入用于分步骤的生成指令 |
| parameters | object | 否 | {} | 控制生成图片数量、尺寸等参数 |
| parameters.size | string | 否 | "1280*1280" | 输出图像分辨率,格式宽高,支持 "12801280" | "10241024" | "8001200" | "1200800" | "9601280" | "1280960" | "7201280" | "1280720" | "1344576" |
| parameters.n | integer | 否 | 1 | 生成图像张数,取值范围 1~4 |
| parameters.prompt_extend | boolean | 否 | false | 是否对 prompt 进行智能改写以提升质量 |
| parameters.watermark | boolean | 否 | false | 是否在图像右下角添加 "AI生成" 水印 |
| parameters.seed | integer | 否 | 随机 | 随机种子,取值范围 0, 2147483647,用于结果复现 |
| negative_prompt | string | 否 | "" | 可限制不希望出现的内容(≤500字符) |
说明:
非流式响应(标准格式):
字段名 | 字段类型 | 是否必传 | 字段默认值 | 字段说明 |
|---|---|---|---|---|
| id | string | 否 | - | 请求/响应 ID |
| object | string | 否 | - | 对象类型,一般为 chat.completion |
| created | number | 否 | - | 时间戳(秒) |
| model | string | 否 | - | 实际使用的模型名 |
| log_id | string | 否 | - | 日志跟踪 ID |
| error | string | 否 | "" | 错误信息 |
| code | number | 否 | 0 | 错误码 |
| choices | Array<{ index: number; message: { id: string; role: "assistant"; type: "image"|"async_task"; content: string }; finish_reason: string }> | 否 | - | 生成结果列表,同步响应时 type 为 "image",content 为图片 URL;异步响应时 type 为 "async_task",content 为任务信息 JSON 字符串 |
| usage | { width?: number; height?: number; image_count?: number } | 否 | - | 统计信息,包括生成图像的宽度、高度和图片张数 |
流式响应(标准格式):
字段名 | 字段类型 | 是否必传 | 字段默认值 | 字段说明 |
|---|---|---|---|---|
| id | string | 否 | - | 同上 |
| object | string | 否 | chat.completion.chunk | 流片段对象类型 |
| created | number | 否 | - | 时间戳(秒) |
| model | string | 否 | - | 模型名 |
| log_id | string | 否 | - | 日志跟踪 ID |
| error | string | 否 | "" | 错误信息 |
| code | number | 否 | 0 | 错误码 |
| choices | Array<{ index: number; message: { id: string; role: "assistant"; type: "image"|"async_task"; content: string }; finish_reason: string }> | 否 | - | 生成的增量内容,由于 DashScope 图生图接口不提供 SSE 流,流式响应会封装为单帧输出 |
| usage | 同上 | 否 | - | 统计信息 |
说明:
下面示例展示了如何通过自定义 Agent 接入
async sendMessage(message) {
try {
const images =
Array.isArray(message?.files)
? message.files.filter(f => f?.type === 'image' && f?.url)
: [];
// 至少需要 1 张输入图片
if (!images.length) {
return {
code: -1,
msg: '请上传待转换的图片'
};
}
const contentParts = images.map(img => ({
type: 'image_url',
image_url: { url: img.url }
}));
contentParts.push({
type: 'text',
text: message?.msg || '请根据描述对图片进行风格转换'
});
// 创建 wan2.5-i2i-preview 模型
const model = this.createModel('wan2.5-i2i-preview');
const modelResponse = await model.streamText({
messages: [
{
role: 'user',
content: contentParts,
},
],
parameters: {
size: '1280*1280',
n: 1,
prompt_extend: false,
watermark: false,
seed: 12345
},
// negative_prompt 在顶层传入
negative_prompt: '模糊, 低质量, 变形, 失真, 多余的手指, 比例不良'
});
// 流式返回生成的图片结果
for await (const chunk of modelResponse) {
this.sseSender.send({ data: chunk });
}
this.sseSender.end();
} catch (error) {
console.error('wan2.5-i2i-preview stream error:', error);
this.sseSender.end();
}
}