昇腾社区首页
中文
注册

类功能

功能描述

将输入的query发送给大模型进行问题改写,然后再根据每个问题检索对应的topk个相似文档,对n个问题*topk个文档去重和按文本长度排序。该类继承mx_rag.retrievers.Retriever,通过调用基类的invoke方法使用检索功能,输入的query长度不超过100万。

函数原型

from mx_rag.retrievers import MultiQueryRetriever
# 所有参数需通过关键字参数传递
MultiQueryRetriever(llm, prompt, parser, llm_config)

参数说明

参数名

数据类型

可选/必选

说明

llm

Text2TextLLM

必选

大模型对象实例,具体类型请参见Text2TextLLM类

prompt

langchain_core.prompts.PromptTemplate

可选

默认值如下,其中question字符串是固定的,不能更改,表示输入的问题;prompt.input_variables必须包含question,prompt.template的长度取值范围为(0,1 * 1024 * 1024],表示提示词。实际请求大模型的query为prompt拼接question,其有效取值依赖MindIE的配置,请参见《MindIE Motor开发指南》中的“MindIE Motor组件 > MindIE Server > 配置参数说明”章节中关于“maxSeqLen”的说明。注意:prompt和question的语言类型最好保持一致,或者指明大模型回答语言类型,否则会影响大模型回答效果。

PromptTemplate(
    input_variables=["question"],
    template="""你是一个人工智能语言模型助理。您的任务是根据用户的原始问题,从不同角度改写生成3个问题。
    请从1开始编号且用中文回答,每个问题用换行符分隔开。下面是一个改写例子:
    样例原始问题:
    你能告诉我关于爱因斯坦相关的信息吗?
    样例改写生成后的3个问题:
    1.爱因斯坦的生平和主要科学成就有哪些?
    2.爱因斯坦在相对论和其他物理学领域有哪些重要贡献?
    3.爱因斯坦的个人生活和他对社会的影响是怎样的?
    需要改写的问题:{question}"""
)

parser

langchain_core.output_parsers.BaseOutputParser

可选

对大模型返回内容处理的类OutputParser的实现类,默认值是“DefaultOutputParser”。其继承实现了

langchain_core.output_parsers.BaseOutputParser,对大模型返回的多个问题通过数字编号进行拆分。

llm_config

LLMParameterConfig

可选

调用大模型的参数,详细描述可参见LLMParameterConfig类

调用示例

#知识库构建的示例请参考以上Retriever调用示例STET1,本示例默认已经完成离线知识库构建。

from mx_rag.retrievers import MultiQueryRetriever
from mx_rag.llm import Text2TextLLM
from mx_rag.utils import ClientParam
# 初始化大模型
llm = Text2TextLLM(base_url="https://<ip>:<port>/v1/chat/completions",
                   model_name="Llama3-8B-Chinese-Chat",
                   client_param=ClientParam(ca_file="/path/to/ca.crt"))
# 初始化检索器
multi_text_retriever = MultiQueryRetriever(llm=llm,
                                           vector_store=vector_store,
                                           document_store=chunk_store,
                                           embed_func=emb.embed_documents,
                                           k=1,
                                           score_threshold=0.2
                                           )
res = multi_text_retriever.invoke("请描述一下2024年高考语文作文题目?")
print(res)