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

9.4 KiB
Raw Permalink Blame History

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_embeddingsmake_conv_template方法在此类中也有定义,但get_embeddings方法仅打印参数信息,而make_conv_template方法返回一个会话模板实例。

注意:

  • 使用FangZhouWorker时需要确保提供的API密钥apiKey和secretKey是有效的以便能够成功调用火山方舟API。
  • 在处理聊天请求时,应注意参数的正确性和完整性,以避免请求失败。
  • 错误处理是此类的一个重要部分,开发者应留意日志中的错误信息,以便及时发现和解决问题。

输出示例: 在调用do_chat方法时,可能的返回值示例为:

{
  "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_namescontroller_addrworker_addr作为键值对加入到kwargs中。这样做是为了将这些参数传递给父类的初始化方法。

接着,使用kwargs.setdefault方法设置context_len的默认值为16384如果kwargs中已经存在context_len,则保持原值不变。

最后,调用父类的__init__方法,通过**kwargs将更新后的参数传递给父类,并完成父类的初始化。此外,将version参数赋值给实例变量self.version,以便后续使用。

注意:

  • 在使用FangZhouWorker类创建对象时需要注意controller_addrworker_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_akset_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_templatemodel_path,但在当前实现中这两个参数并未直接使用。函数主要工作是创建并返回一个Conversation对象,该对象初始化时包含以下关键信息:

  • name: 使用self.model_names[0]作为会话的名称,这里假设model_names是一个列表,且至少包含一个元素。
  • system_message: 设置为一个固定的字符串,即"你是一个聪明、对人类有帮助的人工智能,你可以对人类提出的问题给出有用、详细、礼貌的回答。",这条信息描述了人工智能的角色和期望行为。
  • messages: 初始化为空列表,表示会话开始时没有任何消息。
  • roles: 设置为["user", "assistant", "system"],定义了会话中的角色。
  • sep: 设置为"\n### ",定义了消息之间的分隔符。
  • stop_str: 设置为"###",定义了会话的终止字符串。

注意:

  • 在使用此函数时,需要确保self.model_names已经被正确初始化,且至少包含一个元素,否则会引发索引错误。
  • 该函数的实现暂时没有使用conv_templatemodel_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="###",
)