1.使用LLM完成查询内容的提取

借助LLM的能力,完成query中查询信息的精确提取。

在编写prompt时,可以将一些查询的内容和对应结果作为示例,发给大模型进行学习和模仿,确保后续执行实际查询操作时能够参照学习示例精确提取我们所需要的内容。

query = "2021年工商银行境内优先股工行优1的股息是多少? "

from langchain.prompts import PromptTemplate

prompt = PromptTemplate(
    input_variables=["query"],
    template="""作为一名专业财务检索专家,现在传递给你一个检索信息{query},你会一步步的仔细思考,按步骤和要求完成任务。

    1、首先你要判定查询{query}有没有时间与公司名称,如果其中没有包含时间或者公司名称,则返回:查询内容不完全,更更新查询内容。

    2、之后你只会从中抽取出时间与公司名称,不要额外内容,重新构成一句简短的语句输出。
    你要严格按照下面的格式输出,不要有额外内容。
    在满足要求后,按如下输出。
    输入: '帮我查一下2020年长安汽车的营业收入是多少'    输出: '(时间:2020年,目标:长安汽车)'。
    输入: '找一下三峡水利2008年的上交税款'    输出: '(时间:2008年,目标:三峡水利)'。
    输入: '米哈游2010年的分红比率是多少'    输出: '(时间:2010年,目标:米哈游)'。

    3、最后你要验证输出结果,结果只时间与公司名称,回复中不要带有输入的内容。
    """,
)

from LLM_S import ChatGLM
llm = llm_chatglm.ChatGLM()

from langchain.chains import LLMChain

chain = LLMChain(llm=llm, prompt=prompt)
new_query = (chain.run({"query": query}))
print(new_query)

ok!输出结果:(时间:2021年,目标:工商银行)

2.使用BM25完成目标查找

将提取后的关键信息作为BM25的输入query,再次进行检索尝试。

scores = bm25.get_scores(new_query)
import numpy as np
most_similar_index = np.where(scores == max(scores))[0][0]
most_similar_text = file_names[most_similar_index]

print(f"Query: {query}")
print(f"Most similar text: {most_similar_text}")

这次结果就靠谱了:

多文本检索增强生成2:LLM与BM25结合_BM25