groupchat
群聊
@dataclass
class GroupChat()
(预览中)一个群聊类,包含以下数据字段:
- agents:参与的代理人列表。
- messages:群聊中的消息列表。
- max_round:最大轮数。
- admin_name:管理员代理人的名称(如果有)。默认为 "Admin"。 按下键盘中断将使管理员代理人接管。
- func_call_filter:是否启用函数调用过滤器。默认为 True。
当设置为 True 且消息是函数调用建议时,
下一个发言者将从包含相应函数名的代理人中选择,
这些函数名在其
function_map
中。 - select_speaker_message_template:自定义选择发言者消息(用于 "auto" 发言者选择),它首先出现在消息上下文中,通常包括代理人描述和代理人列表。如果字符串中包含 "{roles}",它将被替换为代理人及其角色描述。如果字符串中包含 "{agentlist}",它将被替换为用方括号括起来的代理人名称的逗号分隔列表。默认值为: "你在进行角色扮演游戏。以下角色可供选择: {roles}。 请阅读以下对话。 然后从 {agentlist} 中选择下一个角色进行扮演。只返回角色。"
- select_speaker_prompt_template:自定义选择发言者提示(用于 "auto" 发言者选择),它最后出现在消息上下文中,通常包括代理人列表和指导 LLM 选择下一个代理人的指示 。如果字符串中包含 "{agentlist}",它将被替换为用方括号括起来的代理人名称的逗号分隔列表。默认值为: "请阅读上述对话。然后从 {agentlist} 中选择下一个角色进行扮演。只返回角色。" 要忽略使用此提示,请将其设置为 None。如果设置为 None,请确保选择发言者的指示包含在 select_speaker_message_template 字符串中。
- select_speaker_auto_multiple_template:自定义后续提示,用于在选择发言者失败时返回包含多个代理人名称的响应。此提示指导 LLM 只返回一个代理人名称。仅适用于 "auto" 发言者选择方法。如果字符串中包含 "{agentlist}",它将被替换为用方括号括起来的代理人名称的逗号分隔列表。默认值为: "您在文本中提供了多个名称,请只返回下一个发言者的名称。为确定发言者,请使用以下优先规则:
- 如果上下文中提到自己作为发言者,例如 "作为...",选择该发言者的名称
- 如果上下文中提到 "下一个" 发言者名称,选择该名称
- 否则,选择上下文中提供的第一个发言者的名称 名称区分大小写,不应缩写或更改。 只回复发言者的名称,不要提供原因。"
- select_speaker_auto_none_template: 自定义在选择发言者失败且回复中不包含任何代理人姓名时使用的后续提示。该提示指导 LLM 返回一个代理人姓名,并提供代理人姓名的列表。仅适用于“自动”发言者选择方法。如果字符串包含“{agentlist}”,它将被替换为方括号中逗号分隔的代理人姓名列表。默认值为: "您没有选择发言者。作为提醒,为确定发言者,请使用以下优先规则:
- 如果上下文中将自己称为发言者,例如“作为...”,请选择该发言者的姓名
- 如果上下文中提到 “下一个”发言者姓名,请选择该姓名
- 否则,请选择上下文中提供的第一个发言者的姓名 姓名区分大小写,不应缩写或更改。 只接受以下姓名:{agentlist}。 仅回复发言者的姓名,不要提供原因。"
- speaker_selection_method: 选择下一个发言者的方法。默认值为“自动”。 可以是以下任意一种(不区分大小写),如果无法识别将引发 ValueError 错误:
- "auto":LLM 会自动选择下一个发言者。
- "manual":用户输入手动选择下一个发言者。
- "random":随机选择下一个发言者。
- "round_robin":以循环方式选择下一个发言者,即按照
agents
中提供的顺序进行迭代。 - 自定义发言者选择函数(Callable):将调用该函数来选择下一个发言者。 该函数应接受上一个发言者和群聊作为输入,并返回以下之一:
- 一个
Agent
类,必须是群聊中的一个代理人。 - 一个字符串,来自 ['auto', 'manual', 'random', 'round_robin'],用于选择要使用的默认方法。
- None,将优雅地终止对话。
- max_retries_for_selecting_speaker: 发言者选择重新查询过程运行的最大次数。 如果在发言者选择过程中,LLM 返回多个代理人姓名或没有代理人姓名作为下一个代理人,则会再次查询,最多查询次数为最大尝试次数。 仅适用于“自动”发言者选择方法。 默认值为 2。
- select_speaker_auto_verbose: 是否输出选择发言者的响应和选择结果。 如果设置为 True,则会输出嵌套的选择发言者聊天中两个代理人的输出,以及响应是否成功选择代理人。 仅适用于“自动”发言者选择方法。
- allow_repeat_speaker: 是否允许同一发言者连续发言。
默认值为 True,这意味着所有发言者都可以连续发言。
如果
allow_repeat_speaker
是一个代理人列表,则只允许列表中列出的代理人重复发言。 如果设置为 False,则不允许任何发言者重复发言。allow_repeat_speaker
和allowed_or_disallowed_speaker_transitions
是互斥的。 - allowed_or_disallowed_speaker_transitions: 字典。
键是源 agent,值是键 agent 可以/不可以转移到的 agent,取决于 speaker_transitions_type。默认为 None,表示所有 agent 都可以转移到所有其他 agent。
allow_repeat_speaker
和allowed_or_disallowed_speaker_transitions
是互斥的。 - speaker_transitions_type: speaker_transitions_type 是否是包含允许 agent 或不允许 agent 列表的字典。 如果设置为 "allowed",则 allowed_or_disallowed_speaker_transitions 是包含允许 agent 列表的字典。 如果设置为 "disallowed",则 allowed_or_disallowed_speaker_transitions 是包含不允许 agent 列表的字典。 如果 allowed_or_disallowed_speaker_transitions 不为 None,则必须提供 speaker_transitions_type。
- enable_clear_history: 启用手动提供 "clear history" 短语以清除 agent 的消息历史记录的可能性。这是一个实验性功能。 有关更多信息,请参阅 GroupChatManager.clear_agents_history 函数的描述。
- send_introductions: 在群聊开始时发送一轮介绍,以便 agent 知道他们可以与谁交谈(默认为 False)
- role_for_select_speaker_messages: 在 'auto' 模式下设置选择发言者的角色名称,通常为 'user' 或 'system'。(默认为 'system')
python def custom_speaker_selection_func( last_speaker: Agent, groupchat: GroupChat ) -> Union[Agent, str, None]:
agent_names
@property
def agent_names() -> List[str]
返回群聊中 agent 的名称列表。
reset
def reset()
重置群聊。
append
def append(message: Dict, speaker: Agent)
将消息添加到群聊中。 我们在这里将内容转换为 str,以便可以由基于文本的模型进行处理。
agent_by_name
def agent_by_name(name: str,
recursive: bool = False,
raise_on_name_conflict: bool = False) -> Optional[Agent]
返回具有给定名称的 agent。如果 recursive 为 True,则会在嵌套的团队中进行搜索。
nested_agents
def nested_agents() -> List[Agent]
返回群聊管理器中的所有 agent。
next_agent
def next_agent(agent: Agent, agents: Optional[List[Agent]] = None) -> Agent
返回列表中的下一个 agent。
select_speaker_msg
def select_speaker_msg(agents: Optional[List[Agent]] = None) -> str
返回选择下一个发言者的系统消息。这始终是上下文中的第一条消息。
select_speaker_prompt
def select_speaker_prompt(agents: Optional[List[Agent]] = None) -> str
返回选择下一个发言者的浮动系统提示。
这始终是上下文中的最后一条消息。
如果 select_speaker_prompt_template
为 None,则返回 None。
introductions_msg
def introductions_msg(agents: Optional[List[Agent]] = None) -> str
返回选择下一个发言者的系统消息。这始终是上下文中的第一条消息。
manual_select_speaker
def manual_select_speaker(
agents: Optional[List[Agent]] = None) -> Union[Agent, None]
手动选择下一个发言者。
random_select_speaker
def random_select_speaker(
agents: Optional[List[Agent]] = None) -> Union[Agent, None]
随机选择下一个发言者。
select_speaker
def select_speaker(last_speaker: Agent, selector: ConversableAgent) -> Agent
选择下一个发言者(带重新查询)。
a_select_speaker
async def a_select_speaker(last_speaker: Agent,
selector: ConversableAgent) -> Agent
异步选择下一个发言者(带重新查询)。
a_auto_select_speaker
async def a_auto_select_speaker(last_speaker: Agent,
selector: ConversableAgent,
messages: Optional[List[Dict]],
agents: Optional[List[Agent]]) -> Agent
(异步)为“auto”发言者选择方法选择下一个发言者。利用自己的两个代理对话来确定下一个发言者,并支持重新查询。
“auto”发言者选择方法的发言者选择:
- 创建一个带有发言者选择代理和发言者验证代理的两个代理对话, 就像一个嵌套对话一样
- 将群组消息注入新的对话中
- 运行两个代理对话,评估发言者选择代理的响应结果:
- 如果提供了单个代理,则返回该代理并完成。如果没有,则在此嵌套对话中添加附加消息,以尝试引导 LLM 产生单个代理的响应
- 对话继续,直到提名单个代理或没有更多的尝试次数
- 如果我们用完了回合并且无法确定单个代理,则返回代理列表中的下一个发言者
参数:
last_speaker Agent: 群组聊天中的上一个发言者 selector ConversableAgent: messages Optional[List[Dict]]: 当前聊天消息 agents Optional[List[Agent]]: 用于发言者选择的有效代理列表
返回值:
Dict
- 提及代理的计数器。
GroupChatManager
class GroupChatManager(ConversableAgent)
(预览版)可以管理多个代理的群组聊天的聊天管理器代理。
groupchat
@property
def groupchat() -> GroupChat
返回由群组聊天管理器管理的群组聊天。
chat_messages_for_summary
def chat_messages_for_summary(agent: Agent) -> List[Dict]
将群组聊天中的消息列表作为一次对话进行总结。 忽略代理。
run_chat
def run_chat(messages: Optional[List[Dict]] = None,
sender: Optional[Agent] = None,
config: Optional[GroupChat] = None) -> Tuple[bool, Optional[str]]:
这是一个用于运行聊天的函数。它接受三个可选参数:messages
、sender
和config
。messages
是一个包含消息的列表,每个消息都是一个字典。sender
是一个代理对象,用于发送和接收消息。config
是一个群聊配置对象。
函数返回一个元组,包含两个值:一个布尔值和一个可选的字符串。布尔值表示聊天是否成功运行,而字符串则是一个可选的错误消息。 运行一个群聊。
a_run_chat
async def a_run_chat(messages: Optional[List[Dict]] = None,
sender: Optional[Agent] = None,
config: Optional[GroupChat] = None)
异步运行一个群聊。
resume
def resume(messages: Union[List[Dict], str],
remove_termination_string: Union[str, Callable[[str], str]] = None,
silent: Optional[bool] = False) -> Tuple[ConversableAgent, Dict]
使用之前的消息作为起点,恢复一个群聊。需要建立起原始群聊时的代理、群聊和群聊管理器。
参数:
- messages Union[List[Dict], str]: 之前聊天消息的内容,可以是一个 Json 字符串或者一个消息字典的列表。
- remove_termination_string (str or function): 从最后一条消息中移除终止字符串,以防止立即终止。 如果提供了一个字符串,该字符串将从最后一条消息中移除。 如果提供了一个函数,最后一条消息将传递给该函数。
- silent (bool or None): (实验性)是否打印此对话的消息。默认为 False。
返回值:
- Tuple[ConversableAgent, Dict]: 包含最后发言的代理和他们的消息的元组
a_resume
async def a_resume(
messages: Union[List[Dict], str],
remove_termination_string: Union[str, Callable[[str], str]],
silent: Optional[bool] = False) -> Tuple[ConversableAgent, Dict]
使用之前的消息作为起点,异步恢复一个群聊。需要建立起原始群聊时的代理、群聊和群聊管理器。
参数:
- messages Union[List[Dict], str]: 之前聊天消息的内容,可以是一个 Json 字符串或者一个消息字典的列表。
- remove_termination_string (str or function): 从最后一条消息中移除终止字符串,以防止立即终止。 如果提供了一个字符串,该字符串将从最后一条消息中移除。 如果提供了一个函数,最后一条消息将传递给该函数,并且函数返回处理后的字符串。
- silent (bool or None): (实验性)是否打印此对话的消息。默认为 False。
返回值:
- Tuple[ConversableAgent, Dict]: 包含最后发言的代理和他们的消息的元组
messages_from_string
def messages_from_string(message_string: str) -> List[Dict]
读取以 Json 格式保存的消息状态以进行恢复,并将其作为消息列表返回。
参数:
- message_string: Json 字符串,保存的状态
返回值:
- List[Dict]: 消息列表
messages_to_string
def messages_to_string(messages: List[Dict]) -> str
将提供的消息转换为可以用于恢复聊天的 Json 字符串。 状态由一系列消息组成
参数:
- messages(List[Dict]):要转换为字符串的消息集合
返回:
- str:消息的 JSON 表示,可以持久化以便以后恢复
clear_agents_history
def clear_agents_history(reply: dict, groupchat: GroupChat) -> str
清除所有代理或选定代理的消息历史记录。可以保留指定数量的最后消息。 当用户在回复中手动提供“clear history”短语时,将调用该函数。 当提供“clear history”时,清除所有代理的消 息历史记录。 当提供“clear history <agent_name>”时,清除选定代理的消息历史记录。 当提供“clear history <nr_of_messages_to_preserve>”时,清除所有代理的消息历史记录, 但保留最后的 <nr_of_messages_to_preserve> 条消息。 当提供“clear history <agent_name> <nr_of_messages_to_preserve>”时,清除选定代理的消息历史记录, 但保留最后的 <nr_of_messages_to_preserve> 条消息。 在将回复传递给聊天之前,会将短语“clear history”和可选参数从回复中删除。
参数:
reply
dict - 要分析的回复消息字典。groupchat
GroupChat - GroupChat 对象。