Langchain-Chatchat/markdown_docs/server/model_workers/azure.md

123 lines
9.2 KiB
Markdown
Raw Permalink Normal View History

2024-12-20 16:04:03 +08:00
## 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="###",
)
```
这个返回值展示了一个初始化状态的对话模板,其中包含了基本的对话属性设置。
***