125 lines
9.4 KiB
Markdown
125 lines
9.4 KiB
Markdown
## ClassDef FangZhouWorker
|
||
**FangZhouWorker**: FangZhouWorker类是用于与火山方舟API进行交互的工作器。
|
||
|
||
**属性**:
|
||
- `model_names`: 模型名称列表,默认为["fangzhou-api"]。
|
||
- `controller_addr`: 控制器地址,用于连接到模型控制器。
|
||
- `worker_addr`: 工作器地址,用于接收和发送数据。
|
||
- `version`: 模型版本,默认为"chatglm-6b-model"。
|
||
- `context_len`: 上下文长度,默认为16384。
|
||
|
||
**代码描述**:
|
||
FangZhouWorker类继承自ApiModelWorker,专门用于处理与火山方舟API的交互。在初始化时,它接受模型名称、控制器地址、工作器地址和版本等参数,并将这些参数传递给父类ApiModelWorker。此外,它还设置了默认的上下文长度为16384。
|
||
|
||
该类重写了`do_chat`方法,用于执行聊天功能。在此方法中,首先加载配置,然后创建一个MaasService实例用于与火山方舟API进行通信。通过构造请求并调用`stream_chat`方法,它可以处理聊天请求并逐步返回响应。如果遇到错误,它会记录错误信息并返回相应的错误代码和消息。
|
||
|
||
`get_embeddings`和`make_conv_template`方法在此类中也有定义,但`get_embeddings`方法仅打印参数信息,而`make_conv_template`方法返回一个会话模板实例。
|
||
|
||
**注意**:
|
||
- 使用FangZhouWorker时,需要确保提供的API密钥(apiKey和secretKey)是有效的,以便能够成功调用火山方舟API。
|
||
- 在处理聊天请求时,应注意参数的正确性和完整性,以避免请求失败。
|
||
- 错误处理是此类的一个重要部分,开发者应留意日志中的错误信息,以便及时发现和解决问题。
|
||
|
||
**输出示例**:
|
||
在调用`do_chat`方法时,可能的返回值示例为:
|
||
```json
|
||
{
|
||
"error_code": 0,
|
||
"text": "这是由模型生成的回复文本。"
|
||
}
|
||
```
|
||
此示例表示聊天请求成功,其中`error_code`为0表示没有错误,`text`字段包含了模型生成的回复文本。如果请求失败,`error_code`将不为0,并且`text`字段将包含错误消息。
|
||
### FunctionDef __init__(self)
|
||
**__init__**: 初始化FangZhouWorker对象,并配置其基本属性。
|
||
|
||
**参数**:
|
||
- **model_names**: 一个字符串列表,默认为["fangzhou-api"]。这个列表包含了模型的名称。
|
||
- **controller_addr**: 一个字符串,表示控制器的地址。默认值为None。
|
||
- **worker_addr**: 一个字符串,表示工作节点的地址。默认值为None。
|
||
- **version**: 一个字符串,指定模型的版本。默认值为"chatglm-6b-model"。
|
||
- **kwargs**: 接收一个字典,包含了其他可能需要传递给父类初始化方法的关键字参数。
|
||
|
||
**代码描述**:
|
||
此函数是FangZhouWorker类的构造函数,用于初始化一个FangZhouWorker对象。它首先接收几个关键参数,包括模型名称(`model_names`)、控制器地址(`controller_addr`)、工作节点地址(`worker_addr`)以及模型版本(`version`)。这些参数允许用户在创建FangZhouWorker对象时,指定所需的模型、控制器和工作节点的配置。
|
||
|
||
函数内部,首先通过`kwargs.update`方法更新`kwargs`字典,将`model_names`、`controller_addr`和`worker_addr`作为键值对加入到`kwargs`中。这样做是为了将这些参数传递给父类的初始化方法。
|
||
|
||
接着,使用`kwargs.setdefault`方法设置`context_len`的默认值为16384,如果`kwargs`中已经存在`context_len`,则保持原值不变。
|
||
|
||
最后,调用父类的`__init__`方法,通过`**kwargs`将更新后的参数传递给父类,并完成父类的初始化。此外,将`version`参数赋值给实例变量`self.version`,以便后续使用。
|
||
|
||
**注意**:
|
||
- 在使用FangZhouWorker类创建对象时,需要注意`controller_addr`和`worker_addr`参数默认为None,这意味着如果不显式提供这些参数,它们将不会被配置。因此,在需要与特定控制器或工作节点通信的场景中,必须提供这些参数的有效值。
|
||
- `version`参数默认为"chatglm-6b-model",如果需要使用不同版本的模型,应在创建对象时指定相应的版本号。
|
||
- 通过`kwargs`传递额外参数时,应确保这些参数是父类初始化方法所支持的,以避免引发错误。
|
||
***
|
||
### FunctionDef do_chat(self, params)
|
||
**do_chat**: 此函数的功能是执行聊天模型的请求并处理响应。
|
||
|
||
**参数**:
|
||
- `params`: `ApiChatParams`类型,包含聊天请求所需的所有参数。
|
||
|
||
**代码描述**:
|
||
`do_chat`函数首先从`volcengine.maas`导入`MaasService`,用于与方舟API进行交互。通过`params.load_config`方法,根据模型名称加载相关配置,这一步骤涉及到从`ApiChatParams`类继承的属性和方法,以及`load_config`函数的具体实现,后者负责根据工作器名称加载相应的配置信息。
|
||
|
||
接着,函数初始化`MaasService`对象,设置API的访问地址和区域,并通过`set_ak`和`set_sk`方法设置API的访问密钥和安全密钥。
|
||
|
||
函数构造了一个请求字典`req`,其中包含模型名称、请求参数(如最大生成令牌数和温度参数),以及聊天消息。这些参数的值来源于`params`对象,它是`ApiChatParams`类的实例。
|
||
|
||
通过`maas.stream_chat(req)`方法发送请求,并逐个处理返回的响应。如果响应中包含错误信息,则构造并返回一个包含错误代码、错误文本和错误详情的字典。如果响应成功,将返回的文本内容累加,并生成包含错误代码和文本内容的字典。如果遇到未知错误,则记录错误信息并中断循环。
|
||
|
||
**注意**:
|
||
- 在调用`do_chat`函数之前,确保`params`对象已经通过`load_config`方法加载了正确的配置信息,这包括API密钥、安全密钥和模型名称等。
|
||
- 函数中的日志记录依赖于外部的日志配置,确保在使用此函数之前已经正确配置了日志系统。
|
||
- 此函数通过生成器`yield`返回数据,调用方需要通过迭代的方式获取所有响应数据。
|
||
- 请求方舟API时可能会遇到各种错误,包括但不限于网络问题、认证失败或请求参数错误等,开发者需要根据实际情况处理这些错误。
|
||
- 函数中提到的API地址和参数仅为示例,实际使用时需要根据方舟API的最新文档进行相应的调整。
|
||
***
|
||
### FunctionDef get_embeddings(self, params)
|
||
**get_embeddings**: 此函数的功能是打印嵌入信息和参数。
|
||
|
||
**参数**:
|
||
- `params`: 此参数用于接收传入的参数信息,其具体内容和格式取决于调用此函数时的需求。
|
||
|
||
**代码描述**:
|
||
`get_embeddings`函数是`FangZhouWorker`类的一个方法,主要用于展示如何处理和打印传入的参数信息。当调用此函数时,它首先打印出字符串"embedding",随后打印出传入的`params`参数的内容。这个过程可以帮助开发者理解如何在实际应用中接收和处理参数,尽管在当前的实现中,它仅仅是将传入的参数直接打印出来,没有进行进一步的处理或操作。
|
||
|
||
**注意**:
|
||
- 在使用`get_embeddings`函数时,需要注意`params`参数的格式和内容,确保它能够正确地被函数接收和处理。
|
||
- 由于此函数目前的实现较为简单,仅用于演示目的,因此在将其应用于实际项目中时,可能需要根据具体需求对其进行相应的扩展和修改。
|
||
***
|
||
### FunctionDef make_conv_template(self, conv_template, model_path)
|
||
**make_conv_template**: 该函数用于创建一个会话模板。
|
||
|
||
**参数**:
|
||
- **conv_template**: 字符串类型,指定会话模板的内容,可选参数,默认为None。
|
||
- **model_path**: 字符串类型,指定模型路径,可选参数,默认为None。
|
||
|
||
**代码描述**:
|
||
`make_conv_template`函数是`FangZhouWorker`类的一个方法,用于生成一个会话模板。该方法接收两个可选参数:`conv_template`和`model_path`,但在当前实现中这两个参数并未直接使用。函数主要工作是创建并返回一个`Conversation`对象,该对象初始化时包含以下关键信息:
|
||
- `name`: 使用`self.model_names[0]`作为会话的名称,这里假设`model_names`是一个列表,且至少包含一个元素。
|
||
- `system_message`: 设置为一个固定的字符串,即"你是一个聪明、对人类有帮助的人工智能,你可以对人类提出的问题给出有用、详细、礼貌的回答。",这条信息描述了人工智能的角色和期望行为。
|
||
- `messages`: 初始化为空列表,表示会话开始时没有任何消息。
|
||
- `roles`: 设置为["user", "assistant", "system"],定义了会话中的角色。
|
||
- `sep`: 设置为"\n### ",定义了消息之间的分隔符。
|
||
- `stop_str`: 设置为"###",定义了会话的终止字符串。
|
||
|
||
**注意**:
|
||
- 在使用此函数时,需要确保`self.model_names`已经被正确初始化,且至少包含一个元素,否则会引发索引错误。
|
||
- 该函数的实现暂时没有使用`conv_template`和`model_path`参数,但这为将来的扩展留下了可能性。
|
||
- 返回的`Conversation`对象可以用于进一步的会话处理或模拟。
|
||
|
||
**输出示例**:
|
||
假设`self.model_names`的第一个元素为"AI_Model_1",则函数返回的`Conversation`对象可能如下所示(仅展示关键属性):
|
||
```python
|
||
Conversation(
|
||
name="AI_Model_1",
|
||
system_message="你是一个聪明、对人类有帮助的人工智能,你可以对人类提出的问题给出有用、详细、礼貌的回答。",
|
||
messages=[],
|
||
roles=["user", "assistant", "system"],
|
||
sep="\n### ",
|
||
stop_str="###",
|
||
)
|
||
```
|
||
***
|