类功能
功能描述
将输入的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)