操作教程丨基于MaxKB工作流搭建图生图智能体

0 阅读7分钟

在生成式AI技术迅猛发展的当下,“图生图”作为视觉内容创作的核心能力,已经深度渗透至电商运营、品牌营销、创意设计等场景。传统视觉内容生产模式依赖于专业设备和技术人员,存在流程繁琐、迭代缓慢、成本高昂等痛点——无论是电商平台高频上新所需的产品主图、场景图,还是营销活动所需的创意海报,都面临“高质量输出”与“高效交付”难以兼顾的困境。

事实上,借助MaxKB开源企业级智能体平台的工作流编排、RAG检索增强生成及多模型适配能力,可以快速搭建出图生图智能体。借助MaxKB的可视化工作流,可以将图生图模型的调用、参数配置、结果优化等任务拆解为标准化节点,实现全流程的自动化编排。与此同时,MaxKB还提供灵活的函数库与MCP工具调用能力,可以轻松对接通义万相、豆包等主流图生图模型,兼顾用户的通用性与定制化需求。

一、实现方案

MaxKB工作流搭建图生图智能体主要适配以下两种应用场景:

1. 以图生图

用户上传图片,基于上传内容进行图像生成与风格转换。该场景的核心逻辑为,首先从用户上传的图片信息中提取其链接地址,随后将其传入通过MaxKB工具创建的的图生图组件。该组件基于阿里云qwen-image-edit-plus模型构建,能够实现对上传图像的编辑与生成。

▲图1 以图生图工具节点配置

2. 文图编辑融合

用户先通过文本生成图像,再基于生成的图像进行细节调整与编辑。该场景的核心逻辑为:

① 意图识别与文生图: 系统先判断用户输入是否为文本。如果是文本,则调用图片生成组件,根据文本内容生成图像,同时将生成图片的链接地址存入系统变量;

② 二次编辑处理: 如果用户继续对已生成的图像提出编辑需求,系统则从变量中提取对应的图片链接,并将其作为输入传递给图生图/图片编辑组件,从而实现对文生图结果的进一步修改和优化。

▲图2 文图编辑融合相关节点配置

当我们将以图生图和文图编辑融合双场景进行融合时,可得到如下工作流:

① 系统通过统一的判断器,将两种场景融合为连贯的单流处理;

② 如果用户输入包含图片,则进入“以图生图”流程;

③ 如果用户输入仅为文本,则进入“文生图”→“后续可编辑”流程;

④ 如果用户基于已有生成图片提出编辑需求,则直接进入“图片编辑”流程,调用暂存的图片链接进行二次处理。

这样的设计就实现了场景间的无缝切换与数据流转,形成端到端的图像生成与编辑闭环。

▲图3 以图生图和文图编辑融合双场景融合节点配置

二、关键步骤解析

  1. 提取图片文件链接,相关代码如下:
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'![Generated Image]({img_url})'
        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. 以图生图效果示例: 通过提示词“把标题背景颜色修改为淡紫色”实现图片中标题背景颜色的修改。

▲图4 以图生图效果示例

2. 文图编辑融合效果示例: 通过提示词“生成两只兔子”实现文生图,然后再次输入提示词“让图上的两个兔子各拿一个胡萝卜”,对第一次文生图的结果进行二次修改。

▲图5 文图编辑融合效果示例

四、总结

MaxKB通过可视化工作流与多模型适配的能力,将图生图应用标准化、自动化,能够显著降低技术门槛与迭代成本。MaxKB开源企业级智能体平台具备灵活的场景融合能力,支持以图生图、文图编辑融合等复杂任务的无缝切换,为高质量视觉内容的快速生产提供了企业级解决方案。