前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯9467
  • 团队引入 Agentic Coding 的实战方法论
  • quota-audit:用 Claude Code 必看的额度消耗分析插件
  • quota-audit:Claude Code 额度消耗追踪插件
  • Cloudflare 发布 Clef 决策模型,实测对比 Jev
  • Claude Mythos 5.1 发布,整合 Lean 4 形式化证明编译器
  • GitHub 发布代码审查 AI Agent 评测基准 ReviewBench
  • Amazon Bedrock跨账户资源自动化迁移实战
  • LangChain+Bedrock知识库:代理式检索实战对比
  • Bedrock AgentCore多代理系统可解释性与有用性评估指南
  • 企业AI Agent为何总缺知识而非数据
  • AI Agent测试用例:合成数据vs生产数据对比
  • x402协议教程:AI代理免API key按次付费
  • Harness Score:评估代码仓对AI编程助手的支持度
  • 欧洲AI公司发布Kolibri开源权重模型,Apache 2.0许可可商用
  • Jev:结构化AI判决工具链发布中文文档
  • Headless Claude Code中断恢复实战方案
  • tester-army/e2e:用自然语言描述目标的下一代 E2E 测试框架
  • AI Agent 为何演示惊艳、上线就崩
  • 2026 AI Agent 云端基础设施选型完全指南
  • 训练而非编写:Agent Skill 的数据驱动优化实践
  • RAG检索碎片化才是AI文档问答出错的根本原因
  • 高通获得华为逻辑折叠芯片专利许可,验证华为制造能力
  • YC CEO Garry Tan 开源 23 工具 AI 开发栈
  • pstack 转译版:Cursor 规范流向 Claude/Codex/Pi
  • LLM Agent 的「侦察惰性」:知道怎么修却反复扫描
  • AI 编程工具为何忘记团队决策:跨工具上下文共享方案
  • 英国NCSC发布AI Agent安全控制七项建议
  • 传统防火墙无法检测提示词攻击:LLM安全需重新设计
  • 用x402协议让AI Agent无账户付款:实战构建日志
  • 开源智能客服机器人:知道何时转人工
  • Hinton发表首篇RSI论文,AI造AI进入流水线
  • Harness决定AI Agent能力:同模型不同表现
  • Claude Code权限绕过:Read拒绝后Bash仍可读取
  • 生产级Agent系统实战:LLM路由、Prompt合约与PR安全审查
  • LCLM:16倍压缩的潜在上下文语言模型
  • Claude Code mods解析:何时需要构建插件
  • 通义千问三年发展史:从7B参数到2.4万亿
  • Linus确认Linux内核进入「AI新常态」
  • 如何验证Agent实际完成了它声称的任务
  • Claude Code /compact 后哪些内容真正存活
  • 开源安全模型 apex-flash-1:60 个遗留 Bug 任务解出 40 个
  • yOGI Neural Grid:强制验证模型引用来源的工程实现
  • AI推理将成为软件行业最大市场
  • 美团开源LongCat-Video:13.6B参数统一视频生成模型
  • Agent技能需要包管理器而非仅靠Prompt
  • n8n AI Agent 生产环境失败根因与修复方案
  • 565 行 Python 从零实现编程智能体
  • 四大前沿模型横向评测:Astra擅计算机使用、Argon强法律金融、Sol价格最优
  • 本地RAG开发113个评估问题后的实战总结
  • AI重写让我重新审视运行时成本:Node.js转Go/Rust的算账
  • MCP工具超90个时的平台化架构设计
  • 已加载 51 / 9467
8.0
热点
AI SCORE
编程提效2026-10-05 18:55

RAG检索碎片化才是AI文档问答出错的根本原因

dev.to · AI#RAG#检索#LLM应用
Editor brief · 编辑速览

AI并不真正阅读完整文档,而是切成小块后检索最相似片段回答;大多数错误答案在检索阶段已被决定,与AI模型本身无关,改进提示词无法根本解决。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

你把公司员工手册、一个文件夹的 PDF、或者两年的笔记交给了 AI。你问了一个文档里明明有答案的问题。它自信满满地给出了回答——而且是错的。

然后你做了所有人都会做的事:重写问题、加一句"仅使用提供的文档"、换一个更强的模型。有时候管用了,但你永远不知道为什么。

其实有办法知道为什么,而且只需要二十分钟。不用安装任何东西,不用花钱,不用注册账号。

首先,实际情况是怎样的

当你让 AI 读取你自己的文档时,它的阅读方式和你不一样。它做不到——那些文档太长了,根本无法一次性全部装进去。

所以这个工具做的事比你想象的简单得多:

它把你的文档切成小块,通常每块几百个字符。

当你提问时,它选出和你问题最相似的那一块。

然后它把那一块给 AI看,让 AI 回答。

AI 从来没看过你的完整文档。它只看到了从中挑选出的一块,而且这个搜索过程是你没有配置、也无法观察的。

这就是真实的状况。AI 回答的依据只是那块碎片。文档的其余部分——它一篇都没见过。

一个矮小圆润的人物坐在地上,正在读一张被撕成碎片的小纸片,身后堆满了巨大而未被翻阅的成叠纸张

几乎每一个错误答案都在第二步就被决定了,远在 AI 介入之前。这就意味着跟 AI 争论是修不好它的。

这个架构的行业名称叫 RAG。你不需要记住这个术语,你需要看清楚的是第二步。

一个你可以跑一遍的完整示例

这里有一条简短的请假政策。40 行 Python 代码,无需安装,无需密钥——它只做第一步和第二步,然后停下来,展示给 AI 的本来是什么。

把它保存为 check.py,然后运行 python check.py:

# Shows what your AI actually gets handed when you ask about your documents.
# Python 3. Nothing to install, no API key, no account.

CHUNK_SIZE = 350          # <-- change this number and run it again

DOCUMENT = """
Annual leave

Every full-time employee gets 24 days of annual leave a year, plus public
holidays. Leave is counted from 1 January.

Requests go through the HR portal. Your manager approves them. If your manager
is away, their deputy approves instead.

How much notice you need to give depends on how long you are taking off. For a
single day, give two working days of notice. For anything up to a week, give
two weeks of notice. For longer than a week, give one month of notice.

Carrying leave over

You can carry a maximum of 5 unused days into the next year. Anything above 5
days is lost on 31 December. Carried days must be used by 31 March.
"""

QUESTION = "how much notice do I need to book a week off?"

def chunk(text, size):
    words, chunks, current = text.split(), [], ""
    for w in words:
        if len(current) + len(w) + 1 > size:
            chunks.append(current.strip())
            current = ""
        current += w + " "
    if current.strip():
        chunks.append(current.strip())
    return chunks

def score(text, question):
    stop = {"how", "much", "do", "i", "need", "to", "a", "the", "for", "of", "is"}
    q = {w.strip("?.,").lower() for w in question.split()} - stop
    c = {w.strip("?.,").lower() for w in text.split()}
    return len(q & c)

chunks = chunk(DOCUMENT, CHUNK_SIZE)
ranked = sorted(range(len(chunks)), key=lambda i: score(chunks[i], QUESTION), reverse=True)

print(f"chunk size {CHUNK_SIZE} -> {len(chunks)} pieces")
print(f"question: {QUESTION}\n")

for rank, i in enumerate(ranked, 1):
    print(f"  #{rank}  piece {i}  score {score(chunks[i], QUESTION)}")

print("\nThis, and only this, is what the AI gets:\n")
print(f"  {chunks[ranked[0]]}\n")
print("Read it. Could you answer the question from that alone?")

文档里用通俗的英语写明,请一周假需要提前两周通知。下面是返回的结果:

$ python check.py
chunk size 350 -> 2 pieces
question: how much notice do I need to book a week off?

  #1  piece 0  score 2
  #2  piece 1  score 2

This, and only this, is what the AI gets:

  Annual leave Every full-time employee gets 24 days of annual leave a year, plus
  public holidays. Leave is counted from 1 January. Requests go through the HR
  portal. Your manager approves them. If your manager is away, their deputy
  approves instead. How much notice you need to give depends on how long you are
  taking off. For a single day, give two

Read it. Could you answer the question from that alone?

看最后五个词。

For a single day, give two——然后文本就断了。这句话被拦腰斩断了。

AI 拿到这样的内容,会流畅地、毫不迟疑地回答"两天"。它不是在 hallucinating(臆造)。它根据唯一拿到手的证据正确地回答了。只是那证据恰好是一句话被截断的另一半。

而且注意两块的得分:都是 2 分。打平了。错误的那块赢了,仅仅因为它排得靠前。

现在改一个数字

设置 CHUNK_SIZE = 300。同样的文档,同样的问题,同样的代码:

$ python check.py
chunk size 300 -> 3 pieces
question: how much notice do I need to book a week off?

  #1  piece 1  score 3
  #2  piece 0  score 1
  #3  piece 2  score 0

This, and only this, is what the AI gets:

  long you are taking off. For a single day, give two working days of notice. For
  anything up to a week, give two weeks of notice. For longer than a week,
  give one month of notice. Carrying leave over You can carry a maximum of 5
  unused days into the next year. Anything above 5 days is lost on 31

Read it. Could you answer the question from that alone?

正确了。因为分块的边界落到了另一个位置。

下面是我尝试过的所有尺寸:

chunk size   pieces   answer correct?
       150        5   yes
       200        4   NO
       250        3   yes
       300        3   yes
       350        2   NO
       400        2   NO
       450        2   yes
       500        2   yes

这不是一条可以调参调过去的曲线。它是随机的。对、错、对、对、错、错、对、对。

一个你从未选择过、可能从未注意过的数字,决定了你的答案是否正确。不是模型的问题,不是你的 prompt 的问题。

这就是整个示例的核心,而且它可以推广。无论你用的是什么工具,在动 prompt 之前:

找到工具实际检索到的内容

大多数工具都会展示给你——名字叫 sources、citations、references 或者 context。把它打开。

自己读那段文本。把答案完全丢到一边。

问自己一个问题:我仅凭这段文本能正确回答这个问题吗?

这一个问题可以把每一个错误答案拆分成两个完全不同的问题:

不,我做不到——那 AI 从一开始就没有赢的机会。是检索坏了。改 prompt 是白费力气,而这正是大多数人花整个下午在做的事。

不,我做不到——那 AI 从一开始就没有赢的机会。是检索坏了。改 prompt 是白费力气,而这正是大多数人花整个下午在做的事。

可以,我能——答案就在那里,但模型走过去了。这是一个完全不同的问题,需要不同的解决办法。

可以,我能——答案就在那里,但模型走过去了。这是一个完全不同的问题,需要不同的办法。

二十分钟。没有框架,没有监控平台,没有花费。

如果是第一种情况

真正有用的做法,按投入成本从低到高排列:

一次请求更多块。大多数工具只取一块。三块或五块意味着一个被截断的句子可以被邻居块救回来。

一次请求更多块。大多数工具只取一块。三块或五块意味着一个被截断的句子可以被邻居块救回来。

按语义切分,不要按字符数切分。在段落和标题处拆分。在句中截断一块的规则迟早会在答案中间截断。

按语义切分,不要按字符数切分。在段落和标题处拆分。在句中截断一块的规则迟早会在答案中间截断。

把标题和正文放在一起。"give two weeks of notice"这句话如果没有上方的"Annual leave"标题,就无法被匹配到关于请假的问题。

把标题和正文放在一起。"give two weeks of notice"这句话如果没有上方的"Annual leave"标题,就无法被匹配到关于请假的问题。

不要只依赖相似度匹配。纯词匹配能捕获相似度算法遗漏的东西——产品代码、错误号、人名。现在两者结合使用已经是常规推荐,而非高级技巧。NovaKit 有很好的论证,kapa.ai 列出了其他常见错误。

不要只依赖相似度匹配。纯词匹配能捕获相似度算法遗漏的东西——产品代码、错误号、人名。现在两者结合使用已经是常规推荐,而非高级技巧。NovaKit 有很好的论证,kapa.ai 列出了其他常见错误。

这些指南都很好,两篇都值得一读。但它们没有给你的是上面那部分:你遇到的是五种情况中的哪一种。它们给你的是嫌疑人列表。而自己读一遍这个测试给你的是一个确凿的被告。

没人告诉初学者的事

每篇讲这个的文章都以"改进你的检索"收尾。无可厚非。但过了这一步还有一层,它会改变你对这个问题的看法。

更好的分块会让错误答案变少,但永远不会让它们消失。你在调一个旋钮,靠的是运气。

在我搭建的一个系统上——一个用大约 75000 行源材料回答多语言问题的助手——我们停止了调旋钮。答案里每个声明都必须能追溯到源材料中一个真实的、可核查的位置。如果一个引用无法溯源,答案就不发布。不是标记为有问题,不是扣分。是直接扣下不发出。

目标不是一个通常正确的 AI。目标是一个结构上不可能出错 的系统,因为无法提供依据的声明根本到不了你面前。

对照源材料核查,否则不放行。扣下,不是标记。

一个矮小圆润的人物站在一本打开的大书上,举起一张纸条与页面核对,同时另一只手平伸出去拒绝一只递过来的手

这是一个设计决策,不是一个设置,这是 demo 和人们工作中可以依赖的东西之间的区别。你不需要第一天就做到。但值得知道天花板存在,这样你就不会指望改 prompt 能到达那里。

下次你的 AI 把你的文档答错了,不要重写问题。

看看它实际拿到了什么,然后问自己:你仅凭那些能回答吗?

大多数时候你不能——而你本来打算责怪的那台机器是整个流程里唯一在正常工作的部分。

上面第二步是八个检查项之一。其余的我放在了一张可打印的页面里——在依据 AI 给你的答案行动之前值得花三十秒做的事。免费,无需注册:Before you trust an AI answer →

我靠做这种东西谋生,而且我把检验工具全部免费送——都在这里,免费可读。我做的东西 · 与我合作。

用你自己的文档跑一下这个脚本,有什么令人惊讶的结果出来了吗?告诉我——我收集这些案例。

Read next: What is Jev? The AI trained to say "I'm only 60% sure"

Originally published at singhlabs.dev.

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
训练而非编写:Agent Skill 的数据驱动优化实践
下一篇
高通获得华为逻辑折叠芯片专利许可,验证华为制造能力