UserProxyAgent用户
user_proxy = UserProxyAgent配置说明:
# 构造参数
def __init__(
self,
name: str,
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
max_consecutive_auto_reply: Optional[int] = None,
human_input_mode: Literal["ALWAYS", "TERMINATE", "NEVER"] = "ALWAYS",
function_map: Optional[Dict[str, Callable]] = None,
code_execution_config: Union[Dict, Literal[False]] = {},
default_auto_reply: Optional[Union[str, Dict, None]] = "",
llm_config: Optional[Union[Dict, Literal[False]]] = False,
# 默认不使用LLM,如果使用了LLM将会推测人的行为
system_message: Optional[Union[str, List]] = "",
description: Optional[str] = None,
)
重要参数说明:
human_input_mode
三种形式的说明:
三种模式都会涉及代码执行,需要代码执行根据实际要求来进行
模式 | 说明 (userproxy执行代码过程在code_execution_config配置中,后附说明) |
---|---|
ALWAYS | 每次接收到消息时,代理都会提示人类输入。当人类输入为 “exit”,或者 is_termination_msg 为 True 并且没有人类输入时,会话将停止。userproxy不会执行代码,代码执行交给使用用户,一轮对话都需要人为输入去干涉,Assistantproxy才能进行下去。不推荐:(如果回复中涉及代码)需要用户去执行代码并配置相关环境 |
TERMINATE | 只有在接收到终止消息或者连续自动回复的数量达到 max_consecutive_auto_reply 时,代理才会提示人类输入。 userproxy会根据max_consecutive_auto_reply次数+Assistantproxy是否需要人为提供更多信息 来终止代码执行,结束标记为Assistantproxy to userproxy的最后一轮对话包含TERMINATE这个单词(可能大小写混合也可能夹杂其他单词,但一定有该单词.upper()存在)推荐:(如果回复中涉及代码)代码执行+需要人为提供更多的信息以保证更加准确的进行 |
NEVER | 代理永远不会提示人类输入。在这种模式下,当连续自动回复的数量达到 max_consecutive_auto_reply 或者 is_termination_msg 为 True 时,会话将停止。userproxy会一直执行代码,配合参数default_auto_reply+max_consecutive_auto_reply直到停止较推荐:若涉及代码会进入死胡同,例如提供一些接口API密钥等,人不会去提供,直到轮数结束返回信息。 |
当 max_consecutive_auto_reply为0 的时候并且输入模式为TERMINATE的时候,get_human_input会被重写,否则不会被重写。
is_termination_msg
参数:
is_termination_msg 是一个函数,它接受一个字典形式的消息作为输入,并返回一个布尔值,表示这个接收到的消息是否是一个终止消息,即一个userproxy是否终止对话的标记。包含如下键值对:
# 键值对
"content":消息的内容
"role":发送消息的角色
"name":发送消息的名称
"function_call":函数调用的信息
code_execution_config
是一个字典或者布尔值,用于配置代码执行的相关设置。如果你想禁用代码执行,可以将其设置为 False。否则,你可以提供一个字典,其中包含以下键:
work_dir(可选,字符串):用于代码执行的工作目录。如果没有提供,将使用默认的工作目录。默认的工作目录是 "path_to_autogen" 下的 "extensions" 目录。
use_docker(可选,列表、字符串或布尔值):用于代码执行的 Docker 镜像。默认值为 True,这意味着代码将在 Docker 容器中执行,并将使用默认的镜像列表。如果提供了一个镜像名称的列表或字符串,代码将在成功拉取的第一个镜像的 Docker 容器中执行。如果为 False,代码将在当前环境中执行。我们强烈建议使用 Docker 来执行代码。
timeout(可选,整数):代码执行的最大时间(以秒为单位)。
last_n_messages(实验性的,可选,整数):用于代码执行的回溯消息数量。默认值为 1。
llm_config
这决定了 ConversableAgent
中反馈是通过 OpenAIWrapper
进行处理还是不进行任何 LLM 基础的回复处理。
默认值为 False,这将禁用基于 llm 的自动回复。
如果设置为 None,将使用 self.DEFAULT_CONFIG,其默认值也是 False。
简单来说,这个参数用于控制是否使用语言模型进行自动回复,以及如何配置这个语言模型。
如果需要配置LLM 参考文档 (配置同AssistantAgentde llm_config) 或同下
https://microsoft.github.io/autogen/docs/reference/oai/client/#create
AssistantAgent代理
构造参数:
def __init__(
self,
name: str, # 本项目使用请求的uuid来进行对话
system_message: Optional[str] = DEFAULT_SYSTEM_MESSAGE,
llm_config: Optional[Union[Dict, Literal[False]]] = None,
is_termination_msg: Optional[Callable[[Dict], bool]] = None,
max_consecutive_auto_reply: Optional[int] = None,
human_input_mode: Optional[str] = "NEVER",
description: Optional[str] = None,
**kwargs,
):
llm_config
样式构造:
llm_config={
"config_list": [{
"model": config.LLM_CONFIG[llm_provider]["MODEL"],
"api_key": config.LLM_CONFIG[llm_provider]["OPENAI_API_KEY"],
# "base_url": config.LLM_CONFIG[llm_provider]["OPENAI_API_BASE"],
"azure_endpoint": config.LLM_CONFIG[llm_provider]["OPENAI_API_BASE"],
"api_type": "azure",
"api_version": config.LLM_CONFIG[llm_provider]["API_VERSION"],
"model_client_cls": "OpenAIClientWithStream",
"cache_seed": None,
}],
"temperature": assistant_config["temperature"],
"timeout": 600,
"cache_seed": None,
"stream": True,
}
max_consecutive_auto_reply
默认值为 None,这意味着没有提供限制,此时将使用类属性 MAX_CONSECUTIVE_