9.2 KiB
ClassDef AzureWorker
AzureWorker: AzureWorker类是用于与Azure云服务进行交互,特别是用于处理与Azure API相关的聊天和嵌入功能的工作流程。
属性:
controller_addr: 控制器地址,用于与模型控制器进行通信。worker_addr: 工作器地址,用于标识工作器实例。model_names: 模型名称列表,默认为["azure-api"]。version: 模型版本,默认为"gpt-35-turbo"。
代码描述:
AzureWorker类继承自ApiModelWorker类,提供了与Azure API交互的具体实现。在初始化时,它接受控制器地址、工作器地址、模型名称列表和版本等参数,并将这些参数传递给父类构造函数。此外,它还定义了do_chat、get_embeddings和make_conv_template等方法,用于执行与Azure API相关的操作。
do_chat方法接受ApiChatParams参数,用于执行聊天功能。它构造了一个请求数据包,包括消息、温度、最大令牌数等,并向Azure API发送请求。该方法通过生成器返回聊天响应,允许实时处理和返回聊天内容。get_embeddings方法是一个示例方法,展示了如何打印嵌入信息。在实际应用中,该方法可以根据需要进行扩展,以实现具体的嵌入功能。make_conv_template方法用于创建一个会话模板,该模板定义了用户和助手的角色、系统消息以及消息分隔符等。
注意:
- 在使用AzureWorker类时,需要确保已经配置了正确的Azure API密钥和相关参数,以便能够成功调用Azure服务。
do_chat方法中使用了HTTP流,这要求在处理响应时必须正确管理连接和数据流。- 由于
do_chat方法是异步的,调用该方法时需要注意异步编程模式,确保异步任务的正确管理和调度。
输出示例:
在调用do_chat方法时,可能的返回值示例为:
{
"error_code": 0,
"text": "这是由Azure API生成的回复文本。"
}
此示例展示了一个成功的API调用结果,其中error_code为0表示成功,text字段包含了由Azure API生成的回复文本。
FunctionDef init(self)
init: 初始化AzureWorker对象,并配置其基本属性。
参数:
controller_addr: 字符串类型,控制器地址,默认为None。worker_addr: 字符串类型,工作器地址,默认为None。model_names: 字符串列表类型,模型名称,默认为["azure-api"]。version: 字符串类型,模型版本,默认为"gpt-35-turbo"。**kwargs: 接收任意数量的关键字参数。
代码描述:
此初始化函数用于创建一个AzureWorker对象,并对其进行基本配置。首先,通过关键字参数(**kwargs)更新模型名称(model_names)、控制器地址(controller_addr)和工作器地址(worker_addr)。这意味着,如果在创建AzureWorker对象时提供了这些参数,它们将被用于更新或设置对象的相应属性。
接下来,使用super().__init__(**kwargs)调用基类的初始化方法,允许AzureWorker继承并初始化基类中定义的任何属性或方法。这是面向对象编程中常见的做法,确保了类的继承体系能够正确地初始化和配置。
最后,将传入的version参数值赋给对象的version属性。这样,每个AzureWorker对象都会有自己的版本信息,用于标识或处理特定版本的模型。
注意:
- 在使用AzureWorker对象时,确保提供正确的
controller_addr和worker_addr,这对于确保对象能够正确地与控制器和工作器通信非常重要。 model_names参数允许自定义模型名称列表,这在处理多个模型时非常有用。默认情况下,它包含一个预设的模型名称"azure-api"。version参数用于指定模型的版本,根据需要进行调整。默认值为"gpt-35-turbo",但根据实际使用的模型版本,这个值可能需要更改。- 通过
**kwargs传递额外的参数时,应确保这些参数与基类的初始化方法兼容,以避免引发错误。
FunctionDef do_chat(self, params)
do_chat: 此函数的功能是向Azure的OpenAI服务发送聊天请求,并处理返回的聊天结果。
参数:
params:ApiChatParams类型,包含聊天请求所需的参数,如消息列表、温度参数、最大令牌数等。
代码描述:
do_chat函数首先调用params.load_config方法,加载与Azure服务相关的配置,如模型名称。然后,构造一个包含聊天请求所需数据的字典,包括消息列表、温度参数、最大令牌数等。接着,函数构造请求的URL,使用params中的资源名称、部署名称和API版本号。请求头包括内容类型、接受类型和API密钥。
如果启用了详细日志记录,函数会记录URL、请求头和数据到日志中。之后,使用get_httpx_client函数获取一个httpx客户端实例,并发起POST请求到Azure的OpenAI服务。函数通过迭代响应中的行来处理返回的数据,如果行包含有效的聊天内容,则将其累加到文本变量中,并以生成器的形式返回包含错误码和累加文本的字典。如果在响应中检测到错误,函数会记录错误信息到日志。
此函数与get_httpx_client函数关联,后者提供了执行HTTP请求所需的httpx客户端实例。此外,do_chat函数依赖于ApiChatParams类来获取聊天请求的参数,以及load_config方法来加载特定工作器的配置。
注意:
- 确保在调用
do_chat函数之前,已经正确设置了ApiChatParams中的参数,包括API密钥、资源名称、部署名称等,这些参数对于成功调用Azure的OpenAI服务至关重要。 - 函数使用生成器返回聊天结果,调用方需要迭代返回的生成器来获取所有聊天内容。
- 如果遇到请求错误或服务端错误,函数会将错误信息记录到日志中,调用方应当注意检查日志以便及时发现并处理问题。
- 函数中使用了
stream=True选项进行HTTP请求,这意味着响应内容将作为流进行处理,有助于处理大量数据或实时数据。
FunctionDef get_embeddings(self, params)
get_embeddings: 此函数的功能是打印嵌入信息和参数。
参数:
params: 此参数用于接收传入的参数信息。
代码描述:
get_embeddings函数是AzureWorker类的一个方法,主要用于展示如何处理和打印嵌入信息及其相关参数。当调用此函数时,它首先打印出字符串"embedding",随后打印出传入的params参数。这表明该函数可能用于测试或演示如何在控制台上输出信息,尤其是与嵌入向量相关的参数信息。
具体来说,该函数接受一个名为params的参数,这个参数可以是任何类型的数据结构,如字典、列表或其他,这取决于调用函数时的具体需求。函数内部没有对params进行任何形式的处理或操作,仅仅是将其内容直接打印出来。
注意:
- 在实际应用中,
get_embeddings函数可能需要进一步开发以实现特定的功能,如从Azure服务获取嵌入向量等。 - 该函数目前的实现主要用于演示或测试目的,因此在生产环境中使用时需要根据实际需求进行相应的修改和扩展。
- 在调用此函数时,需要确保传入的
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: 系统消息,这里固定为 "You are a helpful, respectful and honest assistant.",表明助手的角色定位。messages: 对话消息列表,初始为空列表。roles: 对话中的角色列表,包含 "user" 和 "assistant" 两个角色。sep: 消息分隔符,这里设定为 "\n### "。stop_str: 对话终止字符串,设定为 "###"。
注意:
- 虽然
conv_template和model_path参数在函数定义中存在,但在当前的实现中并未被使用。这可能是为了未来的功能扩展预留的接口。 - 函数返回的对话模板实例是基于
conv.Conversation类创建的,确保在使用此函数之前已正确导入或定义了conv.Conversation类。
输出示例:
假设 self.model_names[0] 的值为 "ExampleModel",则函数的返回值可能如下所示:
Conversation(
name="ExampleModel",
system_message="You are a helpful, respectful and honest assistant.",
messages=[],
roles=["user", "assistant"],
sep="\n### ",
stop_str="###",
)
这个返回值展示了一个初始化状态的对话模板,其中包含了基本的对话属性设置。