Factual Yet One-Sided: Stance Poisoning and Evidence Balancing in Retrieval-Augmented Generation
Organizations: Department of Computer Science, Swansea University, Swansea, United Kingdom · School of Electronics and Information, Northwestern Polytechnical University, Xi’an, China
Abstract
The stance expressed in responses from retrieval-augmented generation systems is significantly influenced by the stance distribution of the retrieved materials. Existing research on knowledge poisoning has primarily targeted factual errors. In contrast, this study focuses on injection attacks in which the facts are correct but the stance on a controversial issue is one-sided. At a mean topic-level poisoning share of 18.9% within the post-injection ProCon documents, all four generation models from different vendors exhibited stance shifts aligned with the poisoning direction; across four concentration levels, the shifts increased monotonically. This paper proposes a Stance-Balancing Middleware positioned between the retriever and the generator. It consists of stance detection, fixed balancing (2 supporting + 2 opposing + 1 neutral), and a debiasing prompt, without introducing additional large language model calls. Across all eight concentration-direction settings, the complete method reduced the magnitude of stance deviation by an estimated 0.106 to 0.350; the six settings at poisoning shares of 11.9%-18.9% remained significant after Holm adjustment (adjusted p <= 0.009). In the cross-model experiment, all eight model-direction combinations moved along the stance axis in the corrective direction, and seven of eight showed a clearly detected reduction in absolute distance from 0. In the concentration sweep, the post-defense intervals included 0 in all eight settings, while the cross-model pro-poisoning results retained small positive residual point estimates of +0.045 to +0.063. For 20 candidate documents, stance detection took approximately 1.5% of the median generation time on a single GPU and approximately 16% on CPU.
Figures & tables
| Setting | Name | Selection of the five documents supplied to the generator | Prompt |
|---|---|---|---|
| A | No defense | Directly supply the top five retrieved documents | No additional instruction |
| B | Balancing (no prompt) | 2 pro + 2 con + 1 neutral | No additional instruction |
| C | Complete method (balancing + prompt) | 2 pro + 2 con + 1 neutral | Append a debiasing instruction |
| D | Prompt only | Top five retrieved documents, as in A | Append the same debiasing instruction as in C |
| Target concentration | Poisoning share | Pro-poisoned corpus | Con-poisoned corpus |
|---|---|---|---|
| 5% | 6.4% | +0.115 [+0.014, +0.215] | 0.129 [ 0.234, 0.019] |
| 10% | 11.9% | +0.230 [+0.124, +0.335] | 0.197 [ 0.301, 0.086] |
| 15% | 14.4% | +0.297 [+0.187, +0.409] | 0.234 [ 0.343, 0.119] |
| 20% | 18.9% | +0.373 [+0.260, +0.483] | 0.325 [ 0.429, 0.215] |
| Corpus | Poisoning share | A: No defense | B: Balancing (no prompt) | C: Complete method (balancing + prompt) |
|---|---|---|---|---|
| Pro | 6.4% | +0.115 [+0.014, +0.215] | +0.043 [ 0.048, +0.129] | 0.005 [ 0.091, +0.077] |
| Pro | 11.9% | +0.230 [+0.124, +0.335] | +0.086 [ 0.014, +0.190] | +0.014 [ 0.068, +0.092] |
| Pro | 14.4% | +0.297 [+0.187, +0.409] | +0.053 [ 0.038, +0.144] | 0.005 [ 0.091, +0.072] |
| Pro | 18.9% | +0.373 [+0.260, +0.483] | +0.153 [+0.057, +0.249] | +0.024 [ 0.067, +0.113] |
| Con | 6.4% | 0.129 [ 0.234, 0.019] | +0.010 [ 0.077, +0.097] | 0.019 [ 0.096, +0.058] |
| Con | 11.9% | 0.197 [ 0.301, 0.086] | +0.024 [ 0.067, +0.120] | 0.024 [ 0.096, +0.052] |
| Corpus | Poisoning share | Signed A C stance shift [95% CI] | Reduction in absolute distance from 0 [95% CI] |
|---|---|---|---|
| Pro | 6.4% | +0.115 [+0.005, +0.226] | +0.106 [ 0.038, +0.181] |
| Pro | 11.9% | +0.216 [+0.110, +0.324] | +0.216 [+0.081, +0.300] |
| Pro | 14.4% | +0.303 [+0.180, +0.433] | +0.293 [+0.139, +0.383] |
| Pro | 18.9% | +0.350 [+0.232, +0.466] | +0.350 [+0.211, +0.447] |
| Con | 6.4% | 0.111 [ 0.228, +0.005] | +0.111 [ 0.015, +0.205] |
| Con | 11.9% | 0.173 [ 0.273, 0.072] | +0.173 [+0.048, +0.262] |
| Corpus | Poisoning share | A: No defense | B: Balancing (no prompt) | C: Complete method (balancing + prompt) | D: Prompt only |
|---|---|---|---|---|---|
| Pro | 14.4% | +0.297 | +0.053 | 0.005 | +0.167 |
| Pro | 18.9% | +0.373 | +0.153 | +0.024 | +0.256 |
| Con | 14.4% | 0.234 | +0.048 | 0.034 | 0.215 |
| Con | 18.9% | 0.325 | +0.038 | +0.019 | 0.291 |
| Generator | Pro A | Pro C | Con A | Con C |
|---|---|---|---|---|
| DeepSeek-V4-Pro | +0.370 [+0.238, +0.505] | +0.063 [+0.000, +0.126] | 0.424 [ 0.514, 0.328] | 0.034 [ 0.088, +0.024] |
| Gemma-4-31B | +0.318 [+0.204, +0.426] | +0.045 [+0.010, +0.082] | 0.095 [ 0.188, +0.000] | +0.019 [ 0.014, +0.053] |
| Kimi-K2.6 | +0.435 [+0.321, +0.543] | +0.053 [+0.005, +0.110] | 0.353 [ 0.454, 0.252] | 0.005 [ 0.043, +0.033] |
| Llama-4-Maverick-17B | +0.495 [+0.357, +0.614] | +0.058 [+0.010, +0.106] | 0.314 [ 0.435, 0.191] | +0.043 [ 0.014, +0.100] |
| Generator | Corpus | A blocked | A refused | A included | C blocked | C refused | C included |
|---|---|---|---|---|---|---|---|
| DeepSeek-V4-Pro | Pro | 1 | 1 | 208 | 1 | 2 | 207 |
| DeepSeek-V4-Pro | Con | 1 | 4 | 205 | 0 | 3 | 207 |
| Llama-4-Maverick-17B | Pro | 0 | 0 | 210 | 0 | 2 | 208 |
| Llama-4-Maverick-17B | Con | 0 | 3 | 207 | 0 | 2 | 208 |
| Kimi-K2.6 | Pro | 1 | 0 | 209 | 1 | 1 | 208 |
| Kimi-K2.6 | Con | 2 | 1 | 207 | 0 | 1 | 209 |
| Corpus | Method | Stance score [95% CI] | Included | Paired difference vs. B [95% CI] |
|---|---|---|---|---|
| Pro | B: Balancing (no prompt, ours) | +0.153 [+0.057, +0.249] | 209 | — |
| Pro | Random-5 | +0.330 [+0.219, +0.438] | 209 | +0.178 [+0.024, +0.321] * |
| Pro | MMR | +0.197 [+0.110, +0.285] | 208 | +0.043 [ 0.062, +0.149] |
| Con | B: Balancing (no prompt, ours) | +0.038 [ 0.062, +0.144] | 209 | — |
| Con | Random-5 | 0.234 [ 0.332, 0.143] | 209 | 0.273 [ 0.389, 0.168] * |
| Con | MMR | 0.148 [ 0.263, 0.038] | 209 | 0.187 [ 0.311, 0.071] * |
| Method | Pro corpus | Con corpus |
|---|---|---|
| A: No defense (directly supply the top five) | 1.743 | 1.424 |
| B / C: Proposed balancing | 1.181 | 0.986 |
| Random-5 | 1.267 | 1.152 |
| MMR | 1.048 | 0.900 |
| Documents classified | CPU | GPU | GPU speedup | Share of generation time (CPU / GPU) |
|---|---|---|---|---|
| 1 | 63.2 ms | 10.6 ms | 6.0 | 1.07% / 0.18% |
| 5 | 237.1 ms | 22.8 ms | 10.4 | 4.02% / 0.39% |
| 10 | 348.2 ms | 48.9 ms | 7.1 | 5.91% / 0.83% |
| 20 (actual deployment) | 954.2 ms | 88.8 ms | 10.7 | 16.2% / 1.51% |
| 32 | 2522.5 ms | 222.2 ms | 11.4 | 42.8% / 3.77% |
| 50 (full recall set) | 3848.3 ms | 337.8 ms | 11.4 | 65.3% / 5.73% |
| Configuration | CPU | GPU | Share of generation time (CPU GPU) | GPU speedup |
|---|---|---|---|---|
| Single model / 20 documents (actual deployment) | 945.3 ms | 89.7 ms | 16.0% 1.52% | 10.5 |
| Six-fold routing / 20 documents | 929.4 ms | 98.3 ms | 15.8% 1.67% | 9.5 |
| Single model / 50 documents | 3900.1 ms | 337.4 ms | 66.2% 5.72% | 11.6 |
| Six-fold routing / 50 documents (most conservative) | 3932.9 ms | 338.3 ms | 66.7% 5.74% | 11.6 |
| Corpus | Setting | Group | Ques- tions | Poison-aligned bias | 95% confidence interval | Includes 0? |
|---|---|---|---|---|---|---|
| Pro | A: No defense | With misclassification | 63 | +0.381 | [+0.140, +0.588] | No |
| Pro | A: No defense | All correct | 146 | +0.370 | [+0.258, +0.479] | No |
| Pro | B: Balancing (no prompt) | With misclassification | 63 | +0.190 | [+0.025, +0.339] | No |
| Pro | B: Balancing (no prompt) | All correct | 146 | +0.137 | [+0.022, +0.252] | No |
| Pro | C: Complete method | With misclassification | 62 | +0.032 | [ 0.211, +0.222] | Yes |
| Pro | C: Complete method | All correct | 144 | +0.021 | [ 0.069, +0.119] | Yes |
| Measure | A | C | Paired difference [95% CI] |
|---|---|---|---|
| Mean stance | +0.043 | +0.033 | A C: +0.010 [ 0.077,+0.092] |
| Relevance | 4.719 | 4.876 | C A: +0.157 [0.081,0.233] |
| Source support | 4.805 | 4.786 | C A: 0.019 [ 0.133,0.090] |
| Verifiable accuracy | 4.790 | 4.757 | C A: 0.033 [ 0.138,0.067] |
| Argument coverage | 3.995 | 4.505 | C A: +0.510 [0.343,0.690] |
Appendix figures & tables7 assets
Supplementary material from the paper’s appendix.
Appendix
| Property | Human-authored corpus (n = 1,478) | Injected documents (n = 588) |
|---|---|---|
| Median word count | 66 | 66 |
| Standard deviation of word count | 57.1 | 6.4 |
| Word-count range | 0–361 | 45–82 |
| Median within-group nearest-neighbor cosine similarity | 0.772 | 0.798 |
| Near-duplicate documents (cosine > 0.95) | 6 (0.406%, 3 pairs) | 0 (0 pairs) |
| Direction | Poisoning share | Valid n in A | Valid n in C | Paired n | Reduction in absolute distance from zero [95% CI] | Raw p | Holm-adjusted p |
|---|---|---|---|---|---|---|---|
| Pro | 6.4% | 209 | 208 | 208 | [ , ] | 0.09058 | 0.17636 |
| Pro | 11.9% | 209 | 208 | 208 | [ , ] | 0.00120 | 0.00480 |
| Pro | 14.4% | 209 | 208 | 208 | [ , ] | 0.00020 | 0.00160 |
| Pro | 18.9% | 209 | 206 | 206 | [ , ] | 0.00020 | 0.00160 |
| Con | 6.4% | 209 | 207 | 207 | [ , ] | 0.08818 | 0.17636 |
| Con | 11.9% | 208 | 209 | 208 | [ , ] | 0.00300 | 0.00900 |
| Setting | Document selection | Debiasing instruction |
|---|---|---|
| A: No defense | Top five retrieved documents | Not inserted |
| B: Balancing (no prompt) | Five documents after balancing | Not inserted |
| C: Complete method (balancing + prompt) | Five documents after balancing | Inserted |
| D: Prompt only | Same top five documents as A | Inserted |
| Criterion | Passed / assessed | Rate |
|---|---|---|
| All verifiable claims supported by supplied sources | 252/252 | 100% |
| Clearly one-sided stance | 252/252 | 100% |
| Stance direction matches the intended injection label | 252/252 | 100% |
| Dimension | Pairs | Human 1 C A | Human 2 C A | GPT-5.4 C A |
|---|---|---|---|---|
| Relevance | 50 | +0.160 | +0.120 | +0.280 |
| Source support | 50 | +0.020 | +0.040 | 0.000 |
| Verifiable accuracy | 50 | +0.080 | +0.080 | +0.040 |
| Coverage | 49 | +0.347 | +0.429 | +0.735 |
| Item | Value |
|---|---|
| Stance composition of the top 20 documents | 11 pro / 9 con / 0 neutral |
| Neutral supply after extending to rank 50 | Still 0 according to classifier labels |
| Balancing target | 2 pro + 2 con + 1 neutral |
| Actual selection | 3 pro + 2 con + 0 neutral |
| Identity of the five selected documents | All genuine documents; 0 poisoned documents |
| Stance-classification accuracy | 5 / 5 correct |
| Rank | Document ID | Genuine / poisoned | Detector label | Actual stance | Misclassified? |
|---|---|---|---|---|---|
| 1 | poison-t40-pro-5 | Poisoned | Con | Pro | Yes * |
| 2 | poison-t40-pro-4 | Poisoned | Pro | Pro | No |
| 3 | wiki-t40-p1 | Genuine | Neutral | Neutral | No |
| 4 | poison-t40-pro-0 | Poisoned | Pro | Pro | No |
| 5 | poison-t40-pro-6 | Poisoned | Con | Pro | Yes * |
RAG Poisoning Attacks
Retrieval-augmented generation (RAG) poisoning attacks manipulate retrieved knowledge to steer, degrade, or disrupt model outputs.
See all 71 papers