133 lines
4.2 KiB
Markdown
133 lines
4.2 KiB
Markdown
|
|
# Documentation
|
|
- Class name: GroupChat
|
|
- Category: SALT/Language Toolkit/Agents
|
|
- Output node: False
|
|
- Repo Ref: https://github.com/comfyanonymous/ComfyUI
|
|
|
|
GroupChat节点负责创建和管理多代理之间的群聊会话。它支持聊天的启动、消息的处理,以及聊天流程的管理,包括选择发言者和介绍代理,从而在群聊环境中编排复杂的多代理交互。
|
|
|
|
# Input types
|
|
## Required
|
|
- group_manager
|
|
- 负责监督群聊的管理员,为聊天会话提供必要的配置和权限。
|
|
- Comfy dtype: GROUP_MANAGER
|
|
- Python dtype: GroupManager
|
|
- init_message
|
|
- 用于启动群聊会话的初始消息,为对话设定基调和背景。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- send_introductions
|
|
- 一个标志,指示代理是否应在聊天开始时发送自我介绍,为他们的互动奠定基础。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
- summary_method
|
|
- 用于生成聊天会话摘要的方法,决定如何捕捉对话的关键点。
|
|
- Comfy dtype: COMBO[STRING]
|
|
- Python dtype: str
|
|
- max_turns
|
|
- 指定聊天会话可以进行的最大回合数,控制对话的长度和可能的深度。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
- clear_history
|
|
- 一个标志,指示是否应在开始新会话前清除聊天历史,确保隐私和相关性。
|
|
- Comfy dtype: BOOLEAN
|
|
- Python dtype: bool
|
|
## Optional
|
|
- agent_i
|
|
- 代表可能参与群聊的多个代理之一,为对话的动态流程做出贡献。
|
|
- Comfy dtype: AGENT
|
|
- Python dtype: Agent
|
|
|
|
# Output types
|
|
- chat_history
|
|
- 聊天会话期间交换的所有消息的记录,提供对话流程的全面概览。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
- summary
|
|
- 聊天会话的简明摘要,捕捉对话的精髓和关键点。
|
|
- Comfy dtype: STRING
|
|
- Python dtype: str
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `CPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class GroupChat:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"group_manager": ("GROUP_MANAGER",),
|
|
"init_message": ("STRING", {"multiline": True, "dynamicPrompts": False}),
|
|
"send_introductions": ("BOOLEAN", {"default": False},),
|
|
"summary_method": ([
|
|
"last_msg",
|
|
"reflection_with_llm",
|
|
],),
|
|
"max_turns": ("INT", {"default": 10}),
|
|
"clear_history": ("BOOLEAN", {"default": True},),
|
|
},
|
|
"optional": {
|
|
"agent_1": ("AGENT",),
|
|
"agent_2": ("AGENT",),
|
|
"agent_3": ("AGENT",),
|
|
"agent_4": ("AGENT",),
|
|
"agent_5": ("AGENT",),
|
|
"agent_6": ("AGENT",),
|
|
"agent_7": ("AGENT",),
|
|
"agent_8": ("AGENT",),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("STRING", "STRING",)
|
|
RETURN_NAMES = ("chat_history", "summary", )
|
|
|
|
FUNCTION = "start_chat"
|
|
CATEGORY = f"{MENU_NAME}/{SUB_MENU_NAME}/Agents"
|
|
|
|
def start_chat(
|
|
self,
|
|
group_manager,
|
|
init_message,
|
|
send_introductions,
|
|
summary_method,
|
|
max_turns,
|
|
clear_history,
|
|
**kwargs,
|
|
):
|
|
agents = [kwargs[i] for i in kwargs if "agent_" in i]
|
|
assert len(agents) > 1, "At least 2 agents are needed to start a group chat session"
|
|
# create chat
|
|
group_chat = AutogenGroupChat(
|
|
agents=agents,
|
|
messages=[],
|
|
max_round=max_turns,
|
|
send_introductions=send_introductions,
|
|
)
|
|
group_chat_manager = GroupChatManager(
|
|
groupchat=group_chat,
|
|
**group_manager,
|
|
)
|
|
# start chat
|
|
chat_result = agents[0].initiate_chat(
|
|
group_chat_manager,
|
|
message=init_message,
|
|
summary_method=summary_method,
|
|
max_turns=max_turns,
|
|
clear_history=clear_history,
|
|
)
|
|
# parse results
|
|
summary = chat_result.summary
|
|
chat_history = ""
|
|
for message in chat_result.chat_history:
|
|
if message["content"] is not None:
|
|
chat_history += "- " + message["content"] + "\n\n"
|
|
return (chat_history, summary)
|
|
|
|
```
|