# **节点使用说明**

## 模型加载器以及模型链

### API LLM节点及其加载节点
1. 可以直接在节点上输入系统提示词、用户提示词，也可以使用system prompt input和user prompt input来输入，可接受字符串类型的输入。system input一般用来挂载面具节点。本质上和输入框没有区别
2. 大模型节点还可以从tools接口接受工具节点的输出，可以从file_content接口接受字符串形式的输入，这些输入会被当作模型的知识库，以词向量相似度来搜索相关的内容输入到模型中。
3. 大模型节点的is_memory可以决定大模型是否拥有记忆，可以将is_memory改为disable，再运行，这时模型会清楚之前的对话记录，再切换回enable，之后的运行中模型就会保留与你的对话记录。
4. 可以通过assistant_response来查看本轮对话中模型的回复，也可以通过history来查看多轮对话的历史记录。
5. 即使外部参数不变，大模型节点总是会运行，因为大模型对同一个问题也总是有着不同的回答。
6. Input：
  - is_tools_in_sys_prompt：决定了tools的信息是否会输入到系统提示词中。如果输入到系统提示词中，可以让部分没有工具能力的模型解锁工具能力。
  - Is_memory :开启后，LLM获得记忆，如果不开启，就每次都会清除记忆，重新开始。 
  - is_locked：当你没有更改任何参数时，直接返回上轮对话的结果，节省算力，稳定LLM的输出结果。
  - main_brain：决定了大模型是不是与用户对接的模型，禁用后，LLM节点可以作为另一个LLM节点的一个工具。
  - conversation_rounds：决定了LLM的对话轮次，当超出对话轮次后，会只读取最近的对话轮次。
  - historical_record：可以将之前的对话记录加载到LLM中，继续上次的聊天。
  - tools：输入为LLM的工具调用接口，tool输出则是将该LLM节点当做工具使用的接口，一般不使用。
  - Imgbb api key 是可选的，如果你使用视觉功能时，不填这个key，就是base64编码传输到openai，如果加了一个key，就是图床生成URL后，将URL传入openai，不填也不影响使用，只是会影响对话记录的可读性。
7. Output：
  - assistant_response：为LLM的文字输出
  - history：为LLM的对话记录
  - Tool :当LLM作为另一个LLM的工具时，启用这个输出。大部分情况下可以无视。
  - Image: 在施工中，未来有用。
8. LLM适配GPT4的视觉功能，imgbb_api_key可以输入[imgbb](https://imgbb.com/)的api_key，填入之后你的图片会以url格式传入GPT，如果不填，就是以图片编码的形式传入。
9. 大模型节点可以自定义模型名称、API_KEY、base_url，目前暂时只支持openai类型的API接口调用。可以结合one api 转接任意大模型API

### 本地LLM节点及其加载节点
1. 大幅调整了本地LLM加载器节点，不用自己选择model type了。重新添加了llava加载器节点和GGUF加载器节点。本地LLM模型链节点上的model type已改成LLM、VLM-GGUF、LLM-GGUF三个选项，对应了直接加载LLM模型、加载VLM模型和加载GGUF格式的LLM模型。重新支持了VLM模型和GGUF格式的LLM模型。现在本地调用可以兼容更多的模型了！示例工作流：LLM_local，llava，GGUF
2. model_name_or_path填入模型的项目文件夹即可，适配所有可以被transformer兼容的型号。也可以填写hugging face上的repo id，直接拉取模型。
3. 其余参数与API LLM节点一致。

### VLM-GGUF模型加载器
1. ckpt_path和clip_path分别填入LLM的GGUF文件绝对路径和CLIP的GGUF文件绝对路径。
2. max_ctx是LVM模型的最大上下文长度，如果超过这个长度，模型会自动截断。
3. gpu_layers是LVM模型在GPU上的层数。
4. n_threads是LVM模型在CPU上的线程数。

### LLM-GGUF模型加载器
1. 同上，但只用填入LLM的GGUF文件绝对路径

### VLM本地加载器
1. 和LLM本地加载器一样，但是只支持类似于llama3.2-vision的模型，用该节点加载时，需要将模型链上的model type 设置为LVM（testing），这个加载器还在测试中，不能适配很多模型。

### 词嵌入模型加载器
1. file_content节点可以输入一个字符串，该字符串会被作为词嵌入模型的输入，模型会在这个字符串上进行搜索，根据question来返回最相关的文本内容。
2. k是返回的段落数量，chuck_size为文本分割时，每个文本块的大小，默认为200，chuck_overlap为文本分割时，每个文本块之间的重叠大小，默认为50。
3. 输入embedding_path，会调用这个文件夹内的词嵌入模型

## 其他加载器

### 加载文件节点
1. 读取文件的路径在comfyui_LLM_party/file，可以将你要读取的文件放到这个路径下，然后把文件名填入该节点即可
2. 可以选择绝对路径输入，这时候path可以接受一个绝对路径
3. 输出是一个字符串，包含了文件中所有的文字信息
4. 适配的文件格式为：".docx"、".txt"、".pdf"、".xlsx"、".csv"、".py", ".js", ".java", ".c", ".cpp", ".html", ".css", ".sql", ".r", ".swift"


### 加载文件夹节点
1. folder_path可以接受一个文件夹的绝对路径，这个节点会自动读取文件夹中的所有文件。
2. 输出是一个字符串，包含了文件夹中所有的文字信息
3. 适配的文件格式为：".docx"、".txt"、".pdf"、".xlsx"、".csv"、".py", ".js", ".java", ".c", ".cpp", ".html", ".css", ".sql", ".r", ".swift"

### 加载网页内容
1. 可以将一个url中的所有网页内容转化为一个md格式输出
2. 输出是一个字符串，包含了网页中所有的文字信息

### 加载维基百科
1. 可以返回维基百科中与问题相关的所有内容

### 加载模型名称
1. 从config.ini中加载模型名称，方便用户在加载器上选择模型

### 加载关键词检索器
1. 可以根据question来返回最相关的文本段落。
2. k是返回的段落数量，chuck_size为文本分割时，每个文本块的大小，默认为200，chuck_overlap为文本分割时，每个文本块之间的重叠大小，默认为50。

### Excel迭代器
1. 可以逐行返回excel中的内容，方便用户进行逐行处理，每次运行comfyui，都会返回下一行的内容。
2. 可以配合comfyui的自动执行，迭代批量处理你的工作。
3. 在path上输入你要处理的excel的绝对路径。
4. is_reload决定了重置返回的行数

### 文本迭代器
1. 可以将输入的内容分段，然后逐段返回，方便用户进行逐段处理，每次运行comfyui，都会返回下一段的内容。
2. 可以配合comfyui的自动执行，迭代批量处理你的工作。
3. 在file_content上输入你要处理的文本内容。
4. is_reload决定了重置返回的段数

### 图片迭代器
1. 可以将folder_path中的文件夹中的图片逐个返回。
2. 可以配合comfyui的自动执行，迭代批量处理你的工作。
3. is_reload决定了重置返回的索引
4. 支持".png", ".jpg", ".jpeg", ".gif", ".bmp"格式的图片

### 谷歌搜索加载器
1. 可以输入你的google_api_key和cse_id来使用该节点，根据keyword搜索相关内容
2. 可以控制paper_num翻页，来看更后面的搜索结果
3. web搜索模式下，该节点会返回谷歌搜索中的前10个网址和摘要部分，
4. image搜索模式下，该节点会返回谷歌搜索中的前10张图片URL

### 必应搜索加载器
1. 可以输入你的bing_api_key来使用该节点，根据keyword搜索相关内容
2. 可以控制paper_num翻页，来看更后面的搜索结果
3. 搜索模式下，该节点会返回谷歌搜索中的前10个网址和摘要部分，
4. image搜索模式下，该节点会返回谷歌搜索中的前10张图片URL

## 人格面具

### 分类器面具和超大分类器面具节点
1. 你可以将这个面具节点作为LLM节点的system_prompt_input，让大模型拥有人格面具的个性。
2. LLM会根据你在分类器面具节点上描述的类别将user_prompt分类
3. 可以和分类器函数进行配合，将不同类别的文字输出到不同的工作流中

### 自定义面具
1. prompt是将要输入到LLM节点中的system_prompt_input，可以包含一些变量，例如：“你是一个关于{app}的智能客服”。
2. prompt_template包含了prompt中变量的对应规则，一般为json格式，可以以如下格式填入：{"app":"chatgpt"}，此时，prompt中{app}将会被自动替换为chatgpt。

### 加载人格面具
1. 可以返回一个预设的人格面具，该面具可以作为大模型的system_prompt_input，让大模型拥有人格面具的个性。
2. persona文件夹包含了图片提示词助手的人格面具和DAN的人格面具。你可以在这个文件夹中添加更多的面具，以供你使用。

### 翻译面具
1. 会从langage_A翻译langage_B成，将user_prompt翻译成对应语言，然后返回翻译后的内容
2. tone是语气，可以自由填写
3. degree是翻译的程度，从0到10，依次语气程度变强。

## 函数

### 分类器函数和超大分类器函数节点
1. 可以将带有分类器面具的LLM处理过的的字符串分割为多个字符串，可以配合字符串逻辑控制执行对应的工作流
2. 需要智能水平较高的模型才能有稳定的分类输出，该节点作者不推荐使用，建议使用字符串逻辑和提取字符串节点

### 字符串逻辑
1. option包含以下选项："A contain B","A not contain B","A relate to B","A not relate to B","A equal B","A not equal B","A is null","A is not null"可供选择
2. 当条件为真时，if将输出A字符串,else将输出空字符串，is_ture将输出真，is_false将输出假,否则else将输出A字符串,if将输出空字符串，is_ture将输出假，is_false将输出真

### 文本展示函数
1. 可以将输入的字符串直接展示到comfyui界面上

### 发送到企业微信、钉钉、飞书
1. 可以将输入的字符串发送到企业微信、钉钉、飞书，需要提前配置好飞书、钉钉、企业微信的webhook地址

### 提取字符串
1. 可以从输入的字符串中提取出你想要的内容，substring会返回字符串中第一个在start_string和end_string之间的内容
2. remaining_string会返回删除第一个在start_string和end_string之间的内容的其他字符。
3. 可以重复使用该节点，以重复提取字符串中多个符合要求的子字符串

### openai语音合成
1. 可以将输入的字符串转化为语音，需要提前配置好openai的api_key
2. voice可以控制语音音色，可以参考openai的官方文档

### 播放音频
1. 可以将输入的音频文件播放出来，输入的是一个音频的绝对路径

### omost解码器
1. 将omost模型输出的代码转化成conditioning和mask
2. mode包含三种不同的融合模式，greedy是贪婪算法，fusion是先将conditioning融合，mask融合按权重融合平均，再进行解码，block是先将conditioning和mask按各个分块进行融合，再进行解码
3. strength是mask的权重

### omost设置
1. 方便用户个根据自己的需求，输出会生成相关的代码，可以复制到omost生成的代码中，进行替换

### 监听音频
1. 按下press_key后，会开始监听音频，按下release_key后，会停止监听，并返回监听到的音频文件路径

### openai语音识别
1. 可以将输入的音频文件转化为文字，需要提前配置好openai的api_key

### 替换字符串
1. 节点会将input_string中的old_string替换为new_string，并返回替换后的字符串

### cosyVoice语音合成
1. 可以将输入的字符串转化为语音，虽然是免费的接口，但是只支持中文，且容易报错，不推荐使用

### API函数
1. url填入需要被访问的网址
2. api_key填入该API的key
3. parameters填入该API的参数，需要使用参数字典函数输入

### 参数字典函数
1. 可以将输入的key和value转化为字典，方便API函数使用
2. value可以是字符串、字典或者列表，可以通过组合节点中的列表和字典相关节点构造你想要的任意json字典

### 获取字符串
1. 将你输入的文字转换成字符串输出

### 清空模型
1. 将两个any接口挂接在工作流的任意一条连接线上
2. 节点会在执行到这个节点时，将模型退出显存。

### chatTTS语音合成
**1. 节点输入**
输入名称      | 描述
-------------|-----
text         | 需要被转成语音的文字
model_path   | TTS的模型路径
save_path    | 音频的保存路径
seed         | 种子固定音色
temperature  | 效果与LLM一致
top_P        | 效果与LLM一致
top_K        | 效果与LLM一致
enableRefine | 是否开启优化功能
oral_param   | 优化功能开启后，控制口语化程度的参数
laugh_param  | 优化功能开启后，控制笑声程度的参数
break_param  | 优化功能开启后，控制停顿长度的参数
is_enable    | 是否启用该节点
load_mode    | **HF**:从huggingface下载模型<br>**custom**: 从model_path调用模型<br>**local**: 直接调用当前workspace路径下的模型文件（通常为ComfyUI的根目录）

**2. 节点输出**

输出名称      | 描述
-------------|-----
audio   | 语音文件的保存路径


### json文件解析
![alt text](img/json_parser.png)
1. show_json_file: 读取json文件并以字符串形式输出
2. value_by_key: 通过设定参数key获取json文件中对应键的值

### json取值
![alt text](img/json_get_value.png)
通过设定参数key获取字符串中对应键的值（字符串必须符合json格式否则无法解析）

### 字符串段落转json
![alt text](img/txt2json.png)
![alt text](img/txt2json2.png)
节点将根据输入的字符sep对字符串进行分割，将文本转为json格式的字符串

### 飞书机器人发消息 & 飞书机器人读群历史
![alt text](img/feishuapi.png)

注：读取历史的mode分两种
    1. auto：自动提取两次运行该节点之间发的消息，如果仅在该模式下，一直调用，而开发者后台调用通过，可能是你的本地时间不同步
    2. fixed_time_diff: 提取运行该节点的时间向前推time_diff_sec时间内的消息

**前置工作**

1. 飞书应用建立
    - https://open.feishu.cn/app?lang=zh-CN 中创建自建应用
    - 进入应用获取app_id与app_secret
    - 添加应用能力 -> 开启机器人应用能力
    - 权限管理 -> 消息与群组 -> 选择需要的权限打开
    - 安全设置 -> 将comfyUI运行的电脑IP加入白名单
    - 发布机器人以应用生效
2. 获取群组或用户id
    - 要先把创建的机器人拉到群组中或者拉进私聊
    - 飞书开发平台找到发送消息的[开发文档](https://open.feishu.cn/document/server-docs/im-v1/message/create)
    - 右侧点击获取token
    - 选择receive id type, chat_id对应群组，open_id与user_id对应个人, 点击选择成员，复制对应的id即可
3. 如果需要让机器人发送语音，需要自行在电脑上安装ffmpeg




## 组合

### 文件组合、超大文件组合节点
1. 用于将多个字符串结合成一个字符串
2. 这些组合节点可以套娃使用

### 工具组合、超大工具组合节点
1. 用于将多个工具节点结合成一个工具节点，再输入到大模型中
2. 这些组合节点可以套娃使用

### 参数字典组合和超大参数字典组合
1. 用于将多个参数字典函数结合成一个参数字典函数，再输入到API函数中
2. 这些组合节点可以套娃使用

### 列表追加和超大列表追加
1. 用于将多个元素结合成一个列表，再输入到参数字典函数中
2. 这些组合节点可以套娃使用

### 列表扩展和超大列表扩展
1. 用于将多个列表结合成一个列表，再输入到参数字典函数中
2. 这些组合节点可以套娃使用

## 工具

### 时间工具、天气工具、accuweather工具节点
1. 用于查询时间和天气，时间工具节点可以更改查询的默认时区，天气工具节点未来也会增加改变默认地区的选项（这个免费的天气工具仅限于搜索中国的天气）
2. accuweather工具节点需要填入accuweather的apikey，可以查询全球的天气

### 谷歌搜索工具节点
1. 可以输入你的google_api_key和cse_id来使用该节点
2. 该节点会返回谷歌搜索中的前10个网址和摘要部分，你可以要求模型翻页，来看更后面的搜索结果

### 检视网页工具节点
1. 可以输入你想要搜索的网址到该节点中作为模型搜索的默认网址。这个节点会将这个网页的所有内容转化成Markdown格式，并返回给模型
2. 由于request不是万能的，有些网址会不允许爬取，本项目也不提供恶意的爬虫代码
3. 可以输入embedding_path，会调用这个文件夹内的词嵌入模型，工具会将网页内容按照chuck_size、chuck_overlap分割文本，只会返回与用户提问相关的文本信息
4. 如果没有embedding_path，会返回网页的所有内容

### 词嵌入模型工具节点
1. 具体功能同词嵌入模型节点，但该节点是一个LLM的工具，可以在模型认为需要查询知识库时，调用这个工具中输入的file_content。

### 解释器节点
1. 可以让大模型生成Python代码后自动运行，并获得代码的运行结果
2. 暂时只支持Python代码

### 万能解释器节点
1. 可以让大模型执行任何事情，大模型将会在一个虚拟环境里下载所需的第三方库，然后执行生成的代码。
2. 请小心使用这个工具，因为大模型会获得控制你电脑做任何事的能力！

### API工具节点
1. url填入需要被访问的网址
2. 第一个字符串输入框输入这个API工具的功能，例如：用来查天气的工具。
3. 第二个字符串输入框输入这个API工具的参数，例如：用来查天气的工具的参数为：{"city":"beijing"}

### 维基百科工具节点
1. 可以让大模型查询维基百科上相关的内容
2. 可以输入embedding_path，会调用这个文件夹内的词嵌入模型，工具会将维基百科内容按照chuck_size、chuck_overlap分割文本，只会返回与用户提问相关的文本信息
3. 如果没有embedding_path，会返回维基百科上相关的前1000个字符

### arxiv工具节点
1. 可以让大模型查询arxiv上相关的论文信息
2. 默认搜索query中的研究方向

### 工作流工具
1. 把一个comfyui工作流当作一个工具
2. 本节点在施工中，不一定能正常使用

### GitHub工具
1. 让大模型可以访问GitHub仓库，需要输入GitHub的APIkey

### 企业微信、钉钉、飞书工具
1. 可以让大模型发送消息到企业微信、钉钉、飞书，需要提前配置好飞书、钉钉、企业微信的webhook地址

### 搜索关键词工具
1. 可以让大模型通过关键词技术来访问数据库，实现快速RAG
2. k是返回的段落数量，chuck_size为文本分割时，每个文本块的大小，默认为200，chuck_overlap为文本分割时，每个文本块之间的重叠大小，默认为50。

### 故事json工具
1. 可以与file文件夹下的json文件交互，实现文字交互式游戏

### 知识图谱相关节点包
1. 可以让LLM联动知识图谱
2. 开发者版本可以查询、添加、删除、修改知识图谱中的实体和关系，普通版本只能查询知识图谱中的实体和关系
3. 用户版只能查询知识图谱中的实体和关系，不能添加、删除、修改知识图谱中的实体和关系

### 星期查询工具
1. 可以让大模型查询任意时区当前日期是星期几
2. 可以更改查询的默认时区，默认时区为Asia/Shanghai

## 工作流节点

### 开始工作流和结束工作流节点
1. 你可以用这个两个节点来定义工作流的起点和终点，将你的工作流放到本项目文件夹下的workflow子文件夹。
2. 在本项目文件夹下点击setup_streamlit_app.bat，在streamlit的界面中，点击设置，替换为你的工作流。
3. 这样，你就快速构建了一个以streamlit为前端的AI应用。

### 开始对话节点和结束对话节点
1. 这两个节点都有dialog_id，将dialog_id连接起来，让它们成一个对话存档点。当你需要将两个大模型进行循环连接时，虽然在comfyui中是不能实现的，但是可以将后一个模型的输出保存到本地，再下一次运行时，传递给前一个模型，可以使用comfyui API在其他前端中调用comfyui，只要循环调用，就可以看到两个模型的无限自我对话了。
2. 开始对话节点上有开始对话的接口，可以作为一个对话开始时用户给出的提示词，引导大模型在用户给出的主题中讨论。

### 工作流中转器节点
1. 可以让你的工作流调用其他的工作流!
2. 将你要嵌入的工作流的开始和结尾都添加开始工作流和结束工作流节点，将这个工作流以api形式保存到comfyui_LLM_party项目的workflow_api文件夹中
3. 另开一个工作流，在这个工作流中使用工作流中转器节点，选择你要嵌入的工作流，就完成了。
4. 第一次使用工作流中转器节点时，会开启另一个8189端口，请不要关闭这个新的控制台。

## 绘图

### CLIP文本编码、采样器、解码器的party版本
1. 这些节点都被我魔改了，可以在缺失输入时，不会报错，而是被绕开，我觉得这个功能非常重要，但是comfyui不知道为啥不写这个功能。这个功能可以通过控制工作流的输入有无来控制执行哪一个部分的工作流。
