Qwen3-4B模型与ComfyUI工作流集成:可视化AI应用搭建教程
本文介绍了如何在星图GPU平台上自动化部署Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF镜像,并将其与ComfyUI可视化工作流集成。通过创建自定义节点,用户无需编写代码即可在图形界面中调用该模型,轻松实现文本生成、代码编写等核心AI应用,显著降低了复杂AI工作流的搭建门槛。
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, headers=headers, json=payload, timeout=30)
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星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐



所有评论(0)