## 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="###", ) ``` ***