Langchain-Chatchat/markdown_docs/server/chat/agent_chat.md

5.2 KiB
Raw Blame History

FunctionDef agent_chat(query, history, stream, model_name, temperature, max_tokens, prompt_name)

agent_chat: 该函数用于处理与代理的异步聊天对话。

参数:

  • query: 用户输入的查询字符串,必填参数。
  • history: 历史对话列表,每个元素为一个History对象。
  • stream: 是否以流式输出的方式返回数据,默认为False
  • model_name: 使用的LLM模型名称默认为LLM_MODELS列表中的第一个模型。
  • temperature: LLM采样温度用于调整生成文本的随机性默认值由TEMPERATURE常量决定取值范围为0.0到1.0。
  • max_tokens: 限制LLM生成Token的数量默认为None,代表使用模型的最大值。
  • prompt_name: 使用的prompt模板名称默认为"default"。

代码描述: agent_chat函数是一个异步函数,主要负责处理用户与代理的聊天对话。它首先将传入的历史对话列表history转换为History对象列表。然后,定义了一个异步迭代器agent_chat_iterator,用于生成聊天回复。在agent_chat_iterator根据传入的参数和配置初始化相应的LLM模型和工具处理历史对话记录并根据用户的查询生成回复。

如果设置了stream参数为True则函数以流式输出的方式返回数据适用于需要实时更新聊天内容的场景。在流式输出模式下函数会根据不同的状态如工具调用开始、完成、错误等生成不同的JSON格式数据块并通过yield语句异步返回给调用者。

在非流式输出模式下函数会收集所有生成的聊天回复并在最终将它们整合为一个JSON格式的响应体返回。

注意:

  • 在使用agent_chat函数时,需要确保传入的history参数格式正确,即每个元素都应为History对象或能够转换为History对象的数据结构。
  • stream参数的设置会影响函数的返回方式,根据实际应用场景选择合适的模式。
  • 函数依赖于配置好的LLM模型和prompt模板确保在调用前已正确配置这些依赖项。

输出示例: 在非流式输出模式下假设用户的查询得到了一系列的聊天回复函数可能返回如下格式的JSON数据

{
  "answer": "这是聊天过程中生成的回复文本。",
  "final_answer": "这是最终的回复文本。"
}

在流式输出模式下,函数会逐块返回数据,每块数据可能如下所示:

{
  "tools": [
    "工具名称: 天气查询",
    "工具状态: 调用成功",
    "工具输入: 北京今天天气",
    "工具输出: 北京今天多云10-14摄氏度"
  ]
}

或者在得到最终回复时:

{
  "final_answer": "这是最终的回复文本。"
}

FunctionDef agent_chat_iterator(query, history, model_name, prompt_name)

agent_chat_iterator: 此函数的功能是异步迭代生成代理聊天的响应。

参数:

  • query: 字符串类型,用户的查询或输入。
  • history: 可选的List[History]类型,表示对话历史记录。
  • model_name: 字符串类型,默认为LLM_MODELS列表中的第一个模型,用于指定使用的语言模型。
  • prompt_name: 字符串类型,用于指定提示模板的名称。

代码描述: agent_chat_iterator函数是一个异步生成器,用于处理代理聊天的逻辑。首先,函数检查max_tokens是否为整数且小于等于0如果是则将其设置为None。接着,使用get_ChatOpenAI函数初始化一个聊天模型实例,并通过get_kb_details函数获取知识库列表,将其存储在模型容器的数据库中。如果存在Agent_MODEL,则使用该模型初始化另一个聊天模型实例,并将其存储在模型容器中;否则,使用之前初始化的模型。

函数通过get_prompt_template函数获取指定的提示模板,并使用CustomPromptTemplate类创建一个自定义提示模板实例。然后,使用CustomOutputParser类创建一个输出解析器实例,并根据模型名称决定使用initialize_glm3_agent函数初始化GLM3代理执行器或者使用LLMSingleActionAgentAgentExecutor创建一个代理执行器。

在异步循环中,函数尝试创建一个任务,使用wrap_done函数包装代理执行器的调用,并在完成时通过回调通知。如果设置了stream参数则函数会异步迭代回调处理器的输出并根据状态生成不同的响应数据最终以JSON格式产生输出。如果未设置stream参数则会收集所有输出数据并在最后生成一个包含答案和最终答案的JSON对象。

注意:

  • 在使用此函数时,需要确保提供的history参数格式正确,且每个历史记录项都应为History类的实例。
  • model_nameprompt_name参数应根据实际需要选择合适的模型和提示模板。
  • 函数内部使用了多个异步操作和自定义类,如CustomAsyncIteratorCallbackHandlerCustomPromptTemplateCustomOutputParser,需要确保这些组件的正确实现和配置。
  • 此函数设计为与前端实现实时或异步的聊天交互,因此在集成到聊天系统时,应考虑其异步特性和对外部回调的处理方式。