Qwen3-4B模型与ComfyUI工作流集成可视化AI应用搭建教程你是不是也对大模型的能力感到好奇但又觉得写代码调用API太麻烦或者你想把大模型的能力和你熟悉的图像生成、视频处理工作流结合起来却不知道从何下手今天我们就来解决这个问题。我将带你一步步把部署在星图GPU平台上的Qwen3-4B模型无缝接入到ComfyUI这个强大的可视化节点界面里。这样一来你不需要写一行复杂的代码只需要像搭积木一样拖拽节点、连接线条就能轻松调用大模型来帮你生成文本、编写代码甚至把它作为你复杂AI工作流中的一个智能环节。整个过程比你想象的要简单。我们不需要去修改ComfyUI的核心代码而是通过一个非常巧妙的方式——创建自定义节点Custom Nodes来桥接。下面就让我们开始这场从零开始的可视化AI应用搭建之旅。1. 准备工作理清思路与获取资源在开始动手之前我们先花几分钟把整个事情的逻辑理清楚。这能帮你更好地理解每一步在做什么而不是机械地跟着操作。核心思路是什么ComfyUI本身是一个基于节点的流程编排工具它擅长处理图像、视频类的数据流。而Qwen3-4B是一个文本大模型它通过HTTP API提供服务。我们的目标就是在ComfyUI里创建一个“特殊节点”。这个节点能接收你在ComfyUI界面里输入的文本然后悄悄地去调用远处星图平台上的Qwen3-4B API拿到生成的文本结果后再传回ComfyUI的流程中供后续节点使用。你需要准备什么一个已经部署好的Qwen3-4B模型实例假设你已经在星图GPU平台上成功部署了Qwen3-4B并且知道它的API访问地址例如http://your-server-ip:port/v1/chat/completions和可能的API Key。一个安装好的ComfyUI环境本地或服务器上的都可以。确保它能正常运行。基础的文件编辑能力我们会需要创建和修改几个Python文件。思路清晰了资源也备齐了我们就可以进入核心的动手环节了。2. 第一步创建你的第一个自定义文本节点ComfyUI的魅力在于其可扩展性。我们在其custom_nodes目录下创建一个专属文件夹作为我们所有Qwen3-4B相关节点的家。首先找到你的ComfyUI安装目录进入custom_nodes文件夹。创建一个新的文件夹名字可以直观一点比如qwen3_comfy_nodes。在这个文件夹里我们将创建第一个也是最重要的文件__init__.py。这个文件是Python包的标识也是ComfyUI发现和加载我们节点的入口。# 文件qwen3_comfy_nodes/__init__.py # 导入我们即将创建的节点类 from .qwen_text_generator import QwenTextGenerator # 这是一个标准的ComfyUI节点注册字典 # key “QwenTextGenerator” 是节点在菜单中显示的名称 # value 是对应的节点类 NODE_CLASS_MAPPINGS { “QwenTextGenerator”: QwenTextGenerator } # 这是节点在菜单中的显示名称可以和类名不同方便阅读 NODE_DISPLAY_NAME_MAPPINGS { “QwenTextGenerator”: “Qwen 3-4B 文本生成器” } # 这个字典用于定义节点需要的前端Web组件我们先留空 WEB_DIRECTORY “./js” __all__ [‘NODE_CLASS_MAPPINGS’, ‘NODE_DISPLAY_NAME_MAPPINGS’, ‘WEB_DIRECTORY’]这个文件很简单它告诉ComfyUI“嘿我这里有一个叫QwenTextGenerator的节点你把它加载到界面上吧显示的名字叫 ‘Qwen 3-4B 文本生成器’。”接下来就是实现这个节点核心逻辑的文件qwen_text_generator.py。# 文件qwen3_comfy_nodes/qwen_text_generator.py import comfy.sd # 通常用于获取模型信息这里可能用不到但导入以备不时之需 import comfy.utils # ComfyUI的工具函数 import folder_paths # 用于管理文件路径 import torch # 深度学习框架虽然我们调用API但保持环境一致性 import json # 用于处理API的JSON数据 import requests # 用于发送HTTP请求到我们的Qwen3-4B API import asyncio # 异步处理避免界面卡顿 # 从ComfyUI继承基础节点类 from comfy.sd import CLIP from nodes import Loader # 定义一个函数类别方便在ComfyUI节点菜单中归类 class QwenTextGenerator: # 定义节点的类别会在节点菜单的“qwen”分组下找到它 classmethod def INPUT_TYPES(cls): return { “required”: { # 这是一个多行文本输入框用于输入提示词 “prompt”: (“STRING”, {“multiline”: True, “default”: “请用Python写一个快速排序函数。”}), # 这是你的Qwen3-4B API的服务地址 “api_url”: (“STRING”, {“default”: “http://127.0.0.1:8000/v1/chat/completions”}), # API Key如果部署时设置了则需要 “api_key”: (“STRING”, {“default”: “your-api-key-here”, “multiline”: False}), # 生成文本的最大长度 “max_tokens”: (“INT”, {“default”: 512, “min”: 1, “max”: 4096}), # 控制生成随机性的温度参数 “temperature”: (“FLOAT”, {“default”: 0.7, “min”: 0.0, “max”: 2.0, “step”: 0.1}), }, } # 定义节点的返回值类型这里我们输出一个字符串 RETURN_TYPES (“STRING”,) # 定义返回值的显示名称 RETURN_NAMES (“generated_text”,) # 定义节点在界面上的显示名称 FUNCTION “generate_text” # 定义节点类别这会在节点浏览器中创建一个名为“qwen”的组 CATEGORY “qwen” # 节点的核心执行函数 def generate_text(self, prompt, api_url, api_key, max_tokens, temperature): # 准备请求头通常需要包含认证信息和内容类型 headers { “Content-Type”: “application/json”, } if api_key and api_key ! “your-api-key-here”: headers[“Authorization”] f“Bearer {api_key}” # 构建符合OpenAI API格式的请求数据 # 注意你需要根据你的Qwen3-4B API的实际要求调整这个结构 payload { “model”: “qwen3-4b”, # 模型名称根据你的部署调整 “messages”: [ {“role”: “user”, “content”: prompt} ], “max_tokens”: max_tokens, “temperature”: temperature, } try: # 发送POST请求到API response requests.post(api_url, headersheaders, jsonpayload, timeout30) response.raise_for_status() # 如果状态码不是200抛出异常 result response.json() # 解析响应提取生成的文本内容 # 这个路径需要根据你的API返回的实际JSON结构进行调整 generated_text result[‘choices’][0][‘message’][‘content’].strip() except requests.exceptions.RequestException as e: # 处理网络或请求错误 generated_text f“API请求失败: {e}” except (KeyError, json.JSONDecodeError) as e: # 处理响应解析错误 generated_text f“解析API响应失败: {e}。原始响应: {response.text[:200] if ‘response’ in locals() else ‘N/A’}” # 将生成的文本返回给ComfyUI工作流 return (generated_text,)保存这两个文件后重启你的ComfyUI。如果一切正常你应该能在节点浏览器的搜索框里输入“qwen”或者“Qwen”找到我们刚刚创建的“Qwen 3-4B 文本生成器”节点。把它拖到画布上连接上输入输出填入你的API地址点击“Queue Prompt”就能看到生成的文本了3. 第二步打造专属参数调节面板上面的节点虽然能用但所有参数都挤在一起不够直观。ComfyUI支持我们为节点创建美观的Web界面组件。让我们来给它加一个专属的“控制面板”。首先在qwen3_comfy_nodes文件夹下创建一个js文件夹然后在里面创建一个qwen_widgets.js文件。// 文件qwen3_comfy_nodes/js/qwen_widgets.js // 这是一个简单的示例为我们的节点添加一个说明性的标题栏 import { app } from “../../../scripts/app.js”; // 扩展ComfyUI的节点Widget类型 const ext { // 当ComfyUI创建节点时调用 async beforeRegisterNodeDef(nodeType, nodeData, app) { // 只对我们自定义的节点生效 if (nodeData.name “QwenTextGenerator”) { // 保存原始的onNodeCreated函数 const originalOnNodeCreated nodeType.prototype.onNodeCreated; // 重写onNodeCreated在节点创建后添加自定义元素 nodeType.prototype.onNodeCreated function () { // 先执行原始的函数 const result originalOnNodeCreated ? originalOnNodeCreated.apply(this, arguments) : undefined; // 在节点的widgets区域上方添加一个自定义的标题栏 const header document.createElement(“div”); header.style.cssText background: linear-gradient(90deg, #4f46e5, #7c3aed); color: white; padding: 8px 12px; margin-bottom: 10px; border-radius: 6px; font-weight: bold; text-align: center; font-size: 0.9em; ; header.textContent “ Qwen3-4B 文本生成”; // 找到widgets容器将标题插入到最前面 const widgets this.widgets; if (widgets widgets.length 0) { this.addDOMWidget(header, widgets[0].parentElement, true); } return result; }; } }, }; // 将扩展注册到ComfyUI app.registerExtension(ext);为了让ComfyUI加载这个JS文件我们需要修改__init__.py确保WEB_DIRECTORY路径正确。# 文件qwen3_comfy_nodes/__init__.py (更新部分) # ... 前面的导入和映射不变 ... # 确保路径指向我们创建的js文件夹 WEB_DIRECTORY “./js” # ... 后面的代码不变 ...重启ComfyUI后你会发现“Qwen 3-4B 文本生成器”节点顶部多了一个漂亮的紫色标题栏。这只是一个开始你可以用类似的方法添加滑块、下拉菜单等更复杂的交互控件让参数调节更加可视化。4. 第三步构建代码生成与审查工作流有了基础的文本生成节点我们就可以发挥ComfyUI工作流的优势搭建更复杂的应用。比如一个自动化的“代码生成与审查”流水线。这个工作流的思路是节点A需求输入输入一段自然语言描述的需求如“写一个Python函数从列表中删除重复项”。节点B代码生成使用我们的QwenTextGenerator节点将需求转换为代码。节点C代码审查再连接一个QwenTextGenerator节点或复用同一个但用不同的提示词让它扮演代码审查员的角色对生成的代码进行审查提出改进建议。节点D结果输出将生成的代码和审查意见一起输出或者保存到文件。在ComfyUI画布上你可以这样连接[需求输入文本节点] — [Qwen 代码生成节点] — [文本显示节点] | — [Qwen 代码审查节点] — [文本显示节点]你甚至可以为“代码审查”节点预设一个专门的提示词模板比如“你是一个资深的Python代码审查员。请审查以下代码指出其潜在问题、可优化点并给出修改后的代码{code}”。这样每次只需要把上一个节点生成的代码输入进来即可。通过这种拖拽连接的方式一个简单的自动化代码助手就搭建完成了。你可以保存这个工作流以后每次需要时一键加载无需重复配置。5. 总结走完这三个步骤你应该已经成功地将Qwen3-4B模型接入了ComfyUI并体验了可视化搭建AI应用的便捷。整个过程的核心其实就是理解ComfyUI自定义节点的机制——它本质上是一个包装器把对远程API的调用封装成一个有输入输出、有参数面板的“积木块”。这种方法的好处非常明显。对于不熟悉编程的用户他们终于可以绕过繁琐的curl命令或Python脚本在一个直观的图形界面里调用大模型。对于开发者或AI工作流设计者这意味着你可以把文本大模型的能力轻松嵌入到以ComfyUI为核心的、更复杂的多模态处理流水线中比如先让Qwen3-4B根据图片内容生成一段描述再用这个描述去驱动文生图模型。当然我们这里只是一个起点。你可以基于这个模式创建更多功能各异的节点比如支持多轮对话的节点、专门用于总结长文的节点、或者集成不同模型API的调度节点。ComfyUI的生态和你的想象力是唯一的限制。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Qwen3-4B模型与ComfyUI工作流集成:可视化AI应用搭建教程
发布时间:2026/5/25 16:37:07
Qwen3-4B模型与ComfyUI工作流集成可视化AI应用搭建教程你是不是也对大模型的能力感到好奇但又觉得写代码调用API太麻烦或者你想把大模型的能力和你熟悉的图像生成、视频处理工作流结合起来却不知道从何下手今天我们就来解决这个问题。我将带你一步步把部署在星图GPU平台上的Qwen3-4B模型无缝接入到ComfyUI这个强大的可视化节点界面里。这样一来你不需要写一行复杂的代码只需要像搭积木一样拖拽节点、连接线条就能轻松调用大模型来帮你生成文本、编写代码甚至把它作为你复杂AI工作流中的一个智能环节。整个过程比你想象的要简单。我们不需要去修改ComfyUI的核心代码而是通过一个非常巧妙的方式——创建自定义节点Custom Nodes来桥接。下面就让我们开始这场从零开始的可视化AI应用搭建之旅。1. 准备工作理清思路与获取资源在开始动手之前我们先花几分钟把整个事情的逻辑理清楚。这能帮你更好地理解每一步在做什么而不是机械地跟着操作。核心思路是什么ComfyUI本身是一个基于节点的流程编排工具它擅长处理图像、视频类的数据流。而Qwen3-4B是一个文本大模型它通过HTTP API提供服务。我们的目标就是在ComfyUI里创建一个“特殊节点”。这个节点能接收你在ComfyUI界面里输入的文本然后悄悄地去调用远处星图平台上的Qwen3-4B API拿到生成的文本结果后再传回ComfyUI的流程中供后续节点使用。你需要准备什么一个已经部署好的Qwen3-4B模型实例假设你已经在星图GPU平台上成功部署了Qwen3-4B并且知道它的API访问地址例如http://your-server-ip:port/v1/chat/completions和可能的API Key。一个安装好的ComfyUI环境本地或服务器上的都可以。确保它能正常运行。基础的文件编辑能力我们会需要创建和修改几个Python文件。思路清晰了资源也备齐了我们就可以进入核心的动手环节了。2. 第一步创建你的第一个自定义文本节点ComfyUI的魅力在于其可扩展性。我们在其custom_nodes目录下创建一个专属文件夹作为我们所有Qwen3-4B相关节点的家。首先找到你的ComfyUI安装目录进入custom_nodes文件夹。创建一个新的文件夹名字可以直观一点比如qwen3_comfy_nodes。在这个文件夹里我们将创建第一个也是最重要的文件__init__.py。这个文件是Python包的标识也是ComfyUI发现和加载我们节点的入口。# 文件qwen3_comfy_nodes/__init__.py # 导入我们即将创建的节点类 from .qwen_text_generator import QwenTextGenerator # 这是一个标准的ComfyUI节点注册字典 # key “QwenTextGenerator” 是节点在菜单中显示的名称 # value 是对应的节点类 NODE_CLASS_MAPPINGS { “QwenTextGenerator”: QwenTextGenerator } # 这是节点在菜单中的显示名称可以和类名不同方便阅读 NODE_DISPLAY_NAME_MAPPINGS { “QwenTextGenerator”: “Qwen 3-4B 文本生成器” } # 这个字典用于定义节点需要的前端Web组件我们先留空 WEB_DIRECTORY “./js” __all__ [‘NODE_CLASS_MAPPINGS’, ‘NODE_DISPLAY_NAME_MAPPINGS’, ‘WEB_DIRECTORY’]这个文件很简单它告诉ComfyUI“嘿我这里有一个叫QwenTextGenerator的节点你把它加载到界面上吧显示的名字叫 ‘Qwen 3-4B 文本生成器’。”接下来就是实现这个节点核心逻辑的文件qwen_text_generator.py。# 文件qwen3_comfy_nodes/qwen_text_generator.py import comfy.sd # 通常用于获取模型信息这里可能用不到但导入以备不时之需 import comfy.utils # ComfyUI的工具函数 import folder_paths # 用于管理文件路径 import torch # 深度学习框架虽然我们调用API但保持环境一致性 import json # 用于处理API的JSON数据 import requests # 用于发送HTTP请求到我们的Qwen3-4B API import asyncio # 异步处理避免界面卡顿 # 从ComfyUI继承基础节点类 from comfy.sd import CLIP from nodes import Loader # 定义一个函数类别方便在ComfyUI节点菜单中归类 class QwenTextGenerator: # 定义节点的类别会在节点菜单的“qwen”分组下找到它 classmethod def INPUT_TYPES(cls): return { “required”: { # 这是一个多行文本输入框用于输入提示词 “prompt”: (“STRING”, {“multiline”: True, “default”: “请用Python写一个快速排序函数。”}), # 这是你的Qwen3-4B API的服务地址 “api_url”: (“STRING”, {“default”: “http://127.0.0.1:8000/v1/chat/completions”}), # API Key如果部署时设置了则需要 “api_key”: (“STRING”, {“default”: “your-api-key-here”, “multiline”: False}), # 生成文本的最大长度 “max_tokens”: (“INT”, {“default”: 512, “min”: 1, “max”: 4096}), # 控制生成随机性的温度参数 “temperature”: (“FLOAT”, {“default”: 0.7, “min”: 0.0, “max”: 2.0, “step”: 0.1}), }, } # 定义节点的返回值类型这里我们输出一个字符串 RETURN_TYPES (“STRING”,) # 定义返回值的显示名称 RETURN_NAMES (“generated_text”,) # 定义节点在界面上的显示名称 FUNCTION “generate_text” # 定义节点类别这会在节点浏览器中创建一个名为“qwen”的组 CATEGORY “qwen” # 节点的核心执行函数 def generate_text(self, prompt, api_url, api_key, max_tokens, temperature): # 准备请求头通常需要包含认证信息和内容类型 headers { “Content-Type”: “application/json”, } if api_key and api_key ! “your-api-key-here”: headers[“Authorization”] f“Bearer {api_key}” # 构建符合OpenAI API格式的请求数据 # 注意你需要根据你的Qwen3-4B API的实际要求调整这个结构 payload { “model”: “qwen3-4b”, # 模型名称根据你的部署调整 “messages”: [ {“role”: “user”, “content”: prompt} ], “max_tokens”: max_tokens, “temperature”: temperature, } try: # 发送POST请求到API response requests.post(api_url, headersheaders, jsonpayload, timeout30) response.raise_for_status() # 如果状态码不是200抛出异常 result response.json() # 解析响应提取生成的文本内容 # 这个路径需要根据你的API返回的实际JSON结构进行调整 generated_text result[‘choices’][0][‘message’][‘content’].strip() except requests.exceptions.RequestException as e: # 处理网络或请求错误 generated_text f“API请求失败: {e}” except (KeyError, json.JSONDecodeError) as e: # 处理响应解析错误 generated_text f“解析API响应失败: {e}。原始响应: {response.text[:200] if ‘response’ in locals() else ‘N/A’}” # 将生成的文本返回给ComfyUI工作流 return (generated_text,)保存这两个文件后重启你的ComfyUI。如果一切正常你应该能在节点浏览器的搜索框里输入“qwen”或者“Qwen”找到我们刚刚创建的“Qwen 3-4B 文本生成器”节点。把它拖到画布上连接上输入输出填入你的API地址点击“Queue Prompt”就能看到生成的文本了3. 第二步打造专属参数调节面板上面的节点虽然能用但所有参数都挤在一起不够直观。ComfyUI支持我们为节点创建美观的Web界面组件。让我们来给它加一个专属的“控制面板”。首先在qwen3_comfy_nodes文件夹下创建一个js文件夹然后在里面创建一个qwen_widgets.js文件。// 文件qwen3_comfy_nodes/js/qwen_widgets.js // 这是一个简单的示例为我们的节点添加一个说明性的标题栏 import { app } from “../../../scripts/app.js”; // 扩展ComfyUI的节点Widget类型 const ext { // 当ComfyUI创建节点时调用 async beforeRegisterNodeDef(nodeType, nodeData, app) { // 只对我们自定义的节点生效 if (nodeData.name “QwenTextGenerator”) { // 保存原始的onNodeCreated函数 const originalOnNodeCreated nodeType.prototype.onNodeCreated; // 重写onNodeCreated在节点创建后添加自定义元素 nodeType.prototype.onNodeCreated function () { // 先执行原始的函数 const result originalOnNodeCreated ? originalOnNodeCreated.apply(this, arguments) : undefined; // 在节点的widgets区域上方添加一个自定义的标题栏 const header document.createElement(“div”); header.style.cssText background: linear-gradient(90deg, #4f46e5, #7c3aed); color: white; padding: 8px 12px; margin-bottom: 10px; border-radius: 6px; font-weight: bold; text-align: center; font-size: 0.9em; ; header.textContent “ Qwen3-4B 文本生成”; // 找到widgets容器将标题插入到最前面 const widgets this.widgets; if (widgets widgets.length 0) { this.addDOMWidget(header, widgets[0].parentElement, true); } return result; }; } }, }; // 将扩展注册到ComfyUI app.registerExtension(ext);为了让ComfyUI加载这个JS文件我们需要修改__init__.py确保WEB_DIRECTORY路径正确。# 文件qwen3_comfy_nodes/__init__.py (更新部分) # ... 前面的导入和映射不变 ... # 确保路径指向我们创建的js文件夹 WEB_DIRECTORY “./js” # ... 后面的代码不变 ...重启ComfyUI后你会发现“Qwen 3-4B 文本生成器”节点顶部多了一个漂亮的紫色标题栏。这只是一个开始你可以用类似的方法添加滑块、下拉菜单等更复杂的交互控件让参数调节更加可视化。4. 第三步构建代码生成与审查工作流有了基础的文本生成节点我们就可以发挥ComfyUI工作流的优势搭建更复杂的应用。比如一个自动化的“代码生成与审查”流水线。这个工作流的思路是节点A需求输入输入一段自然语言描述的需求如“写一个Python函数从列表中删除重复项”。节点B代码生成使用我们的QwenTextGenerator节点将需求转换为代码。节点C代码审查再连接一个QwenTextGenerator节点或复用同一个但用不同的提示词让它扮演代码审查员的角色对生成的代码进行审查提出改进建议。节点D结果输出将生成的代码和审查意见一起输出或者保存到文件。在ComfyUI画布上你可以这样连接[需求输入文本节点] — [Qwen 代码生成节点] — [文本显示节点] | — [Qwen 代码审查节点] — [文本显示节点]你甚至可以为“代码审查”节点预设一个专门的提示词模板比如“你是一个资深的Python代码审查员。请审查以下代码指出其潜在问题、可优化点并给出修改后的代码{code}”。这样每次只需要把上一个节点生成的代码输入进来即可。通过这种拖拽连接的方式一个简单的自动化代码助手就搭建完成了。你可以保存这个工作流以后每次需要时一键加载无需重复配置。5. 总结走完这三个步骤你应该已经成功地将Qwen3-4B模型接入了ComfyUI并体验了可视化搭建AI应用的便捷。整个过程的核心其实就是理解ComfyUI自定义节点的机制——它本质上是一个包装器把对远程API的调用封装成一个有输入输出、有参数面板的“积木块”。这种方法的好处非常明显。对于不熟悉编程的用户他们终于可以绕过繁琐的curl命令或Python脚本在一个直观的图形界面里调用大模型。对于开发者或AI工作流设计者这意味着你可以把文本大模型的能力轻松嵌入到以ComfyUI为核心的、更复杂的多模态处理流水线中比如先让Qwen3-4B根据图片内容生成一段描述再用这个描述去驱动文生图模型。当然我们这里只是一个起点。你可以基于这个模式创建更多功能各异的节点比如支持多轮对话的节点、专门用于总结长文的节点、或者集成不同模型API的调度节点。ComfyUI的生态和你的想象力是唯一的限制。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。