InternLM / HuixiangDou

HuixiangDou: Overcoming Group Chat Scenarios with LLM-based Technical Assistance
BSD 3-Clause "New" or "Revised" License
1.12k stars 92 forks source link

关于触发网络搜索条件的讨论 #276

Closed SchweitzerGAO closed 1 month ago

SchweitzerGAO commented 1 month ago

detail | 详细描述 | 詳細な説明

我在阅读源码时发现,如果本地知识库检索不到匹配文档,则会直接返回UNRELATED,不会进行后续的网络搜索,相反如果检索到了匹配文档则会进行网络搜索,为什么要这样设计呢?我个人认为触发网络搜索的条件应该是:检索不到文档,再进行搜索,检索到了文档就不进行搜索。

tpoisonooo commented 1 month ago
  1. 检索到了却答错了,才会网络搜索。 有段这个:

                # unrelated to knowledge base or bad input, exit
                if sess.code in exit_states:
                    break
    
                if sess.code == ErrorCode.SUCCESS:
                    check.process(sess)

    检索回答,state 会给 SUCCESS, 然后检查是否真的 SUCCESS,不是就进入下个阶段

  2. 检索不到文档,再进行搜索

    本地检索阈值卡得很低(topk 取 100, rerank 阈值也很低), 如果检索不到,大概率是个无关的话题。

    无关的话题不应该再处理了。

    检索低阈值给 UNRELATED 是表示拒答, 和 is_reject 有一点差异,在 chunk 切分上。

  3. "检索到了文档就不进行搜索。"

    text2vec 模型把 text 转 float[] 实际损失了信息,必定不会 100% 检索成功。

    所以需要设计一个时机,用 web search 和 sg search 来补充,提高回答成功率。

SchweitzerGAO commented 1 month ago

这样啊,感谢大佬解答,我再看看源码去