让一个AI应用回答问题很爽。让它意识到“文档里根本没这个答案”,才是真正有意思的挑战。
这是AI挑战的第一天,起点是一个很小的问题:怎么让RAG应用在资料撑不住的时候,干脆别答?
问题长什么样
设想你上传了一份公司的休假政策,然后问:“员工每年有多少天年假?”
如果政策里写了,应用应该回答,并把支撑答案的那段原文贴出来。
再问一句:“公司报销国际差旅吗?”
如果文档里压根没提差旅,应用应该说:在提供的材料里找不到答案。
一个自信满满的猜测,很容易被当成公司政策。这就是麻烦所在。
光靠RAG解决不了这件事
检索增强生成(RAG)的逻辑是:先检索相关内容,再交给语言模型去组织答案。
但最相似的那段文字,不一定就是能回答问题的文字。
检索系统即使在没有所需信息的时候,也能返回点什么。所以检索是个有用的起点,但它不保证答案有支撑。
第一天的做法
第一版刻意做小:
- 加载一份短文档,切成若干段落;
- 针对问题检索相关段落;
- 要求模型只用这些段落作答;
- 答案必须带来源引用;
- 段落证据不足时,返回一个明确的兜底回复。
兜底可以很简单:“我在提供的文档里找不到这条信息。”
关键是把这句话当成一个合法结果,而不是失败。
要测的三类问题
测试集分三种:
- 可回答:文档里直接有答案;
- 相关但无支撑:问题和文档主题沾边,但答案缺失;
- 不相关:问题超出文档范围。
中间那类最有意思。一段文字看起来相关,却依然撑不起一个答案。
每一条回复都要检查:答案对不对?引用的段落真的支撑它吗?证据缺失时应用有没有拒答?它有没有把本来能答的问题也拒了?
这样才能同时暴露两种毛病:没有支撑的乱答,和过度谨慎的乱拒。
一个容易踩的坑
引用ID合法,不等于答案正确。它只能证明被引的那段文字存在。
至于那段文字是否支撑结论,还得自己看。
同样,不能随便定一个检索分数阈值就假设它到处管用。任何截断值,都得拿真实文档和真实检索方法去测。
今天的目标就是:搭一个小基线,看它在哪儿翻车,把结果记下来,再谈加复杂度。
从这儿起步,是因为“知道什么时候该闭嘴”,看起来是文档类AI应用一个挺有用的地基。
如果你也在做RAG应用,不妨问它一个听起来很相关、但答案被故意从文档里拿掉的问题。
你的应用,发现了吗?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.