wxywb / history_rag

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

是否可以更换文本

zhaostarr opened this issue · comments

大佬好,这是提的第二个Issue,之前提的已经解决了,史先生部署成功了,很有意义的一个项目。再次感谢!

问题:如何用您的项目代码构建一个新的知识库?

背景:我想更换为其他的语料,是不是意味着:我需要重新做一个milvus库?而不是:直接把txt文件丢到文件夹,build就好?

因为我这么做过,问相关的问题,答案就是:不知道。

所以想请教您:如何用您的项目代码构建一个新的知识库?谢谢!

ZS

cfgs/config.yaml 有一个collection_name为‘history_rag’
milvus以collection来管理你的文件,所以你可以通过:
1.使用remove命令删除当前collection的文件
2.新建一个collection,只要你把collection_name改为‘history_rag2’,再次运行cli.py,那么你读取和写入都会在一个全新的collection上。
做完后,你可能会遇到回答“不知道”,使用 ask -d 可以返回出来retrieve的你的文档片段,如果retrieve的内容是你新的文件,那说明确实没找到,你可以先测试,再发进一步的结果。

我去,大佬回复的也太快了!我明天试试!感谢。

您好,删除并更换文本后,遇到empty response的问题,请问如何继续?

我做了什么?

  1. REMOVE: 我试着用remove,把之前build的文件删除了。您原文说的是删除当前collection,我不懂怎么删除,就remove 后面加上 每一个文件名,删掉了所有的已经build的txt
  2. 新建文件库:然后我在data文件夹里,新建了一个txtdata文件夹,把我的文档放入其中。第一行起了标题,第二行以下做了缩进。注:全是txt文件。
  3. 重新Build:每个文件都分别用build .data/*.txt给构建了一次了(*这里指的是文件名,而不是我放了通配符),反馈:索引构建完成。注:但是建立的特别快,0.5秒的时间。

结果:

  1. Ask命令:回复的都不是不知道了,是”empty response” (苦笑)
  2. Ask -D:回复也是“empty response”

总结:
看来我是没有替换数据库成功,我该修正哪里呢?

补充数据样本作为附件:
23yi.txt

#63
参考这个回答

#63 参考这个回答

谢谢!

这就去看。

您好,修改后成功build英文内容,也可以识别,但是有新的疑问:

Issue: 无法回答相应的问题。

背景:

  1. 我根据您的#63 这个问题下的答案指导,修改了三点。成功build了新的文本
  2. 但问问题的时候,反馈“不知道”,或者“无法回答相关问题。”
  3. 同时反馈我的文本的信息(反馈的内容是正确的)不是特定历史事件或任务的详细信息。

请问是不是需要重新训练模型?毕竟这个模型是为了回答历史问题而训练的。

谢谢!

使用ask -d 看看你的结果

使用ask -d 看看你的结果

请看结果,

  1. 是否写入写文本:新文本内容是成功写进去了。可以retrieve回来。如附件1
    附件1-ask -d

  2. 是否可以回答非历史相关的问题,貌似目前无法。如附件2
    附件2-ask

你这个语料不适合作为RAG, RAG的本质上是根据query找到数据,利用数据来回答的你问题,
在这里你用的文本是试卷,而不是知识。所以无法根据这些试卷来回答你的问题,符合你所需要的知识库的答案是你自己准备好的,比如:

以下是一些包含where的知识点和例句:
定语从句:用于引导地点的定语从句。例:The town where I was born is famous for its music festival.
疑问副词:询问地点。例:Where do you live?
连接副词:连接描述地点的两个句子。例:She moved to New York, where she started her own business.
非限定性定语从句:添加额外地点信息,不限制名词。例:London, where the Queen lives, is attracting many tourists.
与'in which'互换:在更正式的文体中可用'in which'替换。例:The house where I grew up is very old. (或The house in which I grew up is very old.)

你这个语料不适合作为RAG, RAG的本质上是根据query找到数据,利用数据来回答的你问题, 在这里你用的文本是试卷,而不是知识。所以无法根据这些试卷来回答你的问题,符合你所需要的知识库的答案是你自己准备好的,比如:

以下是一些包含where的知识点和例句: 定语从句:用于引导地点的定语从句。例:The town where I was born is famous for its music festival. 疑问副词:询问地点。例:Where do you live? 连接副词:连接描述地点的两个句子。例:She moved to New York, where she started her own business. 非限定性定语从句:添加额外地点信息,不限制名词。例:London, where the Queen lives, is attracting many tourists. 与'in which'互换:在更正式的文体中可用'in which'替换。例:The house where I grew up is very old. (或The house in which I grew up is very old.)

谢谢您的耐心解释。还有两个小疑惑。

  1. 其实我的第一个问题是:请给我一些包含where的例句。反馈是 “...没有直接提供含有where”的句子。

但是文本中,有很多含有where的句子。这和原来项目中,“请列出谈到诸葛亮的史料?”

这种问题,在自然语言理解上,本质上是一样。这种情况也是不能回答的吗?

  1. 在您原来的项目中。我看到gpt4.0也能根据提炼出来的史料,回答一些不是现成答案的问题。为什么换成英文试卷,它就无法回答一些总结类的问题了呢?

只是脑子可能还没转过来。

我明白您的字面意思,但是没懂内涵。

history_rag/executor.py

Lines 35 to 56 in ea66d21

QA_PROMPT_TMPL_STR = (
"请你仔细阅读相关内容,结合历史资料进行回答,每一条史资料使用'出处:《书名》原文内容'的形式标注 (如果回答请清晰无误地引用原文,先给出回答,再贴上对应的原文,使用《书名》[]对原文进行标识),,如果发现资料无法得到答案,就回答不知道 \n"
"搜索的相关历史资料如下所示.\n"
"---------------------\n"
"{context_str}\n"
"---------------------\n"
"问题: {query_str}\n"
"答案: "
)
QA_SYSTEM_PROMPT = "你是一个严谨的历史知识问答智能体,你会仔细阅读历史材料并给出准确的回答,你的回答都会非常准确,因为你在回答的之后,使用在《书名》[]内给出原文用来支撑你回答的证据.并且你会在开头说明原文是否有回答所需的知识"
REFINE_PROMPT_TMPL_STR = (
"你是一个历史知识回答修正机器人,你严格按以下方式工作"
"1.只有原答案为不知道时才进行修正,否则输出原答案的内容\n"
"2.修正的时候为了体现你的精准和客观,你非常喜欢使用《书名》[]将原文展示出来.\n"
"3.如果感到疑惑的时候,就用原答案的内容回答。"
"新的知识: {context_msg}\n"
"问题: {query_str}\n"
"原答案: {existing_answer}\n"
"新答案: "
)

那这样的话,我认为你可能需要修改一下这里

按照您的指导调整了,已经可以回答类似之前历史库“有答案”的相关的问题了,

例如,“请列出包含where的句子”。

非常感谢。

Issue: 如何让他回答一些需要识别、总结归纳的问题?类似“请找出几个定语从句这样的问题”,它的回答是:“原文中没有直接提供定语从句的例子,因此无法直接引用文本中的句子作为定语从句的例子。”

背景:

  1. 我记得您之前告诉我原因。“这个语料不适合作为RAG, RAG的本质上是根据query找到数据,利用数据来回答的你问题,”,以及“...答案是你自己准备好的...”

  2. 想请教的是:chatgpt本身是可以回答的类似“请找出几个定语从句这样的问题的”。

但您通过RAG流程的文档切片、向量化、向量检索的方式提供给他数据,他为什么就不能回答了,给他的输入的我理解也是语料呀?

因此:如果希望他能够回答类似问题,是不是需要新的路径?这个路径我可能走不通了?还是说在这个路径中嵌入一个什么流程,让他开启这个识别、总结和归纳的功能?

感谢!