{"id":31275,"date":"2026-08-05T11:31:59","date_gmt":"2026-08-05T09:31:59","guid":{"rendered":"https:\/\/botnation.ai\/rag-chatbot\/"},"modified":"2026-08-05T11:54:39","modified_gmt":"2026-08-05T09:54:39","slug":"rag-chatbot","status":"publish","type":"post","link":"https:\/\/botnation.ai\/en\/rag-chatbot\/","title":{"rendered":"RAG Chatbot: How It Works, What It Really Costs and Where It Breaks (2026)"},"content":{"rendered":"<p><script>(function(){var s=document.createElement(\"style\");s.appendChild(document.createTextNode(\".bn-art{ --bn-cream:#faf8f2; --bn-card:#faf6ea; --bn-sand:#ebe3cb; --bn-sand-2:#f3ecd9; --bn-sand-zebra:#f6f0df; --bn-coral:#fe716b; --bn-coral-soft:#fdeeed; --bn-coral-line:#f6c9c6; --bn-coral-txt:#bd3a34; --bn-blue:#3358f0; --bn-blue-soft:#eef1fe; --bn-blue-line:#c9d4fb; --bn-green:#427632; --bn-green-soft:#eef6ea; --bn-ink:#3d351f; --bn-text:#414b56; --bn-muted:#6d6653; --bn-border:#e6dcc2; --bn-r:16px; --bn-r-sm:11px; --bn-sp:22px; --bn-sh:0 1px 2px rgba(61,53,31,.05),0 10px 26px rgba(61,53,31,.07); --bn-sh-sm:0 1px 2px rgba(61,53,31,.05),0 4px 12px rgba(61,53,31,.05); --bn-mono:'IBM Plex Mono','SFMono-Regular',ui-monospace,'Courier New',monospace; color:var(--bn-text); font-size:18px; line-height:1.75; max-width:820px; margin:0 auto; } .bn-art *{box-sizing:border-box} .bn-art p{margin:0 0 1.15em; color:var(--bn-text)} .bn-art h2{ color:var(--bn-ink); font-weight:700; line-height:1.25; font-size:1.72em; margin:2.2em 0 .7em; letter-spacing:-.01em; } .bn-art h3{color:var(--bn-ink); font-weight:700; font-size:1.22em; margin:1.8em 0 .5em} .bn-art a{color:#3f5cd6; text-decoration:underline; text-underline-offset:2px; text-decoration-thickness:1px} .bn-art a:hover{color:var(--bn-coral)} .bn-art strong{color:var(--bn-ink); font-weight:700} .bn-art ul,.bn-art ol{margin:0 0 1.3em; padding-left:1.25em} .bn-art li{margin:.4em 0} .bn-art ul li::marker{color:var(--bn-coral)} .bn-art ol li::marker{color:var(--bn-blue); font-weight:700} .bn-klabel{ display:inline-flex; align-items:center; gap:7px; font-family:var(--bn-mono); font-size:14px; font-weight:600; text-transform:uppercase; letter-spacing:.12em; color:var(--bn-coral); margin:0 0 .2em; } .bn-klabel svg{width:15px;height:15px;flex:none} .bn-tldr{ background:var(--bn-card); border:1px solid var(--bn-border); border-left:4px solid var(--bn-coral); border-radius:var(--bn-r); padding:20px 24px; margin:0 0 30px; box-shadow:var(--bn-sh-sm); } .bn-tldr p{margin:0; color:var(--bn-text)} .bn-tldr p+p{margin-top:.6em} .bn-toc{ background:var(--bn-sand-2); border:1px solid var(--bn-sand); border-radius:var(--bn-r); padding:18px 22px; margin:0 0 34px; } .bn-toc .bn-klabel{color:var(--bn-coral)} .bn-toc ol{margin:.4em 0 0; padding-left:1.2em; columns:2; column-gap:28px} .bn-toc li{margin:.25em 0; break-inside:avoid} .bn-toc a{color:var(--bn-ink); text-decoration:none; font-weight:600; font-size:.96em} .bn-toc a:hover{color:var(--bn-coral); text-decoration:underline} .bn-stats{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin:28px 0} .bn-stat{ background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:20px 18px; text-align:center; box-shadow:var(--bn-sh-sm); } .bn-stat b{display:block; font-size:2em; line-height:1.1; color:var(--bn-coral); font-weight:800; letter-spacing:-.02em} .bn-stat span{display:block; margin-top:6px; font-size:.86em; color:var(--bn-muted); line-height:1.45} .bn-stat:nth-child(2) b{color:var(--bn-blue)} .bn-stat:nth-child(3) b{color:var(--bn-ink)} .bn-grid{display:grid; grid-template-columns:1fr 1fr; gap:18px; margin:26px 0} .bn-card{ background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:22px; box-shadow:var(--bn-sh-sm); } .bn-card h4{margin:.1em 0 .35em; color:var(--bn-ink); font-size:1.06em; font-weight:700; display:flex; gap:9px; align-items:center} .bn-card h4 svg{width:20px;height:20px;flex:none;color:var(--bn-coral)} .bn-card p{margin:0; font-size:.96em} .bn-ex{ background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:20px 0; box-shadow:var(--bn-sh); position:relative; } .bn-ex-h{display:flex; align-items:center; gap:13px; margin-bottom:14px} .bn-ex-n{ flex:none; width:38px; height:38px; border-radius:11px; background:var(--bn-coral-soft); color:var(--bn-coral); display:flex; align-items:center; justify-content:center; font-weight:800; font-size:1.1em; font-family:var(--bn-mono); } .bn-ex-h h3{margin:0; font-size:1.18em} .bn-ex-tag{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.1em; color:var(--bn-muted); display:block; margin-top:2px} .bn-ex p{margin:.2em 0 .9em} .bn-ex .bn-ba{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:14px} .bn-ba div{border-radius:var(--bn-r-sm); padding:13px 15px; font-size:.9em; line-height:1.5} .bn-ba .biz{background:var(--bn-blue-soft); border:1px solid var(--bn-blue-line)} .bn-ba .cli{background:var(--bn-green-soft); border:1px solid #cfe6c4} .bn-ba b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; margin-bottom:4px; color:var(--bn-muted)} .bn-tablewrap{overflow-x:auto; margin:26px 0; border-radius:var(--bn-r); border:1px solid var(--bn-border); box-shadow:var(--bn-sh-sm)} .bn-art table{width:100%; border-collapse:collapse; background:var(--bn-card); font-size:.94em; min-width:520px} .bn-art thead th{background:var(--bn-ink); color:#fbf7ec; text-align:left; font-weight:700; padding:13px 16px; font-size:16px} .bn-art tbody td{padding:12px 16px; border-top:1px solid var(--bn-border); color:var(--bn-text); vertical-align:top; font-size:16px} .bn-art tbody tr:nth-child(even){background:var(--bn-sand-zebra)} .bn-art tbody td:first-child{font-weight:700; color:var(--bn-ink)} .bn-cols{display:grid; grid-template-columns:1fr 1fr; gap:18px; margin:26px 0} .bn-col{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:22px; box-shadow:var(--bn-sh-sm)} .bn-col h4{margin:0 0 12px; font-size:1.05em; color:var(--bn-ink); display:flex; align-items:center; gap:9px} .bn-col h4 svg{width:20px;height:20px;flex:none} .bn-col.biz h4 svg{color:var(--bn-blue)} .bn-col.cli h4 svg{color:var(--bn-green)} .bn-col.warn h4 svg{color:var(--bn-coral)} .bn-col ul{margin:0; padding:0; list-style:none} .bn-col li{position:relative; padding-left:26px; margin:.55em 0; font-size:.96em} .bn-col li::before{content:\\\"\\\"; position:absolute; left:0; top:.5em; width:13px; height:13px; border-radius:50%; background:var(--bn-coral-soft); border:2px solid var(--bn-coral)} .bn-col.biz li::before{background:var(--bn-blue-soft); border-color:var(--bn-blue)} .bn-col.cli li::before{background:var(--bn-green-soft); border-color:var(--bn-green)} .bn-call{ display:flex; gap:14px; border-radius:var(--bn-r); padding:18px 20px; margin:24px 0; background:var(--bn-card); border:1px solid var(--bn-border); box-shadow:var(--bn-sh-sm); } .bn-call svg{width:22px; height:22px; flex:none; margin-top:1px} .bn-call b{color:var(--bn-ink)} .bn-call p{margin:0; font-size:.95em} .bn-call .bn-klabel{margin-bottom:3px} .bn-tip{border-left:4px solid var(--bn-green)} .bn-tip svg{color:var(--bn-green)} .bn-tip .bn-klabel{color:var(--bn-green)} .bn-warn{border-left:4px solid var(--bn-coral)} .bn-warn svg{color:var(--bn-coral)} .bn-warn .bn-klabel{color:var(--bn-coral)} .bn-info{border-left:4px solid var(--bn-blue)} .bn-info svg{color:var(--bn-blue)} .bn-info .bn-klabel{color:var(--bn-blue)} .bn-def{background:var(--bn-blue-soft); border:1px solid var(--bn-blue-line); border-radius:var(--bn-r); padding:20px 24px; margin:24px 0} .bn-def .bn-klabel{color:var(--bn-blue)} .bn-def p{margin:0} .bn-steps{counter-reset:s; list-style:none; padding:0; margin:24px 0} .bn-steps li{position:relative; padding:0 0 4px 56px; margin:0 0 18px; min-height:40px} .bn-steps li::before{ counter-increment:s; content:counter(s); position:absolute; left:0; top:0; width:40px; height:40px; border-radius:12px; background:var(--bn-coral); color:#fff; font-weight:800; font-family:var(--bn-mono); display:flex; align-items:center; justify-content:center; box-shadow:var(--bn-sh-sm); } .bn-steps li b{display:block; color:var(--bn-ink); margin-bottom:2px} .bn-check{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-check h3{margin:.1em 0 .3em} .bn-check>p{font-size:.95em; color:var(--bn-muted); margin-bottom:14px} .bn-check ul{list-style:none; padding:0; margin:0 0 18px} .bn-check li{margin:0; border-top:1px solid var(--bn-border)} .bn-check li:first-child{border-top:none} .bn-check label{display:flex; align-items:flex-start; gap:13px; padding:12px 2px; cursor:pointer; font-size:.97em; color:var(--bn-text)} .bn-check input{appearance:none; -webkit-appearance:none; flex:none; width:22px; height:22px; margin-top:1px; border:2px solid var(--bn-coral-line); border-radius:7px; background:#fff; cursor:pointer; position:relative; transition:.15s} .bn-check input:checked{background:var(--bn-coral); border-color:var(--bn-coral)} .bn-check input:checked::after{content:\\\"\\\"; position:absolute; left:6px; top:2px; width:6px; height:11px; border:solid #fff; border-width:0 2.5px 2.5px 0; transform:rotate(45deg)} .bn-result{border-radius:var(--bn-r-sm); padding:16px 18px; background:var(--bn-coral-soft); border:1px solid var(--bn-coral-line); font-size:.96em} .bn-result b{color:var(--bn-ink)} .bn-result .bn-score{font-family:var(--bn-mono); font-weight:700; color:var(--bn-coral)} .bn-result .bnc-res{display:none; margin-top:10px} .bn-result .bnc-res.on{display:block} .bn-result .bnc-res p{margin:0; color:var(--bn-text)} .bn-faq{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); margin:0 0 12px; box-shadow:var(--bn-sh-sm); overflow:hidden} .bn-faq summary{cursor:pointer; padding:17px 20px; font-weight:700; color:var(--bn-ink); list-style:none; display:flex; justify-content:space-between; align-items:center; gap:14px; font-size:1.03em} .bn-faq summary::-webkit-details-marker{display:none} .bn-faq summary::after{content:\\\"+\\\"; font-family:var(--bn-mono); font-size:1.5em; color:var(--bn-coral); flex:none; line-height:1; transition:transform .2s} .bn-faq[open] summary::after{transform:rotate(45deg)} .bn-faq .bn-faq-b{padding:0 20px 18px; color:var(--bn-text)} .bn-faq .bn-faq-b p{margin:0} .bn-fig{margin:30px 0; text-align:center} .bn-fig img{width:100%; height:auto; border-radius:var(--bn-r); box-shadow:var(--bn-sh); display:block} .bn-fig figcaption{margin-top:10px; font-size:.85em; color:var(--bn-muted); font-style:italic} .bn-cta{background:var(--bn-ink); border-radius:var(--bn-r); padding:34px 32px; margin:36px 0 12px; text-align:center} .bn-cta h3{color:#fff; margin:0 0 .4em; font-size:1.4em} .bn-cta p{color:#e9e2cf; margin:0 auto 20px; max-width:560px; font-size:1em} .bn-cta-btn{display:inline-block; background:var(--bn-coral); color:#332c19 !important; text-decoration:none !important; font-weight:800; padding:15px 34px; border-radius:999px; font-size:1.02em; box-shadow:0 8px 22px rgba(254,113,107,.35); transition:.15s} .bn-cta-btn:hover{background:#ff8782; color:#fff !important} .bn-quiz{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-quiz .bnq-q{padding:14px 0; border-top:1px solid var(--bn-border)} .bn-quiz .bnq-q:first-of-type{border-top:none; padding-top:4px} .bn-quiz .bnq-qt{font-weight:700; color:var(--bn-ink); margin:0 0 10px; font-size:1.02em} .bn-quiz .bnq-opt{display:flex; align-items:flex-start; gap:12px; padding:9px 12px; margin:6px 0; cursor:pointer; font-size:.96em; color:var(--bn-text); border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); background:#fff; transition:.15s} .bn-quiz .bnq-opt:hover{border-color:var(--bn-coral-line); background:var(--bn-coral-soft)} .bn-quiz .bnq-opt input{appearance:none; -webkit-appearance:none; flex:none; width:20px; height:20px; margin-top:1px; border:2px solid var(--bn-coral-line); border-radius:50%; background:#fff; cursor:pointer; position:relative; transition:.15s} .bn-quiz .bnq-opt input:checked{border-color:var(--bn-coral)} .bn-quiz .bnq-opt input:checked::after{content:\\\"\\\"; position:absolute; left:3px; top:3px; width:10px; height:10px; border-radius:50%; background:var(--bn-coral)} .bn-quiz .bnq-opt:has(input:checked){border-color:var(--bn-coral); background:var(--bn-coral-soft)} .bn-quiz .bnq-btn{margin-top:16px; display:inline-block; background:var(--bn-coral); color:#332c19; border:none; font-weight:800; font-size:1em; padding:13px 30px; border-radius:999px; cursor:pointer; box-shadow:0 6px 16px rgba(254,113,107,.28); transition:.15s; font-family:inherit} .bn-quiz .bnq-btn:hover{background:#ff8782} .bn-quiz .bnq-res{display:none; margin-top:18px; padding:18px 20px; border-radius:var(--bn-r-sm); background:var(--bn-blue-soft); border:1px solid var(--bn-blue-line)} .bn-quiz .bnq-res.on{display:block} .bn-quiz #bnq-agent{background:var(--bn-coral-soft); border-color:var(--bn-coral-line)} .bn-quiz #bnq-hybrid{background:var(--bn-green-soft); border-color:#cfe6c4} .bn-quiz .bnq-rt{font-weight:800; color:var(--bn-ink); margin:0 0 6px; font-size:1.08em} .bn-quiz .bnq-res p{margin:0} .bn-spectrum{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-spectrum h3{margin:.1em 0 .3em} .bn-spectrum>p{font-size:.95em; color:var(--bn-muted); margin:0 0 20px} .bn-spec-track{margin:26px 4px 4px} .bn-spec-range{-webkit-appearance:none; appearance:none; width:100%; height:8px; border-radius:999px; background:var(--bn-sand); outline:none; cursor:pointer; margin:0} .bn-spec-range::-webkit-slider-thumb{-webkit-appearance:none; appearance:none; width:26px; height:26px; border-radius:50%; background:var(--bn-coral); border:3px solid #fff; box-shadow:var(--bn-sh-sm); cursor:pointer} .bn-spec-range::-moz-range-thumb{width:26px; height:26px; border-radius:50%; background:var(--bn-coral); border:3px solid #fff; box-shadow:var(--bn-sh-sm); cursor:pointer} .bn-spec-stops{display:flex; justify-content:space-between; margin-top:13px; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.07em; color:var(--bn-muted); gap:8px} .bn-spec-stops span{flex:1; cursor:pointer; transition:.15s; text-align:center} .bn-spec-stops span:first-child{text-align:left} .bn-spec-stops span:last-child{text-align:right} .bn-spec-stops span.on{color:var(--bn-coral); font-weight:700} .bns-pane{display:none; margin-top:22px; border-radius:var(--bn-r-sm); padding:20px 22px; background:var(--bn-sand-2); border:1px solid var(--bn-sand)} .bns-pane.on{display:block} .bns-pane h4{margin:0 0 3px; color:var(--bn-ink); font-size:1.14em} .bns-tag{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.1em; color:var(--bn-coral); display:block; margin-bottom:11px} .bns-pane>p{margin:0; font-size:.96em; color:var(--bn-text)} .bns-grid{display:grid; grid-template-columns:1fr 1fr; gap:12px; margin-top:15px} .bns-grid div{background:#fff; border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); padding:11px 14px; font-size:.9em; color:var(--bn-text)} .bns-grid b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.07em; color:var(--bn-muted); margin-bottom:3px} .bn-roi{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-roi h3{margin:.1em 0 .3em} .bn-roi>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-roi-fields{display:grid; grid-template-columns:1fr 1fr; gap:20px 28px; margin:18px 0 24px} .bn-roi-field:last-child{grid-column:1\/-1} .bn-roi-field label{display:block; font-size:.9em; color:var(--bn-text); font-weight:600; margin-bottom:11px} .bn-roi-field output{font-family:var(--bn-mono); font-weight:700; color:var(--bn-coral)} .bn-roi-out{display:grid; grid-template-columns:repeat(3,1fr); gap:16px; margin-top:4px} .bn-roi-stat{background:var(--bn-sand-2); border:1px solid var(--bn-sand); border-radius:var(--bn-r); padding:20px 16px; text-align:center} .bn-roi-stat b{display:block; font-size:1.85em; line-height:1.05; color:var(--bn-coral); font-weight:800; letter-spacing:-.02em; font-family:var(--bn-mono)} .bn-roi-stat:nth-child(2) b{color:var(--bn-blue)} .bn-roi-stat:nth-child(3) b{color:var(--bn-ink)} .bn-roi-stat span{display:block; margin-top:7px; font-size:.82em; color:var(--bn-muted); line-height:1.4} .bn-roi-note{font-size:16px; color:var(--bn-muted); margin:16px 0 0; font-style:italic} .bn-bot{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:22px 24px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-bot h3{margin:.1em 0 .3em} .bn-bot>p{font-size:.95em; color:var(--bn-muted); margin:0 0 16px} .bn-bot-win{border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); background:#fff; overflow:hidden} .bn-bot-bar{display:flex; align-items:center; gap:11px; padding:12px 16px; background:var(--bn-sand-2); border-bottom:1px solid var(--bn-border)} .bn-bot-ava{flex:none; width:32px; height:32px; border-radius:50%; background:var(--bn-coral-soft); display:flex; align-items:center; justify-content:center} .bn-bot-ava svg{width:19px; height:19px; color:var(--bn-coral)} .bn-bot-id b{display:block; color:var(--bn-ink); font-size:.95em; line-height:1.2} .bn-bot-id span{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-green); display:inline-flex; align-items:center; gap:5px} .bn-bot-id span::before{content:\\\"\\\"; width:7px; height:7px; border-radius:50%; background:var(--bn-green)} .bn-bot-log{padding:16px; min-height:130px; max-height:320px; overflow-y:auto; display:flex; flex-direction:column; gap:10px} .bn-bot-msg{max-width:82%; padding:10px 14px; border-radius:15px; font-size:.95em; line-height:1.5} .bn-bot-msg.bot{align-self:flex-start; background:var(--bn-sand-2); color:var(--bn-text); border-bottom-left-radius:4px} .bn-bot-msg.user{align-self:flex-end; background:var(--bn-coral); color:#332c19; border-bottom-right-radius:4px} .bn-bot-quick{display:flex; flex-wrap:wrap; gap:8px; padding:2px 16px 14px} .bn-art .bn-bot-qbtn{font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:7px 14px; cursor:pointer; transition:.15s} .bn-art .bn-bot-qbtn:hover{background:var(--bn-coral-soft); border-color:var(--bn-coral)} .bn-bot-form{display:flex; gap:8px; padding:12px 16px; border-top:1px solid var(--bn-border); background:var(--bn-sand-2)} .bn-bot-input{flex:1; min-width:0; font-family:inherit; font-size:.95em; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-border); border-radius:999px; padding:10px 16px; outline:none} .bn-bot-input:focus{border-color:var(--bn-coral)} .bn-art .bn-bot-send{flex:none; font-family:inherit; font-weight:700; font-size:16px; color:#fff; background:var(--bn-coral); border:none; border-radius:999px; padding:10px 20px; cursor:pointer; transition:.15s} .bn-art .bn-bot-send:hover{background:#ff8782} .bn-art .bn-bot-note{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic} .bbot-kb,.bbot-fallback{display:none} .bn-shot{margin:16px 0 2px; border:1px solid var(--bn-border); border-radius:var(--bn-r-sm); background:#fff; overflow:hidden} .bn-shot-bar{display:flex; align-items:center; gap:8px; padding:9px 13px; background:var(--bn-sand-2); border-bottom:1px solid var(--bn-border)} .bn-shot-dot{width:8px;height:8px;border-radius:50%;background:var(--bn-green);flex:none} .bn-shot-bar b{color:var(--bn-ink); font-size:.9em} .bn-shot-bar span{margin-left:auto; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.06em; color:var(--bn-muted)} .bn-shot-log{padding:13px 14px; display:flex; flex-direction:column; gap:8px} .bn-shot .bn-bot-msg{max-width:86%; font-size:.9em} .bn-shot-quick{display:flex; flex-wrap:wrap; gap:6px; margin-top:2px} .bn-shot-quick span{font-size:14px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:4px 11px} .bn-exlink{margin:13px 0 0; font-weight:700; display:flex; align-items:center; gap:6px} .bn-exlink svg{width:16px;height:16px;flex:none;color:var(--bn-coral)} .bn-lb{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-lb h3{margin:.1em 0 .3em} .bn-lb>p{font-size:.95em; color:var(--bn-muted); margin:0 0 16px} .bn-lb-ctrl{display:flex; flex-wrap:wrap; gap:11px; align-items:center; margin:0 0 16px} .bn-lb-ctrl br{display:none} .bn-lb-search{flex:1; min-width:200px; font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-border); border-radius:999px; padding:11px 18px; outline:none} .bn-lb-search:focus{border-color:var(--bn-coral)} .bn-lb-filters{display:flex; flex-wrap:wrap; gap:8px} .bn-art .bn-lb-fbtn{font-family:inherit; font-size:16px; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:9px 16px; cursor:pointer; transition:.15s} .bn-art .bn-lb-fbtn:hover{background:var(--bn-coral-soft)} .bn-art .bn-lb-fbtn.on{background:var(--bn-coral); color:#fff; border-color:var(--bn-coral)} .bn-lb .bn-lb-th{cursor:pointer; user-select:none; white-space:nowrap} .bn-lb .bn-lb-th:hover{color:#fbf7ec; opacity:.85} .bn-lb-rank{font-family:var(--bn-mono); font-weight:700; color:var(--bn-coral); text-align:center} .bn-lb-score{font-family:var(--bn-mono); font-weight:700; color:var(--bn-ink); text-align:right; white-space:nowrap} .lb-empty{padding:16px; text-align:center; color:var(--bn-muted); font-size:.95em} .bn-lb-foot{font-size:16px; color:var(--bn-muted); margin:14px 0 0; font-style:italic} @media(max-width:680px){ .bn-art{font-size:17px} .bn-stats,.bn-grid,.bn-cols,.bn-ex .bn-ba,.bns-grid,.bn-roi-fields,.bn-roi-out{grid-template-columns:1fr} .bn-roi-field:last-child{grid-column:auto} .bn-toc ol{columns:1} .bn-art h2{font-size:1.5em} .bn-bot-msg{max-width:90%} } .bn-art sup,.bn-art sub{font-size:14px;line-height:0} .bn-klabel.hc{color:var(--bn-coral-txt)} .bn-cdc{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-cdc h3{margin:.1em 0 .3em} .bn-cdc>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-cdc br{display:none} .bn-cdc p:empty{display:none; margin:0} .cdc-q{padding:15px 0; border-top:1px solid var(--bn-border)} .cdc-q:first-of-type{border-top:none; padding-top:2px} .bn-art .cdc-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .cdc-chips{display:flex; flex-wrap:wrap; gap:8px} .cdc-chips p:not([class]){display:contents} .bn-art .cdc-chip{display:inline-flex; align-items:center; font-size:16px; line-height:1.35; color:var(--bn-ink); background:#fff; border:1px solid var(--bn-coral-line); border-radius:999px; padding:9px 16px; cursor:pointer; transition:.15s} .bn-art .cdc-chip:hover{background:var(--bn-coral-soft)} .bn-art .cdc-chip:has(input:checked){background:var(--bn-coral); color:#332c19; border-color:var(--bn-coral); font-weight:700} .cdc-chip input{position:absolute; opacity:0; width:1px; height:1px; pointer-events:none} .cdc-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .cdc-line{padding:14px 0; border-top:1px solid var(--bn-sand)} .cdc-line:first-of-type{border-top:none; padding-top:2px} .cdc-line p:not([class]){margin:0} .bn-art .cdc-line b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); margin-bottom:6px} .bn-art .cdc-line span{display:block; font-size:16px; line-height:1.62; color:var(--bn-text)} .bn-art .cdc-copy{margin-top:18px; display:inline-block; background:var(--bn-coral); color:#332c19; border:none; font-family:inherit; font-weight:800; font-size:16px; padding:13px 28px; border-radius:999px; cursor:pointer; box-shadow:0 6px 16px rgba(254,113,107,.28); transition:.15s} .bn-art .cdc-copy:hover{background:#ff8782} .bn-art .cdc-note{font-size:16px; color:var(--bn-muted); margin:12px 0 0; font-style:italic; min-height:1.5em} @media(max-width:680px){ .cdc-chips{flex-direction:column; align-items:stretch} .bn-art .cdc-chip{justify-content:flex-start} } .bn-niv{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-niv h3{margin:.1em 0 .3em} .bn-niv>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-niv br{display:none} .bn-niv p:empty{display:none; margin:0} .niv-q{padding:15px 0; border-top:1px solid var(--bn-border)} .niv-q:first-of-type{border-top:none; padding-top:2px} .bn-art .niv-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .niv-out{margin:24px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .bn-art .niv-score{display:flex; align-items:baseline; gap:10px; margin:0 0 13px} .bn-art .niv-score b{font-family:var(--bn-mono); font-size:2.1em; line-height:1; color:var(--bn-coral-txt); font-weight:800; letter-spacing:-.02em} .bn-art .niv-score span{font-size:16px; color:var(--bn-muted)} .niv-gauge{height:10px; border-radius:999px; background:var(--bn-sand); overflow:hidden; margin:0 0 18px} .niv-gauge p:not([class]){display:contents} .niv-gauge i{display:block; height:10px; background:var(--bn-coral); border-radius:999px; width:0} .nivv{display:none; border-radius:var(--bn-r-sm); padding:17px 19px; background:#fff; border:1px solid var(--bn-border)} .nivv.on{display:block} .bn-art .nivv b{display:block; font-size:1.08em; color:var(--bn-ink); margin-bottom:5px} .bn-art .nivv p{margin:0; font-size:16px; line-height:1.62} .bn-art .niv-weak{margin:15px 0 0; font-size:16px; color:var(--bn-text)} .bn-art .niv-weak b{font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); display:block; margin-bottom:4px} .bn-art blockquote{margin:26px 0; padding:18px 22px; background:var(--bn-card); border:1px solid var(--bn-border); border-left:4px solid var(--bn-blue); border-radius:var(--bn-r); box-shadow:var(--bn-sh-sm)} .bn-art blockquote p{margin:0; font-size:17px; line-height:1.65; color:var(--bn-text)} .bn-chk{background:var(--bn-card); border:1px solid var(--bn-border); border-radius:var(--bn-r); padding:24px 26px; margin:28px 0; box-shadow:var(--bn-sh)} .bn-chk h3{margin:.1em 0 .3em} .bn-chk>p{font-size:.95em; color:var(--bn-muted); margin:0 0 18px} .bn-chk br{display:none} .bn-chk p:empty{display:none; margin:0} .chk-doc{border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-border); padding:16px 18px; margin:0 0 6px} .bn-art .chk-doc b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-coral-txt); margin-bottom:6px} .bn-art .chk-doc span{display:block; font-size:16px; line-height:1.62; color:var(--bn-text)} .chk-q{padding:15px 0; border-top:1px solid var(--bn-border)} .bn-art .chk-qt{font-weight:700; color:var(--bn-ink); margin:0 0 11px; font-size:16px; line-height:1.45} .chk-out{margin:22px 0 0; border-radius:var(--bn-r-sm); background:var(--bn-sand-2); border:1px solid var(--bn-sand); padding:20px 22px} .chk-pieces{display:grid; gap:10px; margin:0 0 16px} .chk-piece{border-radius:var(--bn-r-sm); background:#fff; border:1px solid var(--bn-border); padding:12px 14px} .chk-piece.hit{border-color:var(--bn-green); background:var(--bn-green-soft)} .bn-art .chk-piece b{display:block; font-family:var(--bn-mono); font-size:14px; text-transform:uppercase; letter-spacing:.08em; color:var(--bn-muted); margin-bottom:5px} .bn-art .chk-piece.hit b{color:var(--bn-green)} .bn-art .chk-piece span{display:block; font-size:16px; line-height:1.6; color:var(--bn-text)} .bn-art .chk-verdict{border-radius:var(--bn-r-sm); padding:14px 16px; font-size:16px; line-height:1.55; background:var(--bn-green-soft); border:1px solid #cfe6c4; color:var(--bn-text); margin:0 0 12px} .bn-art .chk-verdict.ko{background:var(--bn-coral-soft); border-color:var(--bn-coral-line)} .bn-art .chk-stats{margin:0; font-size:16px; line-height:1.6; color:var(--bn-text)} .bn-art .chk-stats b{font-family:var(--bn-mono); color:var(--bn-coral-txt); font-weight:700}\"));document.head.appendChild(s);})();<\/script><\/p>\n<div class=\"bn-art\">\n<div class=\"bn-tldr\">\n<p><strong>In short.<\/strong> A RAG chatbot does not \u201cknow\u201d anything: for every question it fetches the right passages from your documents, then copies them into the model prompt. Everything happens in retrieval, not in the model. The economic consequence nobody spells out: <strong>indexing 500 pages costs less than one cent<\/strong>, but sending the retrieved passages back on every question costs <strong>0.08 to 0.77 cents per answer<\/strong> depending on the model. And legally, the French regulator is blunt: the knowledge base you plug in is yours to answer for.<\/p>\n<\/div>\n<p>RAG has been everywhere for two years, and most pages explaining it stop at the three-box diagram. You come away knowing it stands for <em>Retrieval-Augmented Generation<\/em>, without knowing what it costs, where it breaks, or what you are allowed to feed it.<\/p>\n<p>This article takes the problem from the other end. It walks the full pipeline, prices every line item with public rates recorded on 5 August 2026, cites a primary regulatory source on the subject, and embeds a chunking tester that shows you, live, the mistake that produces the most wrong answers in production.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Summary<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #3d351f;color:#3d351f\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #3d351f;color:#3d351f\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#What_a_RAG_chatbot_actually_is\" >What a RAG chatbot actually is<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#The_six_pipeline_stages_and_what_you_decide_at_each_one\" >The six pipeline stages, and what you decide at each one<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Chunking_where_most_bad_answers_are_decided\" >Chunking: where most bad answers are decided<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Chunking_tester_does_your_answer_survive_the_split\" >Chunking tester: does your answer survive the split?<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#What_it_really_costs_indexing_is_free_the_question_is_what_you_pay_for\" >What it really costs: indexing is free, the question is what you pay for<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Three_ways_to_build_a_RAG_chatbot\" >Three ways to build a RAG chatbot<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Code_everything\" >Code everything<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Assemble_building_blocks\" >Assemble building blocks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Use_a_platform_that_does_the_RAG_for_you\" >Use a platform that does the RAG for you<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#What_you_should_not_pour_into_the_base\" >What you should not pour into the base<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#What_goes_into_the_base_without_trouble\" >What goes into the base without trouble<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#What_requires_an_explicit_decision\" >What requires an explicit decision<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Since_2_August_2026_saying_it_is_an_AI_is_no_longer_optional\" >Since 2 August 2026, saying it is an AI is no longer optional<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Seven_common_symptoms_and_their_real_cause_in_the_pipeline\" >Seven common symptoms, and their real cause in the pipeline<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Frequently_asked_questions\" >Frequently asked questions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#What_to_remember\" >What to remember<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/botnation.ai\/en\/rag-chatbot\/#Plug_a_chatbot_into_your_own_content\" >Plug a chatbot into your own content<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"What_a_RAG_chatbot_actually_is\"><\/span>What a RAG chatbot actually is<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"bn-def\"><span class=\"bn-klabel\"><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle><path d=\"M12 8h.01M11 12h1v4h1\"><\/path><\/svg>Definition<\/span>\n<p>The CNIL, France\u2019s data protection authority and a GDPR supervisory authority, gives an official wording in its questions and answers on generative AI dated 18 July 2024: \u201c<em>Retrieval Augmented Generation (RAG) consists in integrating an information retrieval mechanism into a vectorised database (or embedding). It produces answers enriched by external data, potentially more specific and easier to update than the model itself.<\/em>\u201d (our translation from the French original.)<\/p>\n<\/div>\n<p>In plain terms: the language model does not memorise your prices, your procedures or your returns policy. On every question, a search engine picks the three or five closest passages from your documents and pastes them into the prompt just before the question. The model answers from what it has just read, not from what it learned during training.<\/p>\n<p>The term comes from a Meta AI research paper, <em>Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks<\/em>, by Patrick Lewis and eleven co-authors, submitted to arXiv on 22 May 2020 (reference 2005.11401) and presented at NeurIPS that same year. Six years on, it is the default way every serious business chatbot works.<\/p>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-body1.jpg\" alt=\"Diagram of the RAG pipeline: a document split into chunks, filed in an index, three chunks pulled out by a magnifying glass and fed into an answer bubble\" decoding=\"async\"><figcaption>The RAG pipeline in five moves: split, index, search, select, generate. The model only steps in at the last box.<\/figcaption><\/div>\n<div class=\"bn-call bn-info\"><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle><path d=\"M12 8h.01M11 12h1v4h1\"><\/path><\/svg>\n<div><span class=\"bn-klabel\">The useful shortcut<\/span>\n<p>A RAG chatbot is an internal search engine with a writer behind it. If the search misses, the writer produces a beautifully phrased wrong answer. That is why 90 % of the work sits in retrieval, not in the choice of model.<\/p>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"The_six_pipeline_stages_and_what_you_decide_at_each_one\"><\/span>The six pipeline stages, and what you decide at each one<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Every stage carries a setting that someone has to choose. On a no-code platform those settings are taken for you by default. If you build the pipeline yourself, they are all yours, including the ones you did not know existed.<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Stage<\/th>\n<th>What happens<\/th>\n<th>The setting that matters<\/th>\n<th>What breaks if you get it wrong<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1. Ingestion<\/td>\n<td>Your pages, PDFs, files and FAQs are collected and converted to text<\/td>\n<td>What you feed in, and how often you refresh it<\/td>\n<td>The bot quotes a procedure that was withdrawn six months ago<\/td>\n<\/tr>\n<tr>\n<td>2. Chunking<\/td>\n<td>The text is cut into fixed-size pieces (the <em>chunks<\/em>)<\/td>\n<td>Chunk size and overlap between two chunks<\/td>\n<td>The answer is cut in half and no chunk contains it<\/td>\n<\/tr>\n<tr>\n<td>3. Embedding<\/td>\n<td>Each chunk becomes a list of numbers (the <em>embedding<\/em>)<\/td>\n<td>The embedding model, and the language it works in<\/td>\n<td>An English-only model misses synonyms in your language<\/td>\n<\/tr>\n<tr>\n<td>4. Retrieval<\/td>\n<td>The question is embedded too, and the closest chunks are searched<\/td>\n<td>How many chunks come back, and the similarity threshold<\/td>\n<td>Too few: incomplete answer. Too many: the model drowns<\/td>\n<\/tr>\n<tr>\n<td>5. Generation<\/td>\n<td>Chunks and question go to the model with instructions<\/td>\n<td>The instructions, and which source wins in a conflict<\/td>\n<td>The model fills the gaps with training memories<\/td>\n<\/tr>\n<tr>\n<td>6. Guardrails<\/td>\n<td>The answer is checked before it is shown<\/td>\n<td>The threshold below which the bot says it does not know<\/td>\n<td>The bot answers anyway, confidently, and wrongly<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Remember the order: a mistake at stage 2 is never recovered at stages 4, 5 or 6. If the information was cut in half during chunking, no downstream setting will piece it back together. That is what the tester below makes visible.<\/p>\n<h2 id=\"chunking\"><span class=\"ez-toc-section\" id=\"Chunking_where_most_bad_answers_are_decided\"><\/span>Chunking: where most bad answers are decided<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Chunking is the most mechanical stage of the pipeline, and by far the most underestimated. The base principle is brutal: cut the text every N characters, optionally with an overlap so that nothing sitting on a boundary is lost. That is what the most widespread splitters do, with two settings named <em>chunk size<\/em> and <em>chunk overlap<\/em>.<\/p>\n<p>Two forces pull against each other. Short chunks are precise and cheap: you send little text back to the model on each question. But they cut answers in half. Long chunks cut nothing, but bill you four times more on every question, and dilute the useful line in noise.<\/p>\n<p>The tester below applies exactly that algorithm to a real commercial policy document. Change the size, the overlap and the question asked, then watch whether the answer survives the split.<\/p>\n<div class=\"bn-chk\" id=\"bnchk\" data-piece=\"Chunk\" data-ok=\"The answer sits WHOLE inside chunk NUM: the bot can quote it as is.\" data-ko=\"The answer is CUT between two chunks: no single chunk holds it entirely, so the bot will answer partially or invent the ending.\" data-s1=\"This setting produces \" data-s2=\" chunks. On a real knowledge base, with 3 chunks retrieved per question, you send \" data-s3=\" characters back to the model on every answer, that is roughly \" data-s4=\" tokens.\">\n<h3><span class=\"ez-toc-section\" id=\"Chunking_tester_does_your_answer_survive_the_split\"><\/span>Chunking tester: does your answer survive the split?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The document below stands in for a knowledge base. Pick a setting and a question, then look at the chunks produced.<\/p>\n<div class=\"chk-doc\"><b>The source document<\/b><span id=\"chksrc\">Orders placed before 2 pm are shipped the same day. Standard delivery in mainland France takes two to three working days and stays free above 60 euros per basket. A tracking number arrives by email as soon as the parcel reaches the carrier. You have fourteen days after delivery to return an item that does not suit you, in its complete packaging. The refund is issued within five working days after the return reaches our warehouse. Personalised items are neither taken back nor exchanged. Customer service answers from Monday to Friday, from 9 am to 6 pm.<\/span><\/div>\n<div class=\"chk-q\">\n<p class=\"chk-qt\">Chunk size<\/p>\n<div class=\"cdc-chips\"><label class=\"cdc-chip\"><input type=\"radio\" name=\"chks\" data-v=\"120\">120 characters<\/label><label class=\"cdc-chip\"><input type=\"radio\" name=\"chks\" data-v=\"240\" checked>240 characters<\/label><label class=\"cdc-chip\"><input type=\"radio\" name=\"chks\" data-v=\"480\">480 characters<\/label><\/div>\n<\/div>\n<div class=\"chk-q\">\n<p class=\"chk-qt\">Overlap between two chunks<\/p>\n<div class=\"cdc-chips\"><label class=\"cdc-chip\"><input type=\"radio\" name=\"chko\" data-v=\"0\">None<\/label><label class=\"cdc-chip\"><input type=\"radio\" name=\"chko\" data-v=\"15\" checked>15 %<\/label><label class=\"cdc-chip\"><input type=\"radio\" name=\"chko\" data-v=\"30\">30 %<\/label><\/div>\n<\/div>\n<div class=\"chk-q\">\n<p class=\"chk-qt\">The question your customer asks<\/p>\n<div class=\"cdc-chips\"><label class=\"cdc-chip\"><input type=\"radio\" name=\"chkq\" data-a=\"You have fourteen days after delivery to return an item that does not suit you\" checked>How many days do I have to return an item?<\/label><label class=\"cdc-chip\"><input type=\"radio\" name=\"chkq\" data-a=\"stays free above 60 euros per basket\">Above what amount is delivery free?<\/label><label class=\"cdc-chip\"><input type=\"radio\" name=\"chkq\" data-a=\"The refund is issued within five working days after the return reaches our warehouse\">When am I refunded?<\/label><\/div>\n<\/div>\n<div class=\"chk-out\">\n<div class=\"chk-pieces\" id=\"chkp\">\n<div class=\"chk-piece\"><b>Chunk 1<\/b><span>Orders placed before 2 pm are shipped the same day. Standard delivery in mainland France takes two to three working days and stays free above 60 euros per basket. A tracking number arrives by email as soon as the parcel reaches the carrier.<\/span><\/div>\n<div class=\"chk-piece hit\"><b>Chunk 2<\/b><span>n as the parcel reaches the carrier. You have fourteen days after delivery to return an item that does not suit you, in its complete packaging. The refund is issued within five working days after the return reaches our warehouse. Personalis<\/span><\/div>\n<div class=\"chk-piece\"><b>Chunk 3<\/b><span>rn reaches our warehouse. Personalised items are neither taken back nor exchanged. Customer service answers from Monday to Friday, from 9 am to 6 pm.<\/span><\/div>\n<\/div>\n<p class=\"chk-verdict\" id=\"chkv\">The answer sits WHOLE inside chunk 2: the bot can quote it as is.<\/p>\n<p class=\"chk-stats\" id=\"chkt\">This setting produces <b>3<\/b> chunks. On a real knowledge base, with 3 chunks retrieved per question, you send <b>720<\/b> characters back to the model on every answer, that is roughly <b>180<\/b> tokens.<\/p>\n<\/div>\n<\/div>\n<p>Three lessons come out of this small tool, and they hold for any knowledge base.<\/p>\n<ul>\n<li><strong>Overlap guarantees nothing.<\/strong> It moves the cuts, it does not remove them. Across the 27 combinations of this tester, 3 lose the answer, and the return question gets lost at 120 characters with 30 % overlap while it survived with no overlap at all.<\/li>\n<li><strong>Large chunks never lose the answer, but they cost.<\/strong> Going from 120 to 480 characters multiplies by four the text sent back to the model on every question, and therefore the bill.<\/li>\n<li><strong>Fixed-size chunking cuts in the middle of words.<\/strong> Serious splitters try separators first (paragraph, sentence, punctuation) and only fall back on the brutal cut as a last resort. If your tool does not, do the work yourself by structuring your documents into short, self-contained blocks.<\/li>\n<\/ul>\n<div class=\"bn-call bn-tip\"><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7V17h8v-2.3A7 7 0 0 0 12 2z\"><\/path><\/svg>\n<div><span class=\"bn-klabel\">Tip<\/span>\n<p>The best chunking optimisation is not a setting, it is a rewrite. An FAQ where each answer fits in a self-contained paragraph of 300 to 600 characters splits itself, whatever the tool. We cover that preparation in our guide on <a href=\"https:\/\/botnation.ai\/en\/train-chatbot-own-data\/\">how to train a chatbot on your own data<\/a>.<\/p>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"What_it_really_costs_indexing_is_free_the_question_is_what_you_pay_for\"><\/span>What it really costs: indexing is free, the question is what you pay for<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This is the most counter-intuitive part of the subject, and the most absent from the pages competing on this query. Everyone assumes the cost of a RAG chatbot sits in building the base. It does not, and by an order of magnitude.<\/p>\n<p>Here is the calculation with public rates recorded on 5 August 2026 on the OpenAI pricing page. Take a base of 500 pages of 600 words, roughly 400,000 tokens to index.<\/p>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-shot3.jpg\" alt=\"OpenAI pricing table showing the embedding models text-embedding-3-small at 0.02 dollars, 3-large at 0.13 dollars and ada-002 at 0.10 dollars per million tokens\" decoding=\"async\"><figcaption>The \u201cEmbedding\u201d rows of the OpenAI pricing grid, recorded on 5 August 2026: $0.02 per million tokens for text-embedding-3-small. Screenshot of developers.openai.com.<\/figcaption><\/div>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>Line item<\/th>\n<th>Volume<\/th>\n<th>Public unit price<\/th>\n<th>What you pay<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Indexing 500 pages<\/td>\n<td>400,000 tokens<\/td>\n<td>$0.02 \/ million (text-embedding-3-small)<\/td>\n<td><strong>$0.008<\/strong>, less than one cent<\/td>\n<\/tr>\n<tr>\n<td>Reindexing one edited page<\/td>\n<td>800 tokens<\/td>\n<td>$0.02 \/ million<\/td>\n<td>$0.000016, effectively nothing<\/td>\n<\/tr>\n<tr>\n<td>Embedding the question<\/td>\n<td>30 tokens<\/td>\n<td>$0.02 \/ million<\/td>\n<td>Negligible<\/td>\n<\/tr>\n<tr>\n<td>Storing the vectors<\/td>\n<td>A few thousand vectors<\/td>\n<td>Qdrant Cloud free tier: 0.5 vCPU, 1 GB RAM, 4 GB disk<\/td>\n<td>Nothing for a prototype, usage-based after that<\/td>\n<\/tr>\n<tr>\n<td>Generating one answer<\/td>\n<td>2,330 input tokens, 250 output<\/td>\n<td>$0.20 \/ $1.20 per million (gpt-5.6-luna)<\/td>\n<td><strong>0.08 cents<\/strong> per answer<\/td>\n<\/tr>\n<tr>\n<td>The same, on a stronger model<\/td>\n<td>Same<\/td>\n<td>$2 \/ $12 per million (gpt-5.6-terra)<\/td>\n<td><strong>0.77 cents<\/strong> per answer<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"bn-stats\">\n<div class=\"bn-stat\"><b>$0.008<\/b><span>to index 500 pages, once and for all<\/span><\/div>\n<div class=\"bn-stat\"><b>$2.30<\/b><span>for 3,000 questions a month on the economy model<\/span><\/div>\n<div class=\"bn-stat\"><b>$23<\/b><span>the same 3,000 questions on a premium model<\/span><\/div>\n<\/div>\n<p>Put differently: the base costs nothing to build, it costs every time it is read. The spending line of a RAG chatbot is the <strong>2,330 input tokens sent back on every question<\/strong>: the system instructions, the retrieved chunks, the conversation history. That is exactly what the tester above lets you measure when you change the chunk size.<\/p>\n<p>Two levers cut that bill without degrading answers. The first is prompt caching, billed far less on reads by most providers, which we detail in our <a href=\"https:\/\/botnation.ai\/en\/claude-chatbot\/\">article on the cost of a Claude chatbot<\/a>. The second is returning three well-chosen chunks rather than eight average ones.<\/p>\n<div class=\"bn-call bn-warn\"><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 3 2 20h20L12 3z\"><\/path><path d=\"M12 10v4M12 17h.01\"><\/path><\/svg>\n<div><span class=\"bn-klabel\">Caution<\/span>\n<p>These figures are <strong>raw API costs<\/strong>, recorded on 5 August 2026 and liable to change without notice. They cover neither hosting, nor a production vector database, nor connectors to your channels, nor the human time spent preparing documents, which is usually the heaviest line of all. A RAG chatbot that costs \u201ca few euros a month\u201d on paper costs several person-days to get started.<\/p>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Three_ways_to_build_a_RAG_chatbot\"><\/span>Three ways to build a RAG chatbot<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>The question is not which one is best, but which one matches what you already have: a technical team, a budget, or neither. We laid out that reasoning for chatbots in general in our guide on <a href=\"https:\/\/botnation.ai\/en\/how-to-develop-a-chatbot\/\">the three routes to developing a chatbot<\/a>; here is how it plays out for RAG.<\/p>\n<div class=\"bn-ex\">\n<div class=\"bn-ex-h\">\n<div class=\"bn-ex-n\">1<\/div>\n<div>\n<h3><span class=\"ez-toc-section\" id=\"Code_everything\"><\/span>Code everything<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">You have developers<\/span><\/p><\/div>\n<\/div>\n<p>You assemble the splitter, the embedding model, the vector database, the retrieval engine and the guardrails yourself. It is the route that gives the most control, especially if the base has to live on your own servers. It is also the one where the six settings from the table above are entirely yours, maintenance included.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>What you get<\/b>Full control of the pipeline, hosting wherever you want, no functional ceiling.<\/div>\n<div class=\"cli\"><b>What it costs you<\/b>A developer who knows the subject, and above all someone watching answer quality over time.<\/div>\n<\/div>\n<\/div>\n<div class=\"bn-ex\">\n<div class=\"bn-ex-h\">\n<div class=\"bn-ex-n\">2<\/div>\n<div>\n<h3><span class=\"ez-toc-section\" id=\"Assemble_building_blocks\"><\/span>Assemble building blocks<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">You already wire up automations<\/span><\/p><\/div>\n<\/div>\n<p>You plug an automation tool into a managed vector database and a model API. You write almost no code, but you stay responsible for the chain: you decide the chunking, the number of chunks retrieved and the behaviour when nothing is found. This route is fast for a prototype and holds up poorly as volume grows.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>What you get<\/b>A prototype in a few days, without writing code.<\/div>\n<div class=\"cli\"><b>What it costs you<\/b>A chain of three or four subscriptions that each break on their own, and no consolidated view of conversations.<\/div>\n<\/div>\n<\/div>\n<div class=\"bn-ex\">\n<div class=\"bn-ex-h\">\n<div class=\"bn-ex-n\">3<\/div>\n<div>\n<h3><span class=\"ez-toc-section\" id=\"Use_a_platform_that_does_the_RAG_for_you\"><\/span>Use a platform that does the RAG for you<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span class=\"bn-ex-tag\">You want a result, not a pipeline<\/span><\/p><\/div>\n<\/div>\n<p>You upload your pages, your documents and your FAQ, the platform handles chunking, embedding, retrieval and guardrails, and you connect the bot to your channels. The six settings still exist, but they come pre-set and battle-tested across thousands of bots.<\/p>\n<div class=\"bn-ba\">\n<div class=\"biz\"><b>What you get<\/b>A bot online the same day, connected to your website, WhatsApp or Messenger, with conversation analytics.<\/div>\n<div class=\"cli\"><b>What it costs you<\/b>A subscription, and less granular tuning than a hand-built pipeline.<\/div>\n<\/div>\n<\/div>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-shot1-en.jpg\" alt=\"Botnation FAQ product page: the AI agent draws on FAQs, help articles, product documentation and internal procedures\" decoding=\"async\"><figcaption>On the Botnation FAQ product page, the section \u201cYour knowledge base, made conversational\u201d describes exactly a RAG use: answers are always aligned with your official content. Screenshot taken on 5 August 2026.<\/figcaption><\/div>\n<p>Botnation publishes a no-code chatbot building platform <strong>and<\/strong> builds custom chatbots for its clients, through its Enterprise offer and its chatbot creation experts. Either way the RAG part is handled: you supply the content, not the pipeline.<\/p>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-shot4-en.jpg\" alt=\"Botnation pricing grid with the For Free plan at 0 euros, Basic at 39 euros, Pro at 59 euros and Enterprise on demand\" decoding=\"async\"><figcaption>Botnation\u2019s public pricing grid recorded on 5 August 2026: For free 0 \u20ac, Basic 39 \u20ac, Pro 59 \u20ac, Enterprise on demand with chatbot creation management.<\/figcaption><\/div>\n<p>The For free plan at 0 \u20ac lets you test the whole chain on a small corpus before committing anything. The Basic plan at 39 \u20ac and the Pro plan at 59 \u20ac per month include 500 and 1,000 users respectively, plus 500 and 1,000 free AI credits granted once. The Enterprise offer, on demand, explicitly includes chatbot creation management.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"What_you_should_not_pour_into_the_base\"><\/span>What you should not pour into the base<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-body3.jpg\" alt=\"Illustration: documents fall into a funnel with a sieve, some land in an open tray, others stay locked inside a padlocked box\" decoding=\"async\"><figcaption>Not everything belongs in the base. The sorting happens before ingestion, not after: once vectorised, a document is hard to pull back out cleanly.<\/figcaption><\/div>\n<p>This is the chapter that almost every RAG chatbot guide skips, and it is the one that costs the most when things go wrong. The CNIL is explicit in its questions and answers on generative AI:<\/p>\n<blockquote>\n<p>\u201cThe deployer who chooses to connect the system to its own knowledge base (RAG) will also be responsible for that processing when it contains personal data.\u201d (our translation from the French original.)<\/p>\n<\/blockquote>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-shot2-fr.jpg\" alt=\"Page from the French data protection authority stating that the deployer connecting the system to its own RAG knowledge base is responsible for that processing, with the AI Act risk pyramid\" decoding=\"async\"><figcaption>The position of the CNIL, France\u2019s data protection authority, on the responsibility of a RAG deployer, in its questions and answers on generative AI dated 18 July 2024. The page is published in French only. Screenshot taken on 5 August 2026.<\/figcaption><\/div>\n<p>The practical consequence is simple: pouring a customer export, a ticket history or an internal directory into a vector database is processing of personal data, with everything that follows (legal basis, information of the individuals, retention period, access and erasure rights). The model provider does not carry that responsibility for you.<\/p>\n<div class=\"bn-cols\">\n<div class=\"bn-col cli\">\n<h4><span class=\"ez-toc-section\" id=\"What_goes_into_the_base_without_trouble\"><\/span><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M20 6 9 17l-5-5\"><\/path><\/svg>What goes into the base without trouble<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>Your public pages, product sheets and help articles<\/li>\n<li>Your terms, returns and delivery policies<\/li>\n<li>Your anonymised internal procedures<\/li>\n<li>Your public prices and option grids<\/li>\n<li>Your de-identified training material<\/li>\n<\/ul>\n<\/div>\n<div class=\"bn-col warn\">\n<h4><span class=\"ez-toc-section\" id=\"What_requires_an_explicit_decision\"><\/span><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M12 3 2 20h20L12 3z\"><\/path><path d=\"M12 10v4M12 17h.01\"><\/path><\/svg>What requires an explicit decision<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ul>\n<li>A CRM export or named support tickets<\/li>\n<li>A staff directory with contact details<\/li>\n<li>Medical, HR or legal case files<\/li>\n<li>Non-public strategic documents<\/li>\n<li>Anything under a confidentiality agreement with a third party<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<p>On sensitive content, the CNIL invites you to look closely at where the base is hosted, and considers that an on-premise deployment is often the safer route. In practice that means asking your provider the question before you upload anything, not after. Our <a href=\"https:\/\/botnation.ai\/en\/chatbot-mistakes\/\">ten most frequent chatbot creation mistakes<\/a> come back to this point.<\/p>\n<div class=\"bn-call bn-info\"><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><circle cx=\"12\" cy=\"12\" r=\"9\"><\/circle><path d=\"M12 8h.01M11 12h1v4h1\"><\/path><\/svg>\n<div><span class=\"bn-klabel\">General information<\/span>\n<p>This section describes the framework applicable on 5 August 2026 and does not replace advice from your data protection officer or from legal counsel. Regulatory positions on AI keep moving, and further recommendations have been announced.<\/p>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Since_2_August_2026_saying_it_is_an_AI_is_no_longer_optional\"><\/span>Since 2 August 2026, saying it is an AI is no longer optional<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Article 50 of the European Artificial Intelligence Act (Regulation EU 2024\/1689) has applied since <strong>2 August 2026<\/strong>. Its first paragraph is direct:<\/p>\n<blockquote>\n<p>\u201c<em>Providers shall ensure that AI systems intended to interact directly with natural persons are designed and developed in such a way that the natural persons concerned are informed that they are interacting with an AI system, unless this is obvious from the point of view of a natural person who is reasonably well-informed, observant and circumspect.<\/em>\u201d<\/p>\n<\/blockquote>\n<p>A RAG chatbot falls squarely inside that scope: it interacts directly with natural persons. The obligation is light (a clear notice that the interlocutor is an AI), but it is not optional, and Article 99(4) of the same regulation provides for fines of up to <strong>15 million euros or 3 % of worldwide annual turnover<\/strong>. The risk diagram published by the CNIL explicitly files chatbots under \u201ctransparency obligations\u201d.<\/p>\n<div class=\"bn-call bn-tip\"><svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M9 18h6M10 22h4M12 2a7 7 0 0 0-4 12.7V17h8v-2.3A7 7 0 0 0 12 2z\"><\/path><\/svg>\n<div><span class=\"bn-klabel\">Tip<\/span>\n<p>Two sentences are enough, and they usually improve the conversation: say in the first message that the visitor is talking to an automated assistant, and explain how to reach a human. A RAG bot that is honest about its nature gets better questions, and therefore gives better answers.<\/p>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"Seven_common_symptoms_and_their_real_cause_in_the_pipeline\"><\/span>Seven common symptoms, and their real cause in the pipeline<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>When a RAG chatbot gives a bad answer, the reflex is to change model. It is almost always the wrong reflex: in six cases out of seven the failure sits upstream of generation.<\/p>\n<div class=\"bn-tablewrap\">\n<table>\n<thead>\n<tr>\n<th>What you observe<\/th>\n<th>The stage at fault<\/th>\n<th>What to check first<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>The bot invents a plausible but wrong answer<\/td>\n<td>Retrieval and guardrails<\/td>\n<td>Nothing was retrieved and the model filled the void. Force an \u201cI do not know\u201d below a similarity threshold<\/td>\n<\/tr>\n<tr>\n<td>The bot answers halfway<\/td>\n<td>Chunking<\/td>\n<td>The answer is cut between two chunks. Test it with the tool above<\/td>\n<\/tr>\n<tr>\n<td>The bot quotes outdated information<\/td>\n<td>Ingestion<\/td>\n<td>The old version of the document is still in the index. An update does not delete the old vector by itself<\/td>\n<\/tr>\n<tr>\n<td>The bot misses on very short questions<\/td>\n<td>Embedding<\/td>\n<td>A three-word question carries little signal. Rewrite the question before searching<\/td>\n<\/tr>\n<tr>\n<td>The bot ignores information that is present<\/td>\n<td>Retrieval<\/td>\n<td>The right chunk exists but ranks eighth. Retrieve more chunks or add a reranking step<\/td>\n<\/tr>\n<tr>\n<td>The bot mixes up two products or two offers<\/td>\n<td>Chunking and ingestion<\/td>\n<td>Two similar sheets look alike. Prepend the product name to every chunk<\/td>\n<\/tr>\n<tr>\n<td>The bot is slow<\/td>\n<td>Generation<\/td>\n<td>Too many chunks retrieved, so an over-long prompt. This is the only symptom where the model is genuinely at fault<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div class=\"bn-fig\"><img src=\"https:\/\/botnation.ai\/wp-content\/uploads\/2026\/08\/botnation-ai-rag-chatbot-body2.jpg\" alt=\"Desk with a shelf of binders and a tablet on a stand displaying empty chat bubbles\" decoding=\"async\"><figcaption>A knowledge base is alive: a binder updated and not reindexed produces a wrong answer that nobody will notice.<\/figcaption><\/div>\n<p>One last point, often forgotten: you have to <strong>read the questions asked<\/strong>, not only the answers given. It is the questions without a satisfying answer that tell you which documents are missing from the base. That is the same principle described in our article on <a href=\"https:\/\/botnation.ai\/en\/where-chatbots-get-information\/\">where chatbots get their information<\/a>.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Frequently_asked_questions\"><\/span>Frequently asked questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<details class=\"bn-faq\">\n<summary>What is the difference between RAG and fine-tuning?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Fine-tuning changes the model itself, to teach it a style, a vocabulary or an answer format. RAG does not touch the model: it hands it the right documents at answer time. For knowledge that moves (prices, stock, procedures) RAG wins by a mile, because updating a document costs a fraction of a cent while retraining costs a project. Fine-tuning keeps its value for tone and format. The two combine.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Do you need to code to build a RAG chatbot?<\/summary>\n<div class=\"bn-faq-b\">\n<p>No. No-code platforms run the whole pipeline for you: you upload your pages and documents, they handle chunking, embedding, retrieval and guardrails. Coding becomes necessary when you have a constraint the platform does not cover: hosting imposed on your own servers, an exotic data source, or a need for very fine retrieval tuning.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>How many documents do you need for it to work?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Far fewer than people think. Twenty well-written pages covering the questions actually asked beat a thousand pages of badly structured documentation. The right starting point is the list of questions your support team receives most often, not your entire website. Adding useless documents even degrades retrieval, by drowning the good chunks among plausible neighbours.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Does RAG remove hallucinations?<\/summary>\n<div class=\"bn-faq-b\">\n<p>It reduces them sharply, it does not remove them. As long as the model is allowed to answer when the search returned nothing relevant, it will fill the void. The real protection is not RAG itself, it is the guardrail that forces an \u201cI do not know\u201d below a similarity threshold, and showing the source used so the reader can check.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>What chunk size should you choose?<\/summary>\n<div class=\"bn-faq-b\">\n<p>There is no universal value, and that is precisely the problem: it depends on how long your answers are. The reliable method is to take your ten most frequent questions, find the sentence that answers each of them in your documents, and check that it fits whole inside one chunk. That is exactly what the tester above does, in miniature. If your answers fit in one sentence, short chunks are enough and cost you less.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Can you run RAG without sending your documents to a foreign provider?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Yes, provided you decide it before you start. The vector database can be hosted in Europe or on your own servers, and there are embedding and generation models that run on European infrastructure. The CNIL considers that for sensitive or strategic documentation, an on-premise deployment is often the safer route. Put the hosting question in your specification, not in your acceptance test.<\/p>\n<\/div>\n<\/details>\n<details class=\"bn-faq\">\n<summary>Must a RAG chatbot announce that it is an AI?<\/summary>\n<div class=\"bn-faq-b\">\n<p>Yes. Article 50 of the European AI Act, applicable since 2 August 2026, requires that the person knows they are talking to an AI system, unless it is obvious. A notice at the start of the conversation is enough. Fines under Article 99 of the same regulation can reach 15 million euros or 3 % of worldwide annual turnover.<\/p>\n<\/div>\n<\/details>\n<h2><span class=\"ez-toc-section\" id=\"What_to_remember\"><\/span>What to remember<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>A RAG chatbot is not a clever model, it is a chain of six links whose weakest one is chunking. Its bill does not come from indexing, which is nearly free, but from the passages sent back to the model on every question. And the base you plug in engages your responsibility, not the model provider\u2019s.<\/p>\n<p>If you are starting from scratch, the most honest shortcut is this one: write twenty short, self-contained answers to the twenty questions you receive most, then upload them into a platform that runs the pipeline. You will know within a day whether the subject deserves a project, and you will have spent nothing to find out. Our <a href=\"https:\/\/botnation.ai\/en\/generative-ai-chatbot\/\">guide to the generative AI chatbot<\/a> and our <a href=\"https:\/\/botnation.ai\/en\/ai-chatbot-agency\/\">overview of AI chatbot agencies<\/a> cover the rest of the road.<\/p>\n<div class=\"bn-cta\">\n<h3><span class=\"ez-toc-section\" id=\"Plug_a_chatbot_into_your_own_content\"><\/span>Plug a chatbot into your own content<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Your FAQs, your documentation and your help articles already exist. Botnation turns them into answers for your customers on your website, WhatsApp, Messenger and Instagram, without you building any pipeline.<\/p>\n<p><a class=\"bn-cta-btn\" href=\"https:\/\/botnation.ai\/en\/products\/faq\/\">Discover the FAQ chatbot<\/a><\/p>\n<p><a href=\"https:\/\/botnation.ai\/en\/contact\/\" style=\"color:#f6c9c6\">Or talk to our chatbot creation experts<\/a><\/p>\n<\/div>\n<p style=\"font-size:16px;color:#6d6653;font-style:italic;margin-top:26px\">Sources: CNIL, questions and answers on the use of a generative AI system (18 July 2024, published in French); Regulation (EU) 2024\/1689 on artificial intelligence, Articles 50 and 99; Lewis et al., <em>Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks<\/em>, arXiv 2005.11401 (22 May 2020); public pricing grids of OpenAI, Qdrant and Botnation recorded on 5 August 2026.<\/p>\n<\/div>\n<p><script>(function(){var R=document.getElementById(\"bnchk\");if(!R){return}function val(n){var l=R.querySelectorAll(\"input[name=\"+n+\"]\");var k=0;for(k=0;l.length>k;k=k+1){if(l[k].checked){return l[k].getAttribute(\"data-v\")}}return l[0].getAttribute(\"data-v\")}function ans(){var l=R.querySelectorAll(\"input[name=chkq]\");var k=0;for(k=0;l.length>k;k=k+1){if(l[k].checked){return l[k].getAttribute(\"data-a\")}}return l[0].getAttribute(\"data-a\")}function go(){var src=document.getElementById(\"chksrc\").textContent.replace(\/\\s+\/g,\" \").trim();var size=parseInt(val(\"chks\"),10);var ov=parseInt(val(\"chko\"),10);var a=ans();var step=size-Math.floor(size*ov\/100+0.5);if(step>0){}else{step=1}var parts=[];var i=0;var g=0;while(g>-1){var p=src.substr(i,size);if(p.length===0){break}parts.push(p);if(i+size>=src.length){break}i=i+step;g=g+1;if(g>300){break}}var hit=-1;var k=0;for(k=0;parts.length>k;k=k+1){if(parts[k].indexOf(a)>-1){hit=k;break}}var box=document.getElementById(\"chkp\");box.textContent=\"\";for(k=0;parts.length>k;k=k+1){var d=document.createElement(\"div\");d.className=(k===hit)?\"chk-piece hit\":\"chk-piece\";var b=document.createElement(\"b\");b.textContent=R.getAttribute(\"data-piece\")+\" \"+(k+1);var sp=document.createElement(\"span\");sp.textContent=parts[k];d.appendChild(b);d.appendChild(sp);box.appendChild(d)}var v=document.getElementById(\"chkv\");if(hit>-1){v.className=\"chk-verdict\";v.textContent=R.getAttribute(\"data-ok\").replace(\"NUM\",\"\"+(hit+1))}else{v.className=\"chk-verdict ko\";v.textContent=R.getAttribute(\"data-ko\")}var sent=3*size;var tok=Math.floor(sent\/4+0.5);var st=document.getElementById(\"chkt\");st.textContent=\"\";var b1=document.createElement(\"b\");b1.textContent=\"\"+parts.length;var b2=document.createElement(\"b\");b2.textContent=\"\"+sent;var b3=document.createElement(\"b\");b3.textContent=\"\"+tok;st.appendChild(document.createTextNode(R.getAttribute(\"data-s1\")));st.appendChild(b1);st.appendChild(document.createTextNode(R.getAttribute(\"data-s2\")));st.appendChild(b2);st.appendChild(document.createTextNode(R.getAttribute(\"data-s3\")));st.appendChild(b3);st.appendChild(document.createTextNode(R.getAttribute(\"data-s4\")))}var ins=R.querySelectorAll(\"input\");var j=0;for(j=0;ins.length>j;j=j+1){ins[j].addEventListener(\"change\",go)}go();})();<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In short. A RAG chatbot does not \u201cknow\u201d anything: for every question it fetches the right passages from your documents, then copies them into the model prompt. Everything happens in retrieval, not in the model. The economic consequence nobody spells out: indexing 500 pages costs less than one cent, but sending the retrieved passages back [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":31262,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[362],"tags":[],"class_list":["post-31275","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chatbot-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts\/31275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/comments?post=31275"}],"version-history":[{"count":1,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts\/31275\/revisions"}],"predecessor-version":[{"id":31276,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/posts\/31275\/revisions\/31276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/media\/31262"}],"wp:attachment":[{"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/media?parent=31275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/categories?post=31275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/botnation.ai\/en\/wp-json\/wp\/v2\/tags?post=31275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}