Realistic Vision V5.1 构建Skills智能体实现多轮对话式图像创作你有没有过这样的经历想用AI生成一张图片但总感觉一次描述很难到位。比如你想画一个女孩先说了“一个女孩在公园里”生成后觉得“头发要是金色的就好了”改完又觉得“再加一副眼镜吧”最后还想“背景换成图书馆会不会更棒”。传统的AI绘画工具每次修改都得从头再来重新输入一遍所有描述不仅麻烦还容易丢失之前的创意。整个过程就像在跟一个健忘的助手合作你说一句他做一件完全不记得上一秒聊了什么。今天我们就来聊聊一个更聪明的合作方式把强大的Realistic Vision V5.1写实大模型变成一个能记住、会思考的“Skills”智能体。你不再需要一次性给出完美无缺的“咒语”而是可以像和朋友聊天一样通过多轮对话一步步把你的想法变成现实。从“一个女孩”开始到“金发戴眼镜在图书馆的女孩”整个过程自然流畅智能体完全理解你的上下文意图。这不仅仅是换个工具而是改变了一种创作的工作流。接下来我就带你看看这个会聊天的AI绘画助手到底能做什么以及我们是如何把它搭建起来的。1. 场景与痛点为什么我们需要会对话的AI画家在内容创作、游戏设计、广告营销甚至个人兴趣创作里对高质量、高度定制化图像的需求越来越大。Realistic Vision V5.1这类模型在生成写实人像、复杂场景方面已经表现出色但它的使用门槛和协作效率依然是个问题。想象一下电商设计师的一天。老板说“先做个夏日海滩主题的主图模特要阳光开朗的。” 你生成了第一版。老板看了看“感觉不够高端背景换成五星级酒店的无边泳池吧。” 你修改提示词重新生成。老板又说“模特的表情可以再自信一点手里拿杯饮料。” 就这样来回几次虽然每次改动不大但你得不断复制、粘贴、修改那段长长的提示词小心翼翼地确保新指令没有破坏之前已经满意的部分。这个过程既琐碎又容易出错。核心痛点就在这里现有的AI绘画是“单次交易”模式。你输入一个完整的、静态的指令它返回一个结果。但人类的创意过程是动态的、迭代的。我们的想法会在看到初步结果后迸发新的灵感会不断调整细节。这个“单次交易”模式打断了创意的自然流动。而“Skills”智能体的思路就是把“单次交易”变成“多轮会话”。它让AI具备了记忆和规划的能力。记忆让它能记住对话历史中你所有的要求规划让它能理解你新增的指令是针对历史上下文的修改或补充并合成一个全新的、完整的指令去驱动模型。这样一来用户就可以用最自然的方式与AI协作“生成一个穿红裙子的女孩” - “把裙子换成蓝色的” - “让她坐在窗边” - “窗外是下雨的街道”。每一步都是基于上一步的微调智能体负责理解“换”、“让”、“窗外是”这些动作和关系并默默处理好所有技术细节。这大大降低了使用难度提升了创作效率和体验让AI真正成为一个理解你意图的创作伙伴。2. 解决方案Skills智能体是如何工作的那么这个能对话的智能体内部是怎么运转的呢我们可以把它理解为一个三层结构交互层、推理层和执行层。整个过程就像有个贴心的项目经理在帮你协调。交互层就是和你聊天的界面。你在这里用自然语言提出要求比如“现在把头发改成金色”。这一层负责接收你的指令并把当前对话的历史包括你之前说的所有话和AI生成的图片一起打包送给下一层。推理层是智能体的大脑也是核心所在。它的任务很明确理解你在当前上下文中到底想干什么。它拿到对话历史和新指令后会进行一番“思考”。这个思考过程本质上是一个语言理解与生成任务。它会分析“用户之前要求生成一个黑发女孩现在新指令是‘把头发改成金色’。这是一个修改操作对象是‘头发’属性从‘黑色’变为‘金色’。”基于这个理解推理层会做两件事一是更新记忆把“女孩拥有金色头发”这个新事实记录到对话上下文中二是规划新指令它需要合成一个全新的、完整的文本提示词这个提示词要融合历史上所有有效指令并且确保它们之间没有冲突。比如最终合成的提示词可能是“一个拥有金色长发的年轻女孩戴着眼镜站在古典图书馆的书架前窗外阳光明媚摄影级画质细节丰富”。你看它自动把分散在多轮对话里的信息整合成了一个高质量的、模型能理解的“咒语”。执行层就是实干家了。它拿到推理层规划好的那个最终提示词去调用后端的Realistic Vision V5.1模型生成图像然后把结果返回给交互层展示给你看。整个流程的关键在于推理层。我们通常会用一个大语言模型来充当这个“大脑”因为它最擅长理解自然语言的上下文和意图。通过精心设计的提示词我们可以引导大语言模型扮演好这个“指令理解与合成者”的角色。这样我们就不是直接拿用户的原始输入去生图而是经过了一个智能的“翻译”和“规划”步骤使得多轮、增量的创作成为可能。3. 动手搭建从零构建你的对话式绘画助手理解了原理我们来看看如何动手实现它。这里我提供一个基于Python和Gradio的简易实现方案你可以在此基础上扩展功能。首先我们需要准备环境。这个方案主要依赖几个库transformers或openai用于与大语言模型交互diffusers用于调用Realistic Vision V5.1gradio用于构建聊天界面。# 假设你已经安装了Python环境以下是可能需要安装的库 pip install transformers torch diffusers accelerate gradio # 如果你使用OpenAI的模型作为推理大脑还需要 # pip install openai接下来我们分模块来构建这个系统。3.1 构建智能体“大脑”推理层我们首先需要定义智能体的核心——那个能理解上下文并规划新指令的模块。这里我以使用开源大语言模型为例。import torch from transformers import AutoTokenizer, AutoModelForCausalLM class InstructionPlanner: 指令规划器理解用户当前指令结合历史对话生成最终的生图提示词。 def __init__(self, model_nameQwen/Qwen2.5-7B-Instruct): # 加载一个开源的大语言模型和分词器 self.tokenizer AutoTokenizer.from_pretrained(model_name) self.model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto ) # 定义系统提示词告诉模型它应该扮演的角色 self.system_prompt 你是一个专业的AI绘画助手。你的任务是根据用户的多轮对话历史理解用户最新的指令并生成一个完整、详细、高质量的文本提示词用于生成图像。 对话历史包含了之前用户的要求和已生成的图像描述。你的输出必须只包含最终用于图像生成的提示词不要有任何额外的解释、前缀或后缀。 示例 历史用户说“生成一个女孩” 新指令“把头发改成金色” 输出一个金色头发的女孩肖像摄影风格细节丰富 历史用户说“生成一个女孩”然后说“把头发改成金色” 新指令“再加一副眼镜” 输出一个金色头发、戴着眼镜的女孩肖像摄影风格细节丰富 现在请根据以下对话历史和新指令生成最终的图像提示词。 def plan_instruction(self, conversation_history, new_user_instruction): # 构建给模型的输入信息 prompt f{self.system_prompt}\n\n对话历史{conversation_history}\n新指令{new_user_instruction}\n输出 inputs self.tokenizer(prompt, return_tensorspt).to(self.model.device) # 让模型生成提示词 with torch.no_grad(): outputs self.model.generate( **inputs, max_new_tokens150, temperature0.7, do_sampleTrue ) # 解码并清理输出只提取提示词部分 full_response self.tokenizer.decode(outputs[0], skip_special_tokensTrue) # 简单处理提取“输出”之后的内容作为最终提示词 final_prompt full_response.split(输出)[-1].strip() return final_prompt这个InstructionPlanner类就是智能体的推理核心。它通过一个精心设计的系统提示词引导大语言模型学会从多轮对话中合成最终指令。你可以替换model_name为任何你喜欢的、支持对话的模型。3.2 集成绘画模型执行层有了规划好的提示词下一步就是交给Realistic Vision V5.1来执行。我们使用diffusers库来调用模型。from diffusers import StableDiffusionPipeline import PIL.Image class ImageGenerator: 图像生成器接收文本提示词调用Realistic Vision V5.1模型生成图像。 def __init__(self, model_pathSG161222/Realistic_Vision_V5.1_noVAE): # 加载Realistic Vision V5.1模型管道 # 注意这是一个示例模型路径请确保你有权使用并下载了正确的模型 self.pipe StableDiffusionPipeline.from_pretrained( model_path, torch_dtypetorch.float16, safety_checkerNone, # 根据需求决定是否使用安全检查器 ).to(cuda) # 启用内存优化如果显存不足可以启用 self.pipe.enable_attention_slicing() def generate(self, prompt, negative_promptNone, steps30, guidance_scale7.5): 根据提示词生成图像 if negative_prompt is None: negative_prompt 低质量模糊畸形丑陋 # 默认的负面提示词 image self.pipe( promptprompt, negative_promptnegative_prompt, num_inference_stepssteps, guidance_scaleguidance_scale ).images[0] return image这里我们创建了一个ImageGenerator类专门负责与底层的扩散模型交互。negative_prompt可以用来排除我们不想要的特征有助于提升图像质量。3.3 打造聊天界面交互层与记忆最后我们需要一个界面把大脑和双手连接起来并且赋予智能体“记忆”能力。我们用Gradio来快速搭建一个Web界面。import gradio as gr from datetime import datetime class PaintingAssistant: 绘画助手整合规划器和生成器管理对话状态提供交互接口。 def __init__(self): self.planner InstructionPlanner() self.generator ImageGenerator() # 用一个列表来存储对话历史实现“记忆” self.conversation_history [] def chat_and_paint(self, user_input, history_state): 核心交互函数处理用户输入规划指令生成图像更新历史。 history_state是Gradio维护的聊天历史状态。 # 1. 将用户输入添加到对话历史记录中 self.conversation_history.append(f用户{user_input}) # 2. 将对话历史文本部分拼接成一个字符串供规划器使用 history_text | .join(self.conversation_history[-6:]) # 只保留最近几轮避免过长 # 3. 调用规划器生成最终的图像提示词 print(f规划指令历史{history_text} 新指令{user_input}) try: final_prompt self.planner.plan_instruction(history_text, user_input) print(f生成的最终提示词{final_prompt}) except Exception as e: return history_state, f指令规划出错{e}, None # 4. 调用生成器生成图像 print(开始生成图像...) try: image self.generator.generate(final_prompt) # 为生成的图片保存一个临时文件或直接使用 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) image_path f./output/generated_{timestamp}.png image.save(image_path) except Exception as e: return history_state, f图像生成出错{e}, None # 5. 将AI的“思考”和结果添加到Gradio的聊天历史中 # 首先添加一条文本回复说明根据什么提示词生成了图像 history_state.append((user_input, f好的我理解了。我将基于以下描述为你创作\n**{final_prompt}**)) # 然后添加一条包含图片的回复 history_state.append((None, (image_path,))) # Gradio格式None表示用户没有说话 # 6. 将本次生成的提示词也记录到内部对话历史中供后续轮次参考 self.conversation_history.append(f助手根据指令生成了图像提示词为{final_prompt}) return history_state, , image_path # 返回更新后的历史、清空输入框、返回图片路径 # 创建助手实例 assistant PaintingAssistant() # 使用Gradio创建界面 with gr.Blocks(title对话式AI绘画助手) as demo: gr.Markdown(# 对话式AI绘画助手) gr.Markdown(像聊天一样描述你的画面我可以记住你的要求并逐步完善。) # 聊天机器人组件 chatbot gr.Chatbot(label创作对话, height400) msg gr.Textbox(label你的指令, placeholder例如生成一个女孩现在把头发改成金色...) with gr.Row(): submit_btn gr.Button(发送指令并生成) clear_btn gr.Button(清空对话) # 图像展示区域 gallery gr.Image(label最新生成的画作, interactiveFalse) # 按钮事件绑定 msg.submit( fnassistant.chat_and_paint, inputs[msg, chatbot], outputs[chatbot, msg, gallery] ) submit_btn.click( fnassistant.chat_and_paint, inputs[msg, chatbot], outputs[chatbot, msg, gallery] ) def clear_conversation(): assistant.conversation_history.clear() return None, None clear_btn.click( fnclear_conversation, inputs[], outputs[chatbot, gallery] ) # 启动应用 if __name__ __main__: demo.launch(shareTrue) # shareTrue会生成一个临时公网链接方便测试这段代码构建了一个完整的应用。PaintingAssistant类是整个应用的中枢它管理着对话历史记忆并协调规划器和生成器工作。Gradio界面则提供了一个直观的聊天窗口你可以像使用聊天软件一样输入指令看到AI的回复和生成的图片。运行这个脚本一个本地Web应用就会启动。你可以在浏览器中打开它开始体验多轮对话创作了。试着输入“生成一个在咖啡馆看书的女孩”然后说“把她的毛衣换成红色”再看看效果。你会发现智能体真的记住了“女孩”、“在咖啡馆”、“看书”这些信息并只对“毛衣颜色”进行了修改。4. 效果展示与场景延伸搭建完成后实际用起来效果怎么样呢我测试了几个典型的对话流程感觉就像在和一个理解力很强的画师沟通。比如我从“生成一个未来城市的夜景”开始。第一张图给了我一个布满霓虹灯和飞行器的都市。我觉得天空不够有冲击力于是说“让天空出现极光”。智能体理解了这是对“天空”属性的修改生成的城市依然保持原样但天幕上却增添了绚丽的绿色光带。我又觉得城市缺少焦点补充指令“在城市中央添加一个发光的巨型全息投影广告牌”。最终得到的图像完美融合了这三轮指令一个未来都市夜空闪烁着极光市中心矗立着耀眼的虚拟广告牌。整个过程非常流畅无需我反复描述整个场景。这个能力可以延伸到很多实际场景。对于角色设计可以从一个基础设定开始逐步添加服饰、道具、表情、背景细节。对于产品概念图可以先生成一个基础模型然后轮流调整颜色、材质、光影和摆放环境。对于营销素材创作可以快速生成多个背景相同、但主体物或文案不同的图片变体大大提高效率。更重要的是这种对话式交互降低了对“提示词工程”的依赖。用户不需要一次性成为精通各种关键词的大师可以通过自然的语言探索和迭代找到自己最想要的画面。这为AI绘画的普及和深度应用打开了一扇新的大门。5. 总结回过头看把Realistic Vision V5.1这样的顶级生图模型封装成具有记忆和规划能力的Skills智能体其实是在为人与AI的协作搭建一座更自然的桥梁。它捕捉到了人类创意过程迭代、渐进的特质并用技术手段将之实现。从技术实现上看核心在于利用大语言模型的理解与规划能力来“翻译”和“整合”用户碎片化、口语化的指令形成模型能高效执行的精准提示词。我们上面的代码示例提供了一个可行的起点你可以根据自己的需求强化它的记忆能力比如记住画面中每个元素的状态增加更复杂的指令类型如“把左边的A移到右边”甚至集成多个不同的绘画模型让智能体根据需求自动选择。用下来感觉这种对话式的创作体验比传统的单次生成要友好和高效得多。它让AI不再是一个冰冷的工具而更像一个能跟上你思维节奏的合作伙伴。如果你也对AI绘画感兴趣不妨试试这个思路从我们提供的简单代码开始打造一个专属你的、能听懂人话的智能画师。未来的创作方式或许就始于这样一次轻松的对话。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Realistic Vision V5.1 构建Skills智能体:实现多轮对话式图像创作
Realistic Vision V5.1 构建Skills智能体实现多轮对话式图像创作你有没有过这样的经历想用AI生成一张图片但总感觉一次描述很难到位。比如你想画一个女孩先说了“一个女孩在公园里”生成后觉得“头发要是金色的就好了”改完又觉得“再加一副眼镜吧”最后还想“背景换成图书馆会不会更棒”。传统的AI绘画工具每次修改都得从头再来重新输入一遍所有描述不仅麻烦还容易丢失之前的创意。整个过程就像在跟一个健忘的助手合作你说一句他做一件完全不记得上一秒聊了什么。今天我们就来聊聊一个更聪明的合作方式把强大的Realistic Vision V5.1写实大模型变成一个能记住、会思考的“Skills”智能体。你不再需要一次性给出完美无缺的“咒语”而是可以像和朋友聊天一样通过多轮对话一步步把你的想法变成现实。从“一个女孩”开始到“金发戴眼镜在图书馆的女孩”整个过程自然流畅智能体完全理解你的上下文意图。这不仅仅是换个工具而是改变了一种创作的工作流。接下来我就带你看看这个会聊天的AI绘画助手到底能做什么以及我们是如何把它搭建起来的。1. 场景与痛点为什么我们需要会对话的AI画家在内容创作、游戏设计、广告营销甚至个人兴趣创作里对高质量、高度定制化图像的需求越来越大。Realistic Vision V5.1这类模型在生成写实人像、复杂场景方面已经表现出色但它的使用门槛和协作效率依然是个问题。想象一下电商设计师的一天。老板说“先做个夏日海滩主题的主图模特要阳光开朗的。” 你生成了第一版。老板看了看“感觉不够高端背景换成五星级酒店的无边泳池吧。” 你修改提示词重新生成。老板又说“模特的表情可以再自信一点手里拿杯饮料。” 就这样来回几次虽然每次改动不大但你得不断复制、粘贴、修改那段长长的提示词小心翼翼地确保新指令没有破坏之前已经满意的部分。这个过程既琐碎又容易出错。核心痛点就在这里现有的AI绘画是“单次交易”模式。你输入一个完整的、静态的指令它返回一个结果。但人类的创意过程是动态的、迭代的。我们的想法会在看到初步结果后迸发新的灵感会不断调整细节。这个“单次交易”模式打断了创意的自然流动。而“Skills”智能体的思路就是把“单次交易”变成“多轮会话”。它让AI具备了记忆和规划的能力。记忆让它能记住对话历史中你所有的要求规划让它能理解你新增的指令是针对历史上下文的修改或补充并合成一个全新的、完整的指令去驱动模型。这样一来用户就可以用最自然的方式与AI协作“生成一个穿红裙子的女孩” - “把裙子换成蓝色的” - “让她坐在窗边” - “窗外是下雨的街道”。每一步都是基于上一步的微调智能体负责理解“换”、“让”、“窗外是”这些动作和关系并默默处理好所有技术细节。这大大降低了使用难度提升了创作效率和体验让AI真正成为一个理解你意图的创作伙伴。2. 解决方案Skills智能体是如何工作的那么这个能对话的智能体内部是怎么运转的呢我们可以把它理解为一个三层结构交互层、推理层和执行层。整个过程就像有个贴心的项目经理在帮你协调。交互层就是和你聊天的界面。你在这里用自然语言提出要求比如“现在把头发改成金色”。这一层负责接收你的指令并把当前对话的历史包括你之前说的所有话和AI生成的图片一起打包送给下一层。推理层是智能体的大脑也是核心所在。它的任务很明确理解你在当前上下文中到底想干什么。它拿到对话历史和新指令后会进行一番“思考”。这个思考过程本质上是一个语言理解与生成任务。它会分析“用户之前要求生成一个黑发女孩现在新指令是‘把头发改成金色’。这是一个修改操作对象是‘头发’属性从‘黑色’变为‘金色’。”基于这个理解推理层会做两件事一是更新记忆把“女孩拥有金色头发”这个新事实记录到对话上下文中二是规划新指令它需要合成一个全新的、完整的文本提示词这个提示词要融合历史上所有有效指令并且确保它们之间没有冲突。比如最终合成的提示词可能是“一个拥有金色长发的年轻女孩戴着眼镜站在古典图书馆的书架前窗外阳光明媚摄影级画质细节丰富”。你看它自动把分散在多轮对话里的信息整合成了一个高质量的、模型能理解的“咒语”。执行层就是实干家了。它拿到推理层规划好的那个最终提示词去调用后端的Realistic Vision V5.1模型生成图像然后把结果返回给交互层展示给你看。整个流程的关键在于推理层。我们通常会用一个大语言模型来充当这个“大脑”因为它最擅长理解自然语言的上下文和意图。通过精心设计的提示词我们可以引导大语言模型扮演好这个“指令理解与合成者”的角色。这样我们就不是直接拿用户的原始输入去生图而是经过了一个智能的“翻译”和“规划”步骤使得多轮、增量的创作成为可能。3. 动手搭建从零构建你的对话式绘画助手理解了原理我们来看看如何动手实现它。这里我提供一个基于Python和Gradio的简易实现方案你可以在此基础上扩展功能。首先我们需要准备环境。这个方案主要依赖几个库transformers或openai用于与大语言模型交互diffusers用于调用Realistic Vision V5.1gradio用于构建聊天界面。# 假设你已经安装了Python环境以下是可能需要安装的库 pip install transformers torch diffusers accelerate gradio # 如果你使用OpenAI的模型作为推理大脑还需要 # pip install openai接下来我们分模块来构建这个系统。3.1 构建智能体“大脑”推理层我们首先需要定义智能体的核心——那个能理解上下文并规划新指令的模块。这里我以使用开源大语言模型为例。import torch from transformers import AutoTokenizer, AutoModelForCausalLM class InstructionPlanner: 指令规划器理解用户当前指令结合历史对话生成最终的生图提示词。 def __init__(self, model_nameQwen/Qwen2.5-7B-Instruct): # 加载一个开源的大语言模型和分词器 self.tokenizer AutoTokenizer.from_pretrained(model_name) self.model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto ) # 定义系统提示词告诉模型它应该扮演的角色 self.system_prompt 你是一个专业的AI绘画助手。你的任务是根据用户的多轮对话历史理解用户最新的指令并生成一个完整、详细、高质量的文本提示词用于生成图像。 对话历史包含了之前用户的要求和已生成的图像描述。你的输出必须只包含最终用于图像生成的提示词不要有任何额外的解释、前缀或后缀。 示例 历史用户说“生成一个女孩” 新指令“把头发改成金色” 输出一个金色头发的女孩肖像摄影风格细节丰富 历史用户说“生成一个女孩”然后说“把头发改成金色” 新指令“再加一副眼镜” 输出一个金色头发、戴着眼镜的女孩肖像摄影风格细节丰富 现在请根据以下对话历史和新指令生成最终的图像提示词。 def plan_instruction(self, conversation_history, new_user_instruction): # 构建给模型的输入信息 prompt f{self.system_prompt}\n\n对话历史{conversation_history}\n新指令{new_user_instruction}\n输出 inputs self.tokenizer(prompt, return_tensorspt).to(self.model.device) # 让模型生成提示词 with torch.no_grad(): outputs self.model.generate( **inputs, max_new_tokens150, temperature0.7, do_sampleTrue ) # 解码并清理输出只提取提示词部分 full_response self.tokenizer.decode(outputs[0], skip_special_tokensTrue) # 简单处理提取“输出”之后的内容作为最终提示词 final_prompt full_response.split(输出)[-1].strip() return final_prompt这个InstructionPlanner类就是智能体的推理核心。它通过一个精心设计的系统提示词引导大语言模型学会从多轮对话中合成最终指令。你可以替换model_name为任何你喜欢的、支持对话的模型。3.2 集成绘画模型执行层有了规划好的提示词下一步就是交给Realistic Vision V5.1来执行。我们使用diffusers库来调用模型。from diffusers import StableDiffusionPipeline import PIL.Image class ImageGenerator: 图像生成器接收文本提示词调用Realistic Vision V5.1模型生成图像。 def __init__(self, model_pathSG161222/Realistic_Vision_V5.1_noVAE): # 加载Realistic Vision V5.1模型管道 # 注意这是一个示例模型路径请确保你有权使用并下载了正确的模型 self.pipe StableDiffusionPipeline.from_pretrained( model_path, torch_dtypetorch.float16, safety_checkerNone, # 根据需求决定是否使用安全检查器 ).to(cuda) # 启用内存优化如果显存不足可以启用 self.pipe.enable_attention_slicing() def generate(self, prompt, negative_promptNone, steps30, guidance_scale7.5): 根据提示词生成图像 if negative_prompt is None: negative_prompt 低质量模糊畸形丑陋 # 默认的负面提示词 image self.pipe( promptprompt, negative_promptnegative_prompt, num_inference_stepssteps, guidance_scaleguidance_scale ).images[0] return image这里我们创建了一个ImageGenerator类专门负责与底层的扩散模型交互。negative_prompt可以用来排除我们不想要的特征有助于提升图像质量。3.3 打造聊天界面交互层与记忆最后我们需要一个界面把大脑和双手连接起来并且赋予智能体“记忆”能力。我们用Gradio来快速搭建一个Web界面。import gradio as gr from datetime import datetime class PaintingAssistant: 绘画助手整合规划器和生成器管理对话状态提供交互接口。 def __init__(self): self.planner InstructionPlanner() self.generator ImageGenerator() # 用一个列表来存储对话历史实现“记忆” self.conversation_history [] def chat_and_paint(self, user_input, history_state): 核心交互函数处理用户输入规划指令生成图像更新历史。 history_state是Gradio维护的聊天历史状态。 # 1. 将用户输入添加到对话历史记录中 self.conversation_history.append(f用户{user_input}) # 2. 将对话历史文本部分拼接成一个字符串供规划器使用 history_text | .join(self.conversation_history[-6:]) # 只保留最近几轮避免过长 # 3. 调用规划器生成最终的图像提示词 print(f规划指令历史{history_text} 新指令{user_input}) try: final_prompt self.planner.plan_instruction(history_text, user_input) print(f生成的最终提示词{final_prompt}) except Exception as e: return history_state, f指令规划出错{e}, None # 4. 调用生成器生成图像 print(开始生成图像...) try: image self.generator.generate(final_prompt) # 为生成的图片保存一个临时文件或直接使用 timestamp datetime.now().strftime(%Y%m%d_%H%M%S) image_path f./output/generated_{timestamp}.png image.save(image_path) except Exception as e: return history_state, f图像生成出错{e}, None # 5. 将AI的“思考”和结果添加到Gradio的聊天历史中 # 首先添加一条文本回复说明根据什么提示词生成了图像 history_state.append((user_input, f好的我理解了。我将基于以下描述为你创作\n**{final_prompt}**)) # 然后添加一条包含图片的回复 history_state.append((None, (image_path,))) # Gradio格式None表示用户没有说话 # 6. 将本次生成的提示词也记录到内部对话历史中供后续轮次参考 self.conversation_history.append(f助手根据指令生成了图像提示词为{final_prompt}) return history_state, , image_path # 返回更新后的历史、清空输入框、返回图片路径 # 创建助手实例 assistant PaintingAssistant() # 使用Gradio创建界面 with gr.Blocks(title对话式AI绘画助手) as demo: gr.Markdown(# 对话式AI绘画助手) gr.Markdown(像聊天一样描述你的画面我可以记住你的要求并逐步完善。) # 聊天机器人组件 chatbot gr.Chatbot(label创作对话, height400) msg gr.Textbox(label你的指令, placeholder例如生成一个女孩现在把头发改成金色...) with gr.Row(): submit_btn gr.Button(发送指令并生成) clear_btn gr.Button(清空对话) # 图像展示区域 gallery gr.Image(label最新生成的画作, interactiveFalse) # 按钮事件绑定 msg.submit( fnassistant.chat_and_paint, inputs[msg, chatbot], outputs[chatbot, msg, gallery] ) submit_btn.click( fnassistant.chat_and_paint, inputs[msg, chatbot], outputs[chatbot, msg, gallery] ) def clear_conversation(): assistant.conversation_history.clear() return None, None clear_btn.click( fnclear_conversation, inputs[], outputs[chatbot, gallery] ) # 启动应用 if __name__ __main__: demo.launch(shareTrue) # shareTrue会生成一个临时公网链接方便测试这段代码构建了一个完整的应用。PaintingAssistant类是整个应用的中枢它管理着对话历史记忆并协调规划器和生成器工作。Gradio界面则提供了一个直观的聊天窗口你可以像使用聊天软件一样输入指令看到AI的回复和生成的图片。运行这个脚本一个本地Web应用就会启动。你可以在浏览器中打开它开始体验多轮对话创作了。试着输入“生成一个在咖啡馆看书的女孩”然后说“把她的毛衣换成红色”再看看效果。你会发现智能体真的记住了“女孩”、“在咖啡馆”、“看书”这些信息并只对“毛衣颜色”进行了修改。4. 效果展示与场景延伸搭建完成后实际用起来效果怎么样呢我测试了几个典型的对话流程感觉就像在和一个理解力很强的画师沟通。比如我从“生成一个未来城市的夜景”开始。第一张图给了我一个布满霓虹灯和飞行器的都市。我觉得天空不够有冲击力于是说“让天空出现极光”。智能体理解了这是对“天空”属性的修改生成的城市依然保持原样但天幕上却增添了绚丽的绿色光带。我又觉得城市缺少焦点补充指令“在城市中央添加一个发光的巨型全息投影广告牌”。最终得到的图像完美融合了这三轮指令一个未来都市夜空闪烁着极光市中心矗立着耀眼的虚拟广告牌。整个过程非常流畅无需我反复描述整个场景。这个能力可以延伸到很多实际场景。对于角色设计可以从一个基础设定开始逐步添加服饰、道具、表情、背景细节。对于产品概念图可以先生成一个基础模型然后轮流调整颜色、材质、光影和摆放环境。对于营销素材创作可以快速生成多个背景相同、但主体物或文案不同的图片变体大大提高效率。更重要的是这种对话式交互降低了对“提示词工程”的依赖。用户不需要一次性成为精通各种关键词的大师可以通过自然的语言探索和迭代找到自己最想要的画面。这为AI绘画的普及和深度应用打开了一扇新的大门。5. 总结回过头看把Realistic Vision V5.1这样的顶级生图模型封装成具有记忆和规划能力的Skills智能体其实是在为人与AI的协作搭建一座更自然的桥梁。它捕捉到了人类创意过程迭代、渐进的特质并用技术手段将之实现。从技术实现上看核心在于利用大语言模型的理解与规划能力来“翻译”和“整合”用户碎片化、口语化的指令形成模型能高效执行的精准提示词。我们上面的代码示例提供了一个可行的起点你可以根据自己的需求强化它的记忆能力比如记住画面中每个元素的状态增加更复杂的指令类型如“把左边的A移到右边”甚至集成多个不同的绘画模型让智能体根据需求自动选择。用下来感觉这种对话式的创作体验比传统的单次生成要友好和高效得多。它让AI不再是一个冰冷的工具而更像一个能跟上你思维节奏的合作伙伴。如果你也对AI绘画感兴趣不妨试试这个思路从我们提供的简单代码开始打造一个专属你的、能听懂人话的智能画师。未来的创作方式或许就始于这样一次轻松的对话。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。