昇腾社区首页
中文
注册
开发者
下载

类功能

功能描述

单轮对话Chain,实现基本的问答对话功能,继承Chain,参考基本对话功能也可实现图文并茂对话功能,参考图文并茂对话功能

函数原型

from mx_rag.chain import SingleText2TextChain
SingleText2TextChain(llm, retriever, reranker, prompt, sys_messages, source, user_content_builder)

参数说明

参数名

数据类型

可选/必选

说明

llm

Text2TextLLM

必选

大模型对象,具体可参见Text2TextLLM

retriever

Retriever

必选

Retriever对象,具体可参见Retriever

reranker

Reranker

可选

Reranker对象,实现对检索的文档进行精排,默认为“None”,具体可参见Reranker

prompt

str

可选

添加知识检索内容同时可以添加系统prompt,对大模型进行更精确的控制,默认值是:"根据上述已知信息,简洁和专业地回答用户的问题。如果无法从已知信息中得到答案,请根据自身经验做出回答"。如果用户需要自定义prompt,请参考大模型的提示词工程增加。

长度取值范围:[1, 1024*1024]

sys_messages

List[dict]

可选

系统消息,默认值为“None”,列表最大长度为16,列表每个字典长度最大为16,字典key字符串长度最大为“16”,value字符串最大长度为4 * 1024* 1024,参考格式:[{"role": "system", "content": "你是一个友好助手" }]

source

bool

可选

在对话过程中,是否返回检索到的相关文档,Chain返回字典中key值为source_documents,默认为“True”

user_content_builder

Callable

可选

回调函数,返回值必须为字符串且长度最大为4*1024*1024,默认函数为_user_content_builder,功能是整合「原始问题、检索到的文档列表、用户提示词」这三类信息,生成可直接作为大模型对话中 user 角色消息 content 字段的文本(即 {"role": "user", "content": 生成结果})

  • 参数user_content_builder的默认函数:
def _user_content_builder(query: str, docs: List[Document], prompt: str) -> str:
    """
       默认的用户输入拼接逻辑。
       参数说明:
       ----------
       query : str
           用户原始提问内容。
           例如:“请根据以下材料总结关键要点。”
       docs : List[Document]
           从检索器(retriever)返回的文档对象列表。
           每个 Document 通常包含:
           - page_content:文档内容文本;
           - metadata:元信息(如来源、标题、分数等)。
       prompt : str
           系统提示词。默认为"根据上述已知信息,简洁和专业地回答用户的问题。
           如果无法从已知信息中得到答案,请根据自身经验做出回答"
       返回:
       -----
       str : 拼接后的完整 prompt 文本,作为大模型输入内容。
       """
    final_prompt = ""
    document_separator: str = "\n\n"
    if len(docs) != 0:
        if prompt != "":
            last_doc = docs[-1]
            last_doc.page_content = (last_doc.page_content
                                     + f"{document_separator}{prompt}")
            docs[-1] = last_doc
        final_prompt = document_separator.join(x.page_content for x in docs)
    if final_prompt != "":
        final_prompt += document_separator
    final_prompt += query
    return final_prompt