123 lines
9.2 KiB
Markdown
123 lines
9.2 KiB
Markdown
## 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`方法时,可能的返回值示例为:
|
||
```json
|
||
{
|
||
"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="###",
|
||
)
|
||
```
|
||
这个返回值展示了一个初始化状态的对话模板,其中包含了基本的对话属性设置。
|
||
***
|