ComfyUI-ExLlama-Nodes 插件完全教程
1. 插件简介
插件地址: https://github.com/Zuellni/ComfyUI-ExLlama-Nodes
这个插件就像是给 ComfyUI 装了一个"本地聊天机器人",让你可以在自己的电脑上运行各种大语言模型(比如 ChatGPT 那样的 AI),而不需要联网。想象一下,你有一个私人助手住在你的电脑里,随时可以帮你写文章、回答问题、翻译内容等等。
能给我们带来什么效果:
- 🤖 在本地运行各种 AI 聊天模型,保护隐私
- 💬 创建对话系统,可以多轮聊天
- 📝 自动生成文本内容
- 🔧 处理和清理文本内容
- 🎯 完全离线工作,不需要网络
插件包含节点总数: 10个节点
- ExLlama 相关节点:5个(用于 AI 模型运行)
- Text 文本处理节点:5个(用于文本处理)
2. 如何安装
方法一:通过 ComfyUI Manager(推荐)
- 打开 ComfyUI
- 点击右下角的 "Manager" 按钮
- 搜索 "ExLlama"
- 找到这个插件后点击安装
方法二:手动安装
- 找到你的 ComfyUI 安装目录
- 进入
custom_nodes文件夹 - 在这里打开命令行(终端)
- 输入以下命令:
git clone https://github.com/Zuellni/ComfyUI-ExLlama-Nodes
pip install -r ComfyUI-ExLlama-Nodes/requirements.txt
安装模型
你需要下载 AI 模型文件,就像下载游戏一样:
- 在 ComfyUI 的
models文件夹里创建一个叫llm的文件夹 - 去 Hugging Face 网站下载支持的模型(EXL2、4-bit GPTQ 或 FP16 格式)
- 把模型文件放到
models/llm文件夹里
3. 节点详细解析
3.1 Loader 节点 - 模型加载器
这个节点是干嘛的?
就像启动一个游戏前要先加载游戏文件一样,这个节点负责把 AI 模型加载到内存里,让它准备好回答问题。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | 下拉选择 | 根据需要选择 | 选择要使用的 AI 大脑,就像选择不同的助手 | 选择要加载的语言模型文件 | 如果你下载了 Llama 模型,就选择它 |
| cache_bits | cache_bits | 4/6/8/16 | 4 | 控制显存占用,数字越小越省显存但速度可能慢一点 | 缓存精度,影响显存使用和生成质量 | 显存不够用就选4,显存充足选8或16 |
| flash_attention | flash_attention | True/False | True | 开启后更省显存,就像压缩文件一样 | 启用Flash Attention优化显存使用 | 新显卡建议开启,老显卡可能不支持 |
| max_seq_len | max_seq_len | 0-1048576 | 2048 | 控制 AI 能记住多长的对话,就像短期记忆容量 | 最大序列长度,影响上下文窗口大小 | 需要长对话就设大一点,如4096 |
3.2 Formatter 节点 - 对话格式化器
这个节点是干嘛的?
把你的问题和 AI 的回答整理成 AI 能理解的格式,就像把散乱的对话整理成有条理的聊天记录。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | EXL_MODEL | - | 连接已加载的 AI 模型 | 输入的模型对象引用 | 连接 Loader 节点的输出 |
| messages | messages | EXL_MESSAGES | - | 输入要格式化的对话消息 | 消息列表对象 | 连接 Message 节点的输出 |
| add_assistant_role | add_assistant_role | True/False | True | 是否在最后加上"助手:"提示,让 AI 知道该它说话了 | 是否添加助手角色提示符 | 一般保持开启,让对话更自然 |
3.3 Tokenizer 节点 - 文本编码器
这个节点是干嘛的?
把人类的文字转换成 AI 能理解的数字代码,就像把中文翻译成计算机语言。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | EXL_MODEL | - | 连接已加载的 AI 模型 | 输入的模型对象引用 | 连接 Loader 节点的输出 |
| text | text | STRING | - | 要转换成数字的文字内容 | 需要编码的文本字符串 | 输入"你好"会转换成一串数字 |
| add_bos_token | add_bos_token | True/False | True | 是否在开头加个"开始"标记,就像句子前的大写字母 | 是否添加序列开始标记 | 一般保持开启,让 AI 知道文本开始了 |
| encode_special_tokens | encode_special_tokens | True/False | True | 是否把特殊符号也转换成数字 | 是否编码特殊标记符号 | 开启后连标点符号都会被正确处理 |
3.4 Settings 节点 - 生成设置器
这个节点是干嘛的?
控制 AI 回答的风格和随机性,就像调节收音机的音量、音调一样,让 AI 的回答更符合你的需要。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| temperature | temperature | 0.0-10.0 | 1.0 | 控制回答的创意程度,越高越有创意但可能越不靠谱 | 采样温度,控制输出随机性 | 写诗设2.0,做数学题设0.1 |
| penalty | penalty | 1.0-10.0 | 1.0 | 防止 AI 重复说同样的话,就像提醒它别啰嗦 | 重复惩罚系数 | 设1.1可以减少重复,设太高会让回答很奇怪 |
| top_k | top_k | 0-1000 | 1 | 限制 AI 只能从最可能的几个词中选择 | Top-K采样参数 | 设50表示只从最可能的50个词中选 |
| top_p | top_p | 0.0-1.0 | 0.0 | 另一种限制选词范围的方法,按概率累积 | Top-P采样参数 | 设0.9表示选择概率累积到90%的词 |
| top_a | top_a | 0.0-1.0 | 0.0 | 根据词的重要性来筛选,过滤不重要的词 | Top-A采样参数 | 一般保持0.0,高级用户可以调整 |
| min_p | min_p | 0.0-1.0 | 0.0 | 设置最低概率门槛,太不可能的词直接排除 | 最小概率阈值 | 设0.05可以过滤掉很不可能的词 |
| tfs | tfs | 0.0-1.0 | 0.0 | 尾部自由采样,让回答更自然流畅 | 尾部自由采样参数 | 一般保持0.0,特殊需求时调整 |
| typical | typical | 0.0-1.0 | 0.0 | 让 AI 选择"典型"的词,避免太奇怪的表达 | 典型采样参数 | 设0.95可以让回答更符合常理 |
| temperature_last | temperature_last | True/False | True | 决定温度调节在哪个步骤生效 | 温度是否最后应用 | 一般保持True,让其他设置先生效 |
3.5 Generator 节点 - 文本生成器
这个节点是干嘛的?
这是最核心的节点,让 AI 真正开始"思考"并生成回答,就像按下"开始对话"按钮。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| model | model | EXL_MODEL | - | 连接已加载的 AI 模型 | 输入的模型对象引用 | 连接 Loader 节点的输出 |
| tokens | tokens | EXL_TOKENS | - | 输入编码后的文字数据 | 输入的标记序列 | 连接 Tokenizer 节点的输出 |
| unload | unload | True/False | False | 生成完后是否卸载模型来节省显存 | 生成后是否卸载模型 | 显存紧张时开启,但会影响连续对话速度 |
| stop_conditions | stop_conditions | STRING | "\n" | 设置什么情况下停止生成,就像句号表示句子结束 | 停止条件列表 | 设"\n"在换行时停止,设""只在自然结束时停止 |
| max_tokens | max_tokens | 0-1048576 | 128 | 最多生成多少个词,防止 AI 说个没完 | 最大生成标记数 | 写短句设50,写文章设500 |
| seed | seed | 0-2^64-1 | 0 | 随机种子,相同种子会产生相同结果 | 随机数种子 | 设固定值可以让结果可重复 |
| settings | settings | EXL_SETTINGS | 可选 | 连接生成设置,控制回答风格 | 可选的采样设置对象 | 连接 Settings 节点来精细控制 |
3.6 Clean 节点 - 文本清理器
这个节点是干嘛的?
就像给文字"洗澡"一样,去掉多余的空格、标点,统一大小写,让文字变得整洁干净。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| text | text | STRING | - | 要清理的文字内容 | 输入的文本字符串 | 输入" Hello World!!! "会被清理 |
| strip | strip | both/punctuation/whitespace/none | both | 去掉什么东西:both=标点和空格,punctuation=只去标点,whitespace=只去空格 | 去除字符类型选择 | 处理用户输入时选both,保留格式时选none |
| case | case | lower/upper/capitalize/title/none | lower | 改变大小写:lower=全小写,upper=全大写,capitalize=首字母大写,title=每个词首字母大写 | 大小写转换选项 | 统一格式时用lower,标题用title |
| fix | fix | True/False | True | 是否修复多余的空行和空格,让文字排版更整齐 | 是否修复空白字符 | 处理复制粘贴的文字时很有用 |
3.7 Message 节点 - 消息创建器
这个节点是干嘛的?
创建对话消息,就像在聊天软件里发消息一样,可以指定是谁说的话(系统、用户还是助手)。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| role | role | system/user/assistant | system | 指定说话的角色:system=系统指令,user=用户问题,assistant=AI回答 | 消息角色类型 | system用于设定AI性格,user是你的问题 |
| content | content | STRING | - | 消息的具体内容,就是要说的话 | 消息文本内容 | 输入"你是一个友善的助手"作为系统消息 |
| messages | messages | EXL_MESSAGES | 可选 | 连接之前的消息,用于多轮对话 | 可选的消息链输入 | 连接上一个Message节点来形成对话链 |
3.8 Preview 节点 - 文本预览器
这个节点是干嘛的?
显示生成的文字内容,就像聊天软件的消息显示框,让你看到 AI 说了什么。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| text | text | STRING | - | 要显示的文字内容 | 输入的文本字符串 | 连接Generator节点的输出来显示AI回答 |
| print_to_console | print_to_console | True/False | False | 是否同时在控制台(后台日志)里显示 | 是否输出到控制台 | 调试时开启,正常使用关闭 |
| output | output | STRING | - | 显示区域,这里会显示文字内容 | 输出显示区域 | 这是只读的,会自动显示内容 |
3.9 Replace 节点 - 文本替换器
这个节点是干嘛的?
像填空题一样,把文字模板里的占位符替换成真实内容,比如把"{name}"替换成"小明"。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| count | count | 1-26 | 1 | 设置要替换几个占位符,会自动创建对应的输入框 | 替换变量的数量 | 设3会创建a、b、c三个输入框 |
| text | text | STRING | - | 包含占位符的文字模板 | 模板文本内容 | 输入"你好{a},今天是{b}"这样的模板 |
| a,b,c... | 动态生成 | STRING | - | 根据count数量动态生成的替换内容输入框 | 替换变量值 | a框输入"小明",b框输入"星期一" |
3.10 String 节点 - 字符串常量
这个节点是干嘛的?
就是一个文字输入框,用来输入固定的文字内容,像便签纸一样记录文字。
参数详解:
| 参数名 (UI显示) | 参数名 (代码里) | 参数值 | 建议值 | 通俗解释 (能干嘛的) | 专业解释 | 怎么用/举个例子 |
|---|---|---|---|---|---|---|
| text | text | STRING | - | 要输入的文字内容 | 字符串文本内容 | 输入系统提示词或固定的问题 |
4. 使用技巧和建议
4.1 显存优化技巧
- 显存不够用? 把 Loader 节点的 cache_bits 设为 4,开启 flash_attention
- 需要长对话? 适当增加 max_seq_len,但要注意显存消耗
- 批量处理? 开启 Generator 的 unload 选项,处理完自动释放显存
4.2 生成质量优化
- 要创意回答? 提高 Settings 的 temperature 到 1.5-2.0
- 要准确回答? 降低 temperature 到 0.1-0.3
- 避免重复? 设置 penalty 为 1.1-1.2
- 控制长度? 合理设置 max_tokens 和 stop_conditions
4.3 工作流建议
- 基础对话流程: String → Message → Formatter → Tokenizer → Generator → Preview
- 多轮对话: 多个 Message 节点串联,最后连接 Formatter
- 文本处理: Generator → Clean → Preview,清理生成的文字
- 模板应用: String → Replace → Message,使用文字模板
5. 常见问题解答
Q1: 为什么加载模型很慢?
A: 这是正常的,AI 模型文件很大(几个GB到几十GB),第一次加载需要时间。就像启动大型游戏一样,耐心等待即可。
Q2: 显存不够怎么办?
A:
- 降低 cache_bits 到 4
- 开启 flash_attention
- 减少 max_seq_len
- 开启 Generator 的 unload 选项
Q3: AI 回答很奇怪怎么办?
A:
- 检查 temperature 是否设置过高
- 确认 Messages 的 role 设置正确
- 尝试调整 penalty 参数
- 检查模型是否适合当前任务
Q4: 如何实现多轮对话?
A: 使用多个 Message 节点,按顺序连接:
- 第一个 Message(system 角色)设置 AI 性格
- 第二个 Message(user 角色)输入用户问题
- 可以继续添加更多 Message 节点形成对话历史
Q5: 生成速度太慢怎么办?
A:
- 检查是否开启了 flash_attention
- 确认显卡支持 CUDA
- 尝试使用更小的模型
- 减少 max_tokens 设置
6. 高级应用示例
6.1 智能客服系统
String("你是一个专业的客服助手") → Message(system)
→ String("用户问题:{question}") → Replace → Message(user)
→ Formatter → Tokenizer → Generator → Clean → Preview
6.2 文章续写工具
String("请续写这篇文章:") → Message(user)
→ Formatter → Tokenizer → Settings(temperature=1.2) → Generator → Preview
6.3 代码解释器
String("请解释这段代码:{code}") → Replace → Message(user)
→ Formatter → Tokenizer → Settings(temperature=0.3) → Generator → Preview
7. 总结
这个插件为 ComfyUI 带来了强大的本地 AI 对话能力,通过 10 个精心设计的节点,你可以:
- 🤖 运行各种大语言模型
- 💬 创建复杂的对话系统
- 📝 处理和生成文本内容
- 🔧 精细控制 AI 的行为
节点统计:
- 总节点数:10个
- ExLlama 节点:5个(Loader, Formatter, Tokenizer, Settings, Generator)
- Text 节点:5个(Clean, Message, Preview, Replace, String)
- 本次已全部输出:10/10个节点
无论你是 AI 新手还是高级用户,这个插件都能满足你的需求。从简单的问答到复杂的文本处理,一切都在你的掌控之中!