在生成式AI技术迅猛发展的当下,“图生图”作为视觉内容创作的核心能力,已经深度渗透至电商运营、品牌营销、创意设计等场景。传统视觉内容生产模式依赖于专业设备和技术人员,存在流程繁琐、迭代缓慢、成本高昂等痛点——无论是电商平台高频上新所需的产品主图、场景图,还是营销活动所需的创意海报,都面临“高质量输出”与“高效交付”难以兼顾的困境。
事实上,借助MaxKB开源企业级智能体平台的工作流编排、RAG检索增强生成及多模型适配能力,可以快速搭建出图生图智能体。借助MaxKB的可视化工作流,可以将图生图模型的调用、参数配置、结果优化等任务拆解为标准化节点,实现全流程的自动化编排。与此同时,MaxKB还提供灵活的函数库与MCP工具调用能力,可以轻松对接通义万相、豆包等主流图生图模型,兼顾用户的通用性与定制化需求。
一、实现方案
MaxKB工作流搭建图生图智能体主要适配以下两种应用场景:
1. 以图生图
用户上传图片,基于上传内容进行图像生成与风格转换。该场景的核心逻辑为,首先从用户上传的图片信息中提取其链接地址,随后将其传入通过MaxKB工具创建的的图生图组件。该组件基于阿里云qwen-image-edit-plus模型构建,能够实现对上传图像的编辑与生成。
2. 文图编辑融合
用户先通过文本生成图像,再基于生成的图像进行细节调整与编辑。该场景的核心逻辑为:
① 意图识别与文生图: 系统先判断用户输入是否为文本。如果是文本,则调用图片生成组件,根据文本内容生成图像,同时将生成图片的链接地址存入系统变量;
② 二次编辑处理: 如果用户继续对已生成的图像提出编辑需求,系统则从变量中提取对应的图片链接,并将其作为输入传递给图生图/图片编辑组件,从而实现对文生图结果的进一步修改和优化。
当我们将以图生图和文图编辑融合双场景进行融合时,可得到如下工作流:
① 系统通过统一的判断器,将两种场景融合为连贯的单流处理;
② 如果用户输入包含图片,则进入“以图生图”流程;
③ 如果用户输入仅为文本,则进入“文生图”→“后续可编辑”流程;
④ 如果用户基于已有生成图片提出编辑需求,则直接进入“图片编辑”流程,调用暂存的图片链接进行二次处理。
这样的设计就实现了场景间的无缝切换与数据流转,形成端到端的图像生成与编辑闭环。
二、关键步骤解析
- 提取图片文件链接,相关代码如下:
import json
def process_file_info(file_info_str):
# 1. 将字符串形式的参数转为Python列表-字典
try:
file_info = json.loads(file_info_str.replace("'", """)) # 替换单引号为双引号
except Exception as e:
return f"参数解析失败:{str(e)}"
# 2. 提取url并拼接前缀(无列表,直接拼接字符串结果)
prefix = "https://east-mk.fit2cloud.cn/admin/"
output_str = "" # 用字符串存储最终结果(而非列表)
for item in file_info:
url = item.get("url", "")
if not url:
# 拼接错误提示到结果字符串
err_msg = f"文件{item.get('file_id', '未知ID')}无有效URL"
output_str = f"{output_str}{err_msg}\n" if output_str else f"{err_msg}\n"
continue
# 拼接完整URL
full_url = f"{prefix.rstrip('/')}/{url.lstrip('./')}"
# 追加到结果字符串(多个结果换行分隔)
output_str = f"{output_str}{full_url}\n" if output_str else f"{full_url}\n"
# 去除末尾多余的换行符,返回纯字符串
return output_str.rstrip("\n")
2. 提取图片生成组件生成的图片链接地址,相关代码如下:
import json
def build_file_url_from_json(data):
"""
从数据中解析出 file_id 并拼接 URL
支持输入:JSON字符串 或 已解析的Python列表对象
参数:
data (str or list): 包含文件信息的JSON字符串或Python列表
返回:
str: 拼接后的完整URL
"""
try:
# 如果输入是字符串,尝试解析为JSON
if isinstance(data, str):
# 替换单引号为双引号(处理不标准的JSON)
data_str = data.replace("'", '"')
data = json.loads(data_str)
# 验证数据格式:必须是列表且第一个元素有file_id
if not isinstance(data, list) or len(data) == 0:
raise ValueError("数据必须是非空列表")
if 'file_id' not in data[0]:
raise ValueError("列表中的元素缺少'file_id'字段")
return "https://east-mk.fit2cloud.cn/admin/oss/file/" + data[0]['file_id']
except json.JSONDecodeError:
raise ValueError("无效的JSON字符串")
except Exception as e:
raise ValueError(f"解析失败: {str(e)}")
def process_data(input_data):
try:
file_url = build_file_url_from_json(input_data)
print("转换成功")
return file_url
except ValueError as e:
print(f"转换失败: {str(e)}")
return None
3. 图生图/图片编辑,相关代码如下:
import requests
import json
from typing import Optional
# 固定配置(接口地址)
API_URL = 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'
# 把 str | None 改为 Optional[str],表示返回值是字符串或None
def edit_image_top_color(image_url: str, edit_text: str) -> Optional[str]:
"""
调用阿里云通义千问图片编辑接口,返回Markdown格式的图片链接
:param image_url: 待编辑图片URL(公网可访问)
:param edit_text: 编辑指令(描述需要修改的内容)
:return: Markdown图片语法字符串(成功)/ None(失败)
"""
# 1. 构造请求头:包含API Key和内容类型(与curl一致)
headers = {
'Authorization': 'Bearer sk-7f4f820c4b83495*********', # 替换为你的真实API Key
'Content-Type': 'application/json'
}
# 2. 构造请求体:严格匹配curl命令的JSON结构
payload = {
"model": "qwen-image-edit-plus", # 图片编辑模型名称
"input": { # 新增input层级,包裹messages
"messages": [
{
"role": "user",
"content": [
{"image": image_url}, # 图片URL
{"text": edit_text} # 编辑指令
]
}
]
},
"parameters": { # 参数统一放在parameters中
"n": 1, # 生成1张图片
"negative_prompt": "低质量",
"prompt_extend": True,
"watermark": False
}
}
try:
# 3. 发送POST请求
response = requests.post(
url=API_URL,
headers=headers,
data=json.dumps(payload), # 将字典转为JSON字符串
timeout=60 # 设置超时时间,避免长时间等待
)
# 4. 处理响应结果
if response.status_code == 200:
response_data = response.json()
# 提取图片URL
img_url = response_data['output']['choices'][0]['message']['content'][0]['image']
return f''
else:
# 打印错误信息
print(f"HTTP返回码:{response.status_code}")
try:
error_data = response.json()
print(f"错误码:{error_data.get('code')}")
print(f"错误信息:{error_data.get('message')}")
except json.JSONDecodeError:
print(f"错误响应内容:{response.text}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
return None
except requests.exceptions.RequestException as e:
# 捕获网络相关异常(连接超时、请求失败等)
print(f"调用API时发生网络异常:{str(e)}")
return None
except Exception as e:
# 捕获其他异常(如数据解析错误)
print(f"处理响应时发生异常:{str(e)}")
return None
三、效果展示
1. 以图生图效果示例: 通过提示词“把标题背景颜色修改为淡紫色”实现图片中标题背景颜色的修改。
2. 文图编辑融合效果示例: 通过提示词“生成两只兔子”实现文生图,然后再次输入提示词“让图上的两个兔子各拿一个胡萝卜”,对第一次文生图的结果进行二次修改。
四、总结
MaxKB通过可视化工作流与多模型适配的能力,将图生图应用标准化、自动化,能够显著降低技术门槛与迭代成本。MaxKB开源企业级智能体平台具备灵活的场景融合能力,支持以图生图、文图编辑融合等复杂任务的无缝切换,为高质量视觉内容的快速生产提供了企业级解决方案。