markdown_docs/server/model_workers/fangzhou.md
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方法返回一个会话模板实例。
注意:
输出示例:
在调用do_chat方法时,可能的返回值示例为:
{
"error_code": 0,
"text": "这是由模型生成的回复文本。"
}
此示例表示聊天请求成功,其中error_code为0表示没有错误,text字段包含了模型生成的回复文本。如果请求失败,error_code将不为0,并且text字段将包含错误消息。
init: 初始化FangZhouWorker对象,并配置其基本属性。
参数:
代码描述:
此函数是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,以便后续使用。
注意:
controller_addr和worker_addr参数默认为None,这意味着如果不显式提供这些参数,它们将不会被配置。因此,在需要与特定控制器或工作节点通信的场景中,必须提供这些参数的有效值。version参数默认为"chatglm-6b-model",如果需要使用不同版本的模型,应在创建对象时指定相应的版本号。kwargs传递额外参数时,应确保这些参数是父类初始化方法所支持的,以避免引发错误。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返回数据,调用方需要通过迭代的方式获取所有响应数据。get_embeddings: 此函数的功能是打印嵌��信息和参数。
参数:
params: 此参数用于接收传入的参数信息,其具体内容和格式取决于调用此函数时的需求。代码描述:
get_embeddings函数是FangZhouWorker类的一个方法,主要用于展示如何处理和打印传入的参数信息。当调用此函数时,它首先打印出字符串"embedding",随后打印出传入的params参数的内容。这个过程可以帮助开发者理解如何在实际应用中接收和处理参数,尽管在当前的实现中,它仅仅是将传入的参数直接打印出来,没有进行进一步的处理或操作。
注意:
get_embeddings函数时,需要注意params参数的格式和内容,确保它能够正确地被函数接收和处理。make_conv_template: 该函数用于创建一个会话模板。
参数:
代码描述:
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对象可能如下所示(仅展示关键属性):
Conversation(
name="AI_Model_1",
system_message="你是一个聪明、对人类有帮助的人工智能,你可以对人类提出的问题给出有用、详细、礼貌的回答。",
messages=[],
roles=["user", "assistant", "system"],
sep="\n### ",
stop_str="###",
)