专业企业网站建设多少钱服务,西安关键词seo,湖南网站建设价格,网站建设开票名称怎么写Qwen-Image-Edit与LangChain集成#xff1a;智能创作工作流 你是不是也遇到过这样的情况#xff1a;脑子里有个不错的创意#xff0c;想把它变成一张精美的图片#xff0c;但要么是PS技术不过关#xff0c;要么是找素材、调参数太费时间。或者#xff0c;你手头有一张不…Qwen-Image-Edit与LangChain集成智能创作工作流你是不是也遇到过这样的情况脑子里有个不错的创意想把它变成一张精美的图片但要么是PS技术不过关要么是找素材、调参数太费时间。或者你手头有一张不错的图片但想换个风格、加点元素却不知道从何下手。现在有了Qwen-Image-Edit这样的AI图像编辑模型事情变得简单多了。你只需要用自然语言描述一下你的想法它就能帮你把图片改得漂漂亮亮。但问题又来了如果我想批量处理一堆图片或者根据一段文字描述自动生成一系列配图难道要一张一张手动操作吗当然不用。今天我就来分享一个更高效的玩法把Qwen-Image-Edit和LangChain框架结合起来搭建一个端到端的智能内容创作流水线。简单来说就是让AI不仅能听懂你的话去改图还能自己规划任务、串联步骤实现自动化创作。1. 为什么要把它们俩凑一块在聊具体怎么做之前我们先看看这两个工具各自擅长什么以及为什么它们的组合能产生“112”的效果。Qwen-Image-Edit是一个功能强大的开源图像编辑模型。它的厉害之处在于不仅能根据文字描述生成新图片还能在现有图片的基础上进行精准编辑。比如你可以告诉它“把图里这个人的衣服换成红色的”或者“在这张海报上加上‘限时优惠’几个大字”它都能理解并执行。而且它对中文的支持特别好编辑文字时能保持原有的字体和风格这对于我们处理中文内容来说非常友好。LangChain则是一个用于构建大语言模型应用的框架。你可以把它想象成一个“智能调度中心”。它本身不直接生成图片或文字但它擅长规划任务、调用不同的工具比如图像模型、文本模型、搜索引擎等并把它们的结果串联起来形成一个完整的工作流。比如你可以告诉LangChain“帮我写一篇关于夏日旅行的公众号文章并配三张图。” LangChain就会先调用文本模型生成文章再根据文章内容调用图像模型生成配图。所以当Qwen-Image-Edit负责“动手”改图LangChain负责“动脑”规划和调度时一个智能的、自动化的内容创作流水线就诞生了。你只需要给出一个高层级的指令剩下的繁琐步骤都可以交给这个流水线来完成。2. 搭建前的准备工作在开始连接这两个工具之前我们需要先把它们各自的环境准备好。别担心步骤并不复杂。2.1 获取Qwen-Image-Edit的API访问权限目前使用Qwen-Image-Edit最方便的方式是通过阿里云的百炼平台调用其API。这样我们就不用自己在本地部署庞大的模型文件了。首先你需要有一个阿里云账号。登录后进入百炼控制台。在“模型广场”里找到“通义千问-图像编辑”Qwen-Image-Edit模型。通常新用户会有一定的免费额度足够我们进行体验和开发。找到模型后点击“开通”或“立即使用”然后进入“API密钥管理”页面。在这里你会看到一个api_key样子像sk-xxx。把它复制下来我们后面会用到。这个密钥就是你和Qwen-Image-Edit模型对话的“通行证”。为了安全起见我们不要把这个密钥直接写在代码里。最好把它设置成环境变量。打开你的终端命令行输入以下命令如果你用的是Windows可以在“系统属性”-“环境变量”里添加# Linux 或 Mac export DASHSCOPE_API_KEY你的-api-key-在这里 # Windows (命令提示符) set DASHSCOPE_API_KEY你的-api-key-在这里 # Windows (PowerShell) $env:DASHSCOPE_API_KEY你的-api-key-在这里设置好后我们的代码就能安全地读取这个密钥了。2.2 安装必要的Python库接下来我们需要安装LangChain和调用Qwen-Image-Edit API所需的SDK。打开你的终端创建一个新的项目文件夹然后用pip安装以下库# 创建项目文件夹并进入 mkdir qwen-langchain-pipeline cd qwen-langchain-pipeline # 创建虚拟环境可选但推荐 python -m venv venv # 激活虚拟环境 # Linux/Mac: source venv/bin/activate # Windows: venv\Scripts\activate # 安装核心库 pip install langchain langchain-community # 安装阿里云DashScope SDK这是调用Qwen系列模型的官方Python库 pip install dashscope # 安装其他可能用到的工具库 pip install python-dotenv # 用于管理环境变量 pip install requests # 用于下载图片安装完成后我们可以写一个简单的测试脚本来验证一下环境是否正常。3. 第一步让LangChain学会调用Qwen-Image-EditLangChain的核心思想之一是“工具”Tool。我们可以把任何能通过代码调用的功能比如一个函数、一个API包装成LangChain能理解的工具。这样LangChain的“智能体”Agent就可以在需要的时候使用这个工具。首先我们来创建一个最基础的、能调用Qwen-Image-Edit API的工具。# 文件qwen_image_tool.py import os import tempfile from typing import List, Optional from dashscope import MultiModalConversation import dashscope from langchain.tools import BaseTool from pydantic import BaseModel, Field # 设置API的基础URL通常使用北京地域 dashscope.base_http_api_url https://dashscope.aliyuncs.com/api/v1 class QwenImageEditInput(BaseModel): 定义工具的输入参数格式 image_paths: List[str] Field(description待编辑图片的本地文件路径列表支持1-3张图片。) instruction: str Field(description编辑指令用自然语言描述你想对图片做什么。例如把第一张图里人物的衣服换成红色。) output_count: Optional[int] Field(default1, description希望生成几张编辑后的图片默认为1。) class QwenImageEditTool(BaseTool): 一个LangChain工具用于调用Qwen-Image-Edit API编辑图片。 name qwen_image_editor description 使用Qwen-Image-Edit模型编辑图片。你需要提供图片路径和编辑指令。 args_schema QwenImageEditInput def _run(self, image_paths: List[str], instruction: str, output_count: int 1) - str: 执行工具调用API编辑图片并返回结果图片的保存路径。 # 1. 准备API调用所需的messages格式 messages [{role: user, content: []}] # 添加图片这里为了简化假设图片已经上传到可公网访问的URL。 # 实际生产环境需要先上传到OSS或使用Base64此处用本地文件路径示意逻辑 # 注意API目前要求输入是公网URL或Base64。本地文件需要先处理。 for img_path in image_paths: # 这里应该有一个将本地文件转换为Base64或上传到临时URL的函数 # upload_to_temp_url(img_path) 是一个假设的函数 temp_url self._upload_or_encode_image(img_path) messages[0][content].append({image: temp_url}) # 添加文本指令 messages[0][content].append({text: instruction}) # 2. 从环境变量获取API Key api_key os.getenv(DASHSCOPE_API_KEY) if not api_key: return 错误未设置DASHSCOPE_API_KEY环境变量。 # 3. 调用API try: response MultiModalConversation.call( api_keyapi_key, modelqwen-image-edit-max, # 使用效果最好的max版本 messagesmessages, streamFalse, noutput_count, # 生成图片的数量 watermarkFalse, # 不添加水印 size1024*1024, # 输出图片尺寸 ) if response.status_code 200: # 4. 处理成功响应下载图片到本地 output_paths [] for i, content in enumerate(response.output.choices[0].message.content): if image in content: image_url content[image] # 下载图片 saved_path self._download_image(image_url, suffixf_edited_{i}) output_paths.append(saved_path) return f图片编辑成功生成的文件保存在{, .join(output_paths)} else: return fAPI调用失败。状态码{response.status_code}, 错误信息{response.message} except Exception as e: return f调用过程中发生异常{str(e)} def _upload_or_encode_image(self, img_path: str) - str: 将本地图片转换为API可接受的格式示例逻辑需完善。 # 实际应用中你需要将图片上传到某个图床或转换为Base64。 # 这里返回一个示例URL仅用于演示代码结构。 # 提示可以使用阿里云OSS服务或简单的Base64编码注意图片大小限制。 return fdata:image/png;base64,...[Base64数据省略]... def _download_image(self, url: str, suffix: str ) - str: 从URL下载图片到本地临时文件。 import requests response requests.get(url, streamTrue, timeout300) response.raise_for_status() # 创建临时文件 with tempfile.NamedTemporaryFile(suffixf{suffix}.png, deleteFalse, modewb) as f: for chunk in response.iter_content(chunk_size8192): f.write(chunk) saved_path f.name return saved_path async def _arun(self, *args, **kwargs): 异步版本暂时不需要。 raise NotImplementedError(此工具暂不支持异步调用。)上面这个QwenImageEditTool类就是我们为LangChain创建的第一个工具。它做了几件事定义了工具的名字、描述和它需要哪些参数图片路径、指令、生成数量。在_run方法里它按照Qwen-Image-Edit API要求的格式组装数据然后调用API。拿到API返回的图片URL后把它下载到本地并告诉用户文件保存在哪里。有了这个基础工具LangChain的智能体就已经可以“使用”Qwen-Image-Edit了。但我们现在还只能手动调用这个工具。接下来我们要让LangChain能自动判断什么时候该用它。4. 设计一个简单的智能创作流水线现在我们来设计第一个流水线场景自动为博客文章生成封面图。假设我们有一篇已经写好的博客文章或者一个标题我们希望系统能自动理解文章内容然后生成一张与之匹配的封面图。这个流程可以分解为理解内容用一个大语言模型比如通义千问来阅读文章或标题提炼出核心主题和视觉关键词。规划指令根据提炼出的关键词生成一个给Qwen-Image-Edit的详细图片描述指令。执行编辑调用我们刚才创建的工具生成或编辑图片。输出结果把生成的图片路径和一段说明文字返回给用户。下面我们用代码来实现这个流程# 文件blog_cover_pipeline.py import os from langchain.agents import initialize_agent, AgentType from langchain.memory import ConversationBufferMemory from langchain_community.chat_models import ChatTongyi # 使用通义千问作为LLM from qwen_image_tool import QwenImageEditTool # 导入我们刚才写的工具 def create_cover_for_blog(blog_title: str, blog_content: str None) - str: 为博客文章生成封面的主函数。 # 1. 初始化大语言模型LLM # 使用通义千问同样需要DASHSCOPE_API_KEY llm ChatTongyi( modelqwen-max, # 使用效果较好的版本 dashscope_api_keyos.getenv(DASHSCOPE_API_KEY) ) # 2. 准备工具列表 tools [QwenImageEditTool()] # 3. 创建智能体Agent并赋予它记忆和规划能力 memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 使用ZERO_SHOT_REACT_DESCRIPTION类型的Agent它很擅长根据工具描述决定何时使用工具 agent initialize_agent( tools, llm, agentAgentType.ZERO_SHOT_REACT_DESCRIPTION, memorymemory, verboseTrue, # 设为True可以看到Agent的思考过程调试时很有用 handle_parsing_errorsTrue # 优雅地处理解析错误 ) # 4. 给Agent一个任务指令 # 指令要清晰告诉它第一步做什么第二步做什么。 if blog_content: user_input f 请帮我为我的博客文章生成一张封面图。 文章标题是{blog_title} 文章主要内容是{blog_content[:500]}... 内容较长此处为摘要 请你先分析这篇文章的核心主题和适合的视觉风格比如科技感、温馨、抽象等。 然后构思一个具体的图片描述这个描述将交给图像编辑模型去生成图片。 最后调用你的图片编辑工具根据你构思的描述生成一张图片。 请告诉我最终生成的图片保存在哪里。 else: user_input f 请仅根据这个标题为我生成一张博客封面图{blog_title}。 请你先解读这个标题想象一下什么样的图片能吸引读者。 然后构思一个具体的图片描述。 最后调用图片编辑工具生成图片并告诉我结果。 print(f 任务指令{user_input}) print(*50) # 5. 运行Agent try: result agent.run(user_input) return result except Exception as e: return f流水线执行出错{str(e)} if __name__ __main__: # 示例为一篇关于“AI如何改变内容创作”的博客生成封面 title AI时代每个人都是创作者智能工具如何重塑内容生产 content 本文探讨了人工智能写作助手、图像生成和视频编辑工具如何降低专业内容创作的门槛。 通过案例分析展示了个人和小团队如何利用这些工具提升效率、激发创意。 最后对未来人机协作的创作模式进行了展望。 print( 启动智能封面生成流水线...) final_result create_cover_for_blog(title, content) print(\n *50) print( 流水线执行完毕) print(f最终结果\n{final_result})当你运行这段代码时如果设置了verboseTrue你会在控制台看到类似下面的思考过程这是LangChain Agent的典型反应模式思考用户想让我生成博客封面。我需要先理解文章内容然后构思图片描述最后调用工具。 行动我应该先自己分析一下内容。 观察这篇文章讲的是AI工具如何让普通人也能成为创作者主题是科技和赋能。 思考现在我需要构思一个视觉上能体现“科技赋能创作”的图片描述。想到了可以是一个人的手手中发出光芒光芒中浮现出文字、画笔和音乐符号等创作元素背景是简洁的深色星空有微小的数据流划过整体风格是数字朋克与简约的结合。 行动现在我有具体的描述了可以调用图片编辑工具了。但我没有现成的图片。工具描述说需要图片路径。哦Qwen-Image-Edit也支持从零生成text-to-image当不提供图片路径时我应该用文本描述直接生成。 行动我将使用 qwen_image_editor 工具。 调用以 {image_paths: [], instruction: 生成一张图片一只人类的手伸向屏幕手中发出温暖的白色光芒光芒中浮现出漂浮的铅笔、书本、音乐音符和调色板等创作工具图标。背景是深邃的蓝色星空有细微的、发光的数字0和1如流星般划过。整体风格是数字朋克与极简主义的结合充满未来感和希望。, output_count: 1} 为参数调用 qwen_image_editor... 观察图片编辑成功生成的文件保存在/tmp/tmpxyz123.png 思考我得到了图片的保存路径。现在可以把这个结果告诉用户了。 最终答案已成功为您生成博客封面图图片文件保存在 /tmp/tmpxyz123.png它描绘了一只发光的手创造出各种创作工具体现了AI赋能创作的主题。看这个Agent自己完成了分析、构思、调用工具的全过程这就是LangChain智能体的魅力所在。你不需要写死每一步的逻辑只需要给它工具和清晰的指令它就能自己规划执行。5. 进阶构建更复杂的链式编辑工作流Qwen-Image-Edit有一个强大的功能叫“链式编辑”也就是可以对一张图进行多次、逐步的修改。这在LangChain里可以很自然地实现因为LangChain的核心概念就是“链”Chain它可以把多个步骤串联起来。让我们设计一个更复杂的场景自动将产品白底图转化为场景化营销海报。这个任务可能需要多步完成为产品找一个合适的背景场景比如咖啡杯放在温馨的咖啡馆窗台。将产品图与背景融合。在海报上添加吸引人的广告文案。调整整体色调和风格使其符合品牌调性。我们可以用LangChain的SequentialChain顺序链来组织这个多步流程。# 文件product_poster_pipeline.py import os from langchain.chains import LLMChain, SequentialChain from langchain.prompts import PromptTemplate from langchain_community.chat_models import ChatTongyi from qwen_image_tool import QwenImageEditTool from langchain.agents import Tool, initialize_agent def create_product_poster(product_image_path: str, product_name: str, key_selling_point: str) - str: 将产品白底图转化为营销海报。 llm ChatTongyi(modelqwen-max, dashscope_api_keyos.getenv(DASHSCOPE_API_KEY)) # 步骤1LLMChain - 创意策划生成分步编辑指令 planning_template 你是一个资深电商视觉设计师。现在需要为一款{product_name}制作营销海报。 产品的核心卖点是{key_selling_point}。 你有一张产品的纯白底图路径已提供。 请设计一个三步的图像编辑方案将白底图变成吸引人的场景海报。 每一步都需要一个明确的、可执行的编辑指令这些指令将直接交给AI图像编辑模型。 请按以下格式输出 第一步[指令将产品图放置在一个什么样的背景中描述具体场景。] 第二步[指令融合后调整哪些细节如光影、透视、产品在场景中的位置] 第三步[指令在海报上添加什么广告文案文案内容是什么用什么风格字体和排版] planning_prompt PromptTemplate( input_variables[product_name, key_selling_point], templateplanning_template ) planning_chain LLMChain(llmllm, promptplanning_prompt, output_keyediting_plan) # 步骤2另一个LLMChain - 将计划解析为单个工具调用指令这里简化实际可能需要更复杂的解析 # 假设我们决定先执行第一步换背景 # 我们直接构造第一步的指令 first_step_instruction f将产品{product_name}放置在符合其卖点{key_selling_point}的精致、吸引人的场景背景中替换掉白色背景。保持产品本身细节不变。 # 步骤3调用工具执行第一步编辑 # 我们需要将工具包装成LangChain Agent能用的格式以便在链中调用 # 这里我们创建一个简单的函数来模拟链中的工具调用 def execute_image_edit(instruction: str, input_img_path: str) - str: 在链中执行图像编辑的辅助函数。 tool QwenImageEditTool() # 假设编辑需要原图 result tool.run(image_paths[input_img_path], instructioninstruction, output_count1) # 从结果字符串中提取生成的图片路径这里需要根据实际返回格式解析 # 假设返回格式是“图片编辑成功生成的文件保存在/path/to/image.png” if 保存在 in result: return result.split(保存在)[-1].strip() else: # 如果解析失败返回一个标记实际应用需要更健壮的逻辑 return /tmp/step1_output.png # 执行第一步 step1_output_path execute_image_edit(first_step_instruction, product_image_path) print(f 第一步完成背景替换图保存在{step1_output_path}) # 后续步骤可以类似地继续使用上一步的输出作为下一步的输入实现链式编辑 # 步骤4LLMChain - 分析第一步结果生成第二步指令例如添加文案 # 这里为了简化我们直接给出第二步指令 second_step_instruction f在图片的醒目位置添加广告文案文案内容要突出{key_selling_point}字体清晰现代排版美观不要遮挡产品主体。 # 步骤5执行第二步编辑以第一步的结果为输入 final_output_path execute_image_edit(second_step_instruction, step1_output_path) print(f 第二步完成最终海报保存在{final_output_path}) return f营销海报生成完成最终文件{final_output_path}。您可以根据需要继续调整文案或风格。 # 注意上述代码中的 execute_image_edit 函数和路径解析是高度简化的。 # 在实际生产中你需要 # 1. 一个更可靠的方式来管理中间文件路径。 # 2. 可能要用到LangChain的Tool类和Agent来更灵活地在链中调用工具。 # 3. 处理API调用可能出现的各种错误。 if __name__ __main__: # 假设我们有一个“智能保温杯”的产品图 # product_image_path /path/to/your/mug_white_bg.png product_image_path placeholder_path.png # 请替换为实际图片路径 product_name 智能保温杯 key_selling_point 24小时长效保温轻触显示水温 print( 启动产品海报智能生成流水线...) result create_product_poster(product_image_path, product_name, key_selling_point) print(\n *50) print(result)这个例子展示了如何用多个“链”来组织一个多步骤的任务。虽然代码比单个Agent复杂但结构更清晰对于有固定步骤的流程控制力更强。你可以根据实际需求在“顺序链”里加入更多的步骤比如风格滤镜调整、多尺寸版本生成等。6. 总结与展望把Qwen-Image-Edit和LangChain集成起来就像是给一个强大的“画手”配了一个聪明的“导演”。画手Qwen-Image-Edit负责执行具体的绘画和修改而导演LangChain负责理解剧本你的需求、规划拍摄顺序工作流、并指导画手完成每一个镜头图像编辑步骤。我们一步步走过来从创建一个基础的图像编辑工具到设计一个能自动分析文章并生成封面的智能体再到规划一个多步骤的产品海报生成链。你会发现这种集成方式的核心优势在于灵活性和自动化。一旦搭建好基础框架你就可以通过修改给LangChain的“指令”轻松创造出各种各样的图像处理流水线比如社交媒体内容批量制作输入一周的文案主题自动生成9张风格统一的配图。电商商品图自动化处理自动为新产品目录中的图片统一背景、添加水印和卖点标签。个性化贺卡生成根据收件人信息和节日自动生成带有定制文案和图案的贺卡。当然今天分享的代码主要是为了展示思路和可行性在实际项目中使用还需要考虑更多工程细节比如错误处理、文件管理、API成本控制、处理速度优化等。用下来的整体感觉是Qwen-Image-Edit的编辑能力确实很强尤其是对中文的理解和文字编辑超出了我的预期。而LangChain则像一根线能把散落的能力珍珠串成一条完整的项链。如果你正在做内容创作、电商或设计相关的项目不妨试试这个组合它可能会帮你打开一扇新的大门把更多重复性的视觉工作交给AI让自己更专注于创意和策略本身。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。