14 KiB
ClassDef MiniMaxWorker
MiniMaxWorker: MiniMaxWorker类是用于与MiniMax API进行交互的工作类。
属性:
DEFAULT_EMBED_MODEL: 默认嵌入模型标识符,用于嵌入功能,默认值为"embo-01"。model_names: 模型名称列表,默认包含"minimax-api"。controller_addr: 控制器地址,用于内部通信。worker_addr: 工作器地址,用于内部通信。version: 模型版本,初始化为"abab5.5-chat"。context_len: 上下文长度,默认为16384,继承自ApiModelWorker类。
代码描述: MiniMaxWorker类继承自ApiModelWorker类,专门用于处理与MiniMax API的交互。它通过重写父类的方法,实现了与MiniMax API特定功能的交互,包括聊天和嵌入功能。
__init__方法用于初始化MiniMaxWorker实例,包括设置模型名称、控制器地址、工作器地址、版本号等,并更新上下文长度。validate_messages方法用于验证和转换消息格式,以符合MiniMax API的要求。do_chat方法实现了与MiniMax API的聊天功能交互。它构造了API请求,处理响应,并以生成器的形式返回处理结果。do_embeddings方法实现了与MiniMax API的嵌入功能交互。它发送请求到MiniMax API,获取文本的嵌入表示,并处理API的响应。get_embeddings和make_conv_template方法为预留方法,目前在MiniMaxWorker类中未具体实现。
注意:
- 使用MiniMaxWorker类时,需要确保MiniMax API的可访问性和正确的API密钥。
do_chat和do_embeddings方法中的错误处理非常重要,需要仔细检查返回的错误信息。- 由于
do_chat方法使用了生成器,调用此方法时需要注意迭代器的处理。
输出示例:
调用do_chat方法可能的返回值示例:
{
"error_code": 0,
"text": "这是由MiniMax模型生成的回复文本。"
}
此示例展示了一个成功的API调用结果,其中error_code为0表示成功,text字段包含了模型生成的回复文本。
调用do_embeddings方法可能的返回值示例:
{
"code": 200,
"data": [[0.1, 0.2, ..., 0.5], [...]],
"msg": "成功获取嵌入向量。"
}
此示例展示了成功获取文本嵌入向量的API调用结果,code为200表示成功,data字段包含了嵌入向量的列表,msg字段提供了操作的反馈信息。
FunctionDef init(self)
init: 该函数用于初始化MiniMaxWorker对象。
参数:
- model_names: 一个字符串列表,默认值为["minimax-api"]。这个列表包含了模型的名称。
- controller_addr: 一个字符串,表示控制器的地址。默认值为None。
- worker_addr: 一个字符串,表示工作节点的地址。默认值为None。
- version: 一个字符串,表示版本号,默认值为"abab5.5-chat"。
- kwargs: 接收一个字典,包含了其他可能需要传递给父类初始化方法的关键字参数。
代码描述:
此函数是MiniMaxWorker类的构造函数,用于创建MiniMaxWorker实例。它接受几个参数,包括模型名称列表model_names、控制器地址controller_addr、工作节点地址worker_addr以及版本号version。这些参数允许用户在创建MiniMaxWorker实例时定制其配置。
函数首先将model_names、controller_addr和worker_addr参数通过kwargs.update方法更新到kwargs字典中。这样做是为了将这些参数以关键字参数的形式传递给父类的初始化方法。
接下来,kwargs.setdefault("context_len", 16384)用于设置kwargs字典中context_len键的默认值为16384,如果context_len已经在kwargs中有值,则保持原值不变。
之后,通过super().__init__(**kwargs)调用父类的初始化方法,将更新后的kwargs字典传递给父类,完成父类的初始化。
最后,将传入的version参数赋值给实例变量self.version,以便在类的其他方法中使用。
注意:
- 在使用
MiniMaxWorker类时,需要注意controller_addr和worker_addr参数是可选的,如果在特定环境下这两个参数是必需的,应在实例化时提供相应的值。 kwargs参数提供了一种灵活的方式来传递额外的参数给父类的初始化方法,这在需要对父类行为进行定制时非常有用。但是,使用时应确保传递的关键字参数是父类所支持的。
FunctionDef validate_messages(self, messages)
validate_messages: 此函数的功能是验证并转换消息列表中的角色到对应的发送者类型。
参数:
- messages: 一个包含字典的列表,每个字典代表一条消息,其中包含角色和内容。
代码描述:
validate_messages 函数接收一个消息列表作为输入,每条消息是一个包含角色和内容的字典。函数内部定义了一个 role_maps 字典,用于将消息中的角色("USER"、"assistant"、"system")映射到对应的发送者类型(用户角色、AI角色、系统)。这里的用户角色和AI角色是通过调用 user_role 和 ai_role 方法获取的,这两个方法分别返回当前会话中用户的角色和AI的角色名称。系统角色则直接映射为字符串 "system"。
函数遍历输入的消息列表,对于每条消息,根据其角色使用 role_maps 进行映射,并保留消息内容,生成一个新的字典。这个过程转换了原始消息列表中的角色到对应的发送者类型,同时保留了消息内容。最终,函数返回一个新的消息列表,每条消息包含了发送者类型和文本内容。
注意:
- 在使用此函数之前,需要确保
conv.roles列表已经被正确初始化,并且至少包含用户和AI的角色。 - 此函数依赖于
user_role和ai_role方法,这两个方法分别从会话对象中获取用户和AI的角色名称。因此,确保会话对象已正确设置是使用此函数的前提。
输出示例:
假设输入的消息列表为 [{"role": "USER", "content": "你好"}, {"role": "assistant", "content": "你好,有什么可以帮助你的?"}],并且当前用户角色为 "USER",AI角色为 "assistant",则函数的返回值可能如下:
[
{"sender_type": "USER", "text": "你好"},
{"sender_type": "assistant", "text": "你好,有什么可以帮助你的?"}
]
这个输出示例展示了如何将输入的消息列表中的角色转换为对应的发送者类型,并保留了消息内容。
FunctionDef do_chat(self, params)
do_chat: 此函数的功能是通过MiniMax API进行聊天对话。
参数:
params: ApiChatParams类型,包含聊天请求所需的各种参数。
代码描述:
do_chat函数首先调用load_config方法,根据模型名称加载相应的配置。然后,构造MiniMax API的请求URL,根据params中的is_pro字段判断是否使用专业版API。接着,设置HTTP请求头,包括认证信息和内容类型。
函数通过调用validate_messages方法处理params.messages,将消息列表中的角色转换为对应的发送者类型。之后,构造请求体data,包含模型版本、是否流式响应、是否屏蔽敏感信息、处理后的消息列表、温度参数、top_p参数和生成的最大令牌数。部分特有的MiniMax参数如prompt、bot_setting和role_meta在此示例中未使用。
使用get_httpx_client函数获取HTTP客户端实例,并发起POST请求到MiniMax API。请求响应以流式方式处理,逐步读取并解析返回的文本。如果返回的文本不以"data: "开头,则认为是错误的结果,构造错误信息并记录日志。如果返回的数据中包含choices字段,则从中提取文本内容并返回。
注意:
- 在使用
do_chat函数时,需要确保传入的params参数正确设置了API密钥、消息列表等信息。 - 函数依赖于
validate_messages方法来处理消息列表,确保消息格式符合MiniMax API的要求。 get_httpx_client函数用于获取配置好的HTTP客户端实例,支持同步或异步操作,根据项目需要选择合适的模式。- 函数中的错误处理逻辑确保了在遇到API请求错误时,能够及时记录日志并向调用者返回错误信息。
- 由于函数使用了流式响应处理,开发者需要注意处理可能的大量数据和网络延迟问题。
FunctionDef do_embeddings(self, params)
do_embeddings: 此函数的功能是调用MiniMax API以获取文本的嵌入向量。
参数:
params:ApiEmbeddingsParams类型,包含嵌入模型API请求所需的参数。
代码描述:
do_embeddings函数首先通过params.load_config方法加载模型配置,这一步骤确保了使用正确的模型名称进行API请求。接着,构造了一个指向MiniMax嵌入API的URL,其中包含了通过params传入的group_id。
函数定义了HTTP请求的头部信息,包括授权令牌和内容类型。在请求体data中,指定了使用的嵌入模型(如果params.embed_model未指定,则使用默认值self.DEFAULT_EMBED_MODEL)、待处理的文本列表以及请求类型(根据params.to_query决定是查询类型还是数据库类型)。
通过get_httpx_client函数获取一个httpx客户端实例,用于发送HTTP POST请求到MiniMax API。请求以批处理的方式进行,每批处理10个文本,直到所有文本都被处理完毕。对于每个批次的响应,如果成功获取到嵌入向量,则将这些向量添加到结果列表中;如果响应中包含错误信息,则记录错误并提前返回错误信息。
注意:
- 确保
params中的api_key和group_id已经正确设置,因为它们对于API请求的授权和定位至关重要。 - 文本列表
params.texts不能为空,因为这是生成嵌入向量的基础数据。 - 函数中的错误处理确保了在API请求过程中遇到问题时,能够及时反馈给调用者,避免了程序的进一步执行。
输出示例:
成功调用do_embeddings函数可能返回如下格式的字典:
{
"code": 200,
"data": [
[0.1, 0.2, 0.3, ...], # 第一个文本的嵌入向量
[0.4, 0.5, 0.6, ...], # 第二个文本的嵌入向量
...
]
}
如果遇到错误,则返回的字典可能如下所示:
{
"code": 错误代码,
"msg": "错误信息",
"error": {
"message": "具体的错误信息",
"type": "invalid_request_error",
"param": None,
"code": None,
}
}
FunctionDef get_embeddings(self, params)
get_embeddings: 此函数的功能是打印嵌入信息和参数。
参数:
params: 此参数用于接收传入的参数信息,其具体内容和格式取决于调用此函数时的上下文环境。
代码描述:
get_embeddings函数是MiniMaxWorker类的一个方法,它接受一个参数params。函数体内部首先打印出字符串"embedding",随后打印出传入的params参数。这表明该函数的主要作用是在控制台上输出与嵌入相关的信息以及传入的参数,用于调试或展示参数信息的目的。
注意:
- 在使用
get_embeddings函数时,需要注意params参数的内容和格式。由于此函数直接将params输出到控制台,因此params的内容应当是能够清晰表达意图的信息,以便于开发者理解和调试。 - 此函数目前看起来主要用于展示或调试目的,因此在生产环境中使用时,可能需要根据实际需求对其进行适当的修改或扩展,以满足特定的业务逻辑。
FunctionDef make_conv_template(self, conv_template, model_path)
make_conv_template: 该函数用于创建一个对话模板。
参数:
conv_template: 字符串类型,指定对话模板,此参数在当前实现中未直接使用。model_path: 字符串类型,指定模型路径,此参数在当前实现中未直接使用。
代码描述:
make_conv_template 函数负责生成一个对话模板实例。这个实例是通过调用 conv.Conversation 类来创建的,其中包含了以下几个关键信息:
name: 对话的名称,这里使用self.model_names[0],即模型名称列表中的第一个名称。system_message: 系统消息,这里设置为“你是MiniMax自主研发的大型语言模型,回答问题简洁有条理。”,用于描述机器人的角色和行为准则。messages: 对话消息列表,初始为空列表。roles: 对话中的角色列表,这里设置为["USER", "BOT"],分别代表用户和机器人。sep: 消息分隔符,这里设置为"\n### ",用于分隔对话中的不同消息。stop_str: 停止字符串,这里设置为"###",用于标识对话的结束。
注意:
- 虽然
conv_template和model_path参数在当前函数实现中未被直接使用,但它们的存在可能是为了未来的功能扩展预留。 - 在使用此函数创建对话模板时,需要确保
self.model_names列表至少包含一个元素,否则会导致索引错误。
输出示例:
假设 self.model_names 列表中的第一个元素为 "MiniMaxModel",则函数的返回值可能如下所示:
Conversation(
name="MiniMaxModel",
system_message="你是MiniMax自主研发的大型语言模型,回答问题简洁有条理。",
messages=[],
roles=["USER", "BOT"],
sep="\n### ",
stop_str="###",
)
这表示创建了一个名为 "MiniMaxModel" 的对话模板,其中包含了预设的系统消息、空的消息列表、指定的角色列表以及消息分隔符和停止字符串。