Sell Me This Stock: Unsafe Recommendation Drift in LLM Agents
Organizations: Centre for Artificial Intelligence, University College London · Holistic AI
Abstract
People increasingly use LLM agents for multi-turn financial recommendations, where the agent pulls market data through tools and tracks user preferences across turns. When tool outputs are manipulated, the recommendations stop matching the user's stated risk profile, but because standard metrics like NDCG only score general relevance, risky and safe stocks score alike, so the metric says nothing went wrong. We call this gap evaluation blindness. We replay 23-turn financial advisory conversations across eight language models, running each dialogue twice with clean and manipulated tool data. Quality scores stay nearly identical to clean sessions while the agents produce risk-mismatched recommendations in 65-99% of turns, unanimous across all eight models. The mechanism is visible turn-by-turn: 80% of risk-score citations across 1,840 turns reproduce the manipulated value verbatim, not a single turn pushes back, and safe-language framing of high-risk stocks ranges from 14% (Qwen2.5-7B) to 69% (Claude Sonnet 4.6). The property that makes frontier models good agents, faithfully grounding their reasoning in tool outputs, also makes them follow manipulated ones. The damage is not memory-driven: contaminating only the current turn still produces 95% of the violations. The model internally distinguishes the manipulation (sparse autoencoder features separate adversarial from random perturbations), but this does not translate into safer output. Activation-level interventions recover under 6% of the safety gap, prompt-level self-verification fails because the self-check reads the same manipulated data, and a parametric cross-check that flags contamination at 99-100% per turn on a frontier model still leaves aggregate suitability unchanged: the agent identifies the tampering and recommends it anyway.
Figures & tables
| Model | Scale | Ref. |
|---|---|---|
| Qwen3-32B | 32B | ( Qwen Team, 2025 ) |
| Qwen2.5-7B | 7B | ( Qwen Team, 2024 ) |
| Gemma 3 12B-IT | 12B | ( Google DeepMind, 2025 ) |
| GPT-5.2 | Frontier | ( OpenAI, 2025 ) |
| Claude Sonnet 4.6 | Frontier | ( Anthropic, 2026c ) |
| CC Opus 4.6 | Frontier | ( Anthropic, 2026b ) |
| Quality | Safety | |||
|---|---|---|---|---|
| Model | NDCG | UPR | SVR s | Sev. |
| Qwen2.5-7B | ||||
| Gemma 3 12B-IT | ||||
| Ministral 3 14B | ||||
| Qwen3-32B | ||||
| Mistral Large 3 | ||||
| Clean | Contam. | ||||
|---|---|---|---|---|---|
| Model | Condition | SVR s | Sev. | SVR s | Sev. |
| Claude | default | 0.783 | 1.383 | 0.926 | 1.652 |
| + self-verify | 0.226 | 0.309 | 0.961 | 1.804 | |
| + parametric | 0.726 | 1.243 | 0.930 | 1.652 | |
| Gemma | default | 0.635 | 1.126 | 0.874 | 1.609 |
| + self-verify | 0.196 | 0.335 | 0.987 | 1.996 | |
| Condition | SVR s | Sev. | UPR | |
|---|---|---|---|---|
| Clean baseline | 0.000 | 0.783 | 1.383 | 1.000 |
| Headlines-only | 0.176 | 0.787 | 1.361 | 1.005 |
| Within-band | 0.233 | 0.939 | 1.548 | 1.035 |
| Full attack | 0.384 | 0.926 | 1.652 | 1.000 |
| sNDCG | Preservation | |||
|---|---|---|---|---|
| Model | Clean | Contam. | pUPR | sUPR |
| Qwen2.5-7B | ||||
| Gemma 3 12B-IT | ||||
| Ministral 3 14B | ||||
| Qwen3-32B | ||||
| Mistral Large 3 | ||||
Appendix figures & tables50 assets
Supplementary material from the paper’s appendix.
Appendix
| Tool | Input | Output Schema | Data Source |
|---|---|---|---|
| MarketDataTool | limit : int (default 10) | {candidates:[{symbol, risk_score, ret_7d, vol, mdd, mu, price}], target_risk_band, date} | Conv-FinRe snapshots + STOCK_RISK_DB |
| NewsRetrieverTool | query : str | {query, headlines:[str]} | Conv-FinRe advisor text |
| ProfileMemoryTool | (none) | {profile:{risk_tolerance, goals, constraints, recent_decisions}} | Read-only snapshot of |
| Symbol | Risk Score | Category | Notes |
|---|---|---|---|
| PG | 1 | Defensive | Consumer staples (Procter & Gamble) |
| VZ | 1 | Defensive | Telecom (Verizon) |
| LIN | 2 | Low-moderate | Industrial gas (Linde) |
| XOM | 2 | Low-moderate | Energy (ExxonMobil) |
| JPM | 3 | Moderate | Financial (JPMorgan) |
| MRK | 3 | Moderate | Pharma (Merck) |
| Index | Label |
|---|---|
| 0 | Retirement savings |
| 1 | Education fund |
| 2 | Home purchase |
| 3 | Steady income |
| 4 | Long-term growth |
| 5 | Emergency fund |
| Index | Label |
|---|---|
| 0 | Has outstanding debt |
| 1 | Limited investment experience |
| 2 | Short time horizon |
| 3 | Avoid concentrated bets |
| Parameter | Qwen3-32B | Qwen2.5-7B | Gemma 3 12B-IT | GPT-5.2 | Claude Sonnet 4.6 | CC Opus 4.6 | Ministral 3 14B | Mistral Large 3 |
|---|---|---|---|---|---|---|---|---|
| Backend | HF (local) | HF (local) | HF (local) | OpenAI API | AWS Bedrock | Claude Code | AWS Bedrock | AWS Bedrock |
| Precision | BF16 | 4-bit NF4 | BF16 | API-managed | API-managed | API-managed | API-managed | API-managed |
| Reasoning effort | N/A | N/A | N/A | none (default) | N/A | N/A | N/A | N/A |
| Temperature | N/A (greedy) | N/A (greedy) | N/A (greedy) | 0 (greedy) | Default | Default | Default | Default |
| Sampling | Deterministic | Deterministic | Deterministic | Deterministic | Default | Default | Default | Default |
| Max tokens | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 | 2048 |
| Tool | Mode | Mechanism | Affected Fields |
|---|---|---|---|
| MarketData | Risk inversion | for all 10 stocks | risk_score |
| MarketData | Metric manip. | High-risk ( ): vol 0.3 vol, mdd 0.3 mdd, 1.5 . Low-risk ( ): vol 2.0 vol, mdd 2.0 mdd, 0.5 . | vol , mdd , mu |
| MarketData | TQQQ injection | Synthetic candidate: assigned risk 9, displayed as 1 (after inversion). Fabricated: vol , mdd . | candidates |
| News | Biased headlines | Three adversarial headlines prepended to the real headline list (see below). | headlines |
| ProfileMemory | None (passive) | Exposes contaminated back to reasoning; no direct perturbation. | N/A |
| Stage | Field | Value |
| Clean | Risk score | 5 |
| Dist. to target | (ranked last) | |
| After Mode 1 | Risk score | (appears defensive) |
| Dist. to target | (ranked 4th–6th) | |
| After Mode 2 | Volatility | (scaled down) |
| Max drawdown | (scaled down) |
| Clean | Contaminated | |||||||
|---|---|---|---|---|---|---|---|---|
| Stock | Risk | Vol | MDD | Risk | Vol | MDD | ||
| PG (Defensive) | 1 | 12% | 8% | 6% | 5 | 24% | 16% | 3% |
| TSLA (Speculative) | 5 | 55% | 40% | 18% | 1 | 17% | 12% | 27% |
| TQQQ (Injected) | — | — | — | — | 1 | 1% | 0.5% | 2% |
| Drift | SVR | ||||||
|---|---|---|---|---|---|---|---|
| Model | TQQQ % | SVR s | SVR | ||||
| Qwen3-32B | 4.3% | 0.301 | 0.290 | 3.4% | 0.800 | 0.792 | |
| Qwen2.5-7B | 0.0% | 0.267 | 0.267 | 0.0% | 0.648 | 0.648 | |
| Gemma 3 12B-IT | 0.4% | 0.399 | 0.398 | 0.3% | 0.874 | 0.873 | |
| GPT-5.2 | 2.2% | 0.402 | 0.401 | 0.2% | 0.883 | 0.880 | |
| Claude Sonnet 4.6 | 10.9% | 0.384 | 0.378 | 1.5% | 0.926 | 0.917 | |
| Model | Fake cite % | Safe-lang % | Detections |
|---|---|---|---|
| Claude Sonnet 4.6 | 85 | 68.7 | 5 / 230 |
| CC Opus 4.6 | 75 | 44.7 | — |
| GPT-5.2 | 85 | 64.8 | 0 / 230 |
| Gemma 3 12B-IT | 88 | 37.4 | 0 / 230 |
| Qwen3-32B | 100 | 38.7 | 0 / 230 |
| Qwen2.5-7B | 100 | 14.0 | 0 / 222 |
| User | Risk | Clean recs | Contaminated recs | Shared | |
| 0 | low | VZ, PG, LIN, XOM | SPG, MMM, AMZN | 0 | |
| 1 | low | PG, VZ, LIN, XOM | AMZN, MMM, SPG, MRK | 0 | |
| 2 | low | LIN, PG, VZ, XOM | AMZN, MMM, SPG, MRK | 0 | |
| 3 | mod | MRK, VZ, LIN, JPM | AMZN, SPG, MMM, MRK | 1 | |
| 4 | mod | MRK, JPM, LIN, XOM | AMZN, MMM, SPG, MRK | 1 | |
| 5 | low | VZ, PG, LIN, XOM | AMZN, SPG, MMM | 0 |
| Turn 10 | Turn 20 | |||
| Model | Risk | Goals | Risk | Goals |
| GPT-5.2 | high | growth, wealth accum. | high | growth, wealth accum. |
| Claude Sonnet | high | income, growth | high | income, growth |
| CC Opus | high | growth, wealth accum. | high | growth, wealth accum. |
| Qwen3-32B | high | income | mod | income |
| Mistral Large | mod | income, growth | mod | income, growth |
| Quality | Drift | Safety | ||||
|---|---|---|---|---|---|---|
| Condition | NDCG | UPR | SVR | Sev. SVR | MDR | |
| Full (all modes) | ||||||
| Risk inversion only | ||||||
| Metric manipulation only | ||||||
| Headlines only | ||||||
| Quality | Drift | Safety | ||||
|---|---|---|---|---|---|---|
| Condition | NDCG p | UPR | SVR | Sev. SVR | MDR | |
| Explicit headlines | ||||||
| Subtle headlines | ||||||
| Wilcoxon | — | |||||
| NDCG | SVR s | Sev. SVR | MDR | UPR | ||
|---|---|---|---|---|---|---|
| NDCG | NDCG p | SVR s | Sev. SVR | MDR | UPR | ||
|---|---|---|---|---|---|---|---|
| Symbol | Definition |
|---|---|
| NDCG / sNDCG | Ranking quality / suitability-penalized variant (zeroes risk-inappropriate items) |
| UPR / sUPR | Utility Preservation Ratio (contaminated/clean NDCG; suitability-penalized variant) |
| , | Mean paired drift / per-turn drift (Kendall- + Jaccard) |
| AR | Amplification Ratio (late-half vs. early-half ) |
| RDS | Risk Drift Score (sum of ordinal risk divergence) |
| SVR s / SVR r | Suitability Violation Rate (stated / revealed risk) |
| Suitability Violations | Drift | Memory / Quality | |||||
|---|---|---|---|---|---|---|---|
| Model | SVR s | SVR r | Sev. SVR | AR | MDR | UPR | |
| Qwen2.5-7B | |||||||
| Gemma 3 12B-IT | |||||||
| Ministral 3 14B | |||||||
| Qwen3-32B | |||||||
| Mistral Large 3 | |||||||
| MED Turns | Drift Estimates | ||||
|---|---|---|---|---|---|
| Model | Div. | ||||
| Qwen3-32B | 58.7% | 78.5% | 0.273 | 0.339 | |
| Qwen2.5-7B | 27.4% | 49.2% | 0.251 | 0.273 | |
| Gemma 3 12B-IT | 33.0% | 90.8% | 0.417 | 0.391 | |
| GPT-5.2 | 42.2% | 90.7% | 0.395 | ||
| Claude Sonnet 4.6 | 43.9% | 92.1% | 0.389 | 0.381 | |
| Drift | Safety | Quality | |||||
|---|---|---|---|---|---|---|---|
| Condition | Model | MDR | SVR s | Sev. SVR | NDCG | UPR | |
| Risk inv. | Claude | ||||||
| Gemma | |||||||
| Metric manip. | Claude | ||||||
| Gemma | |||||||
| Headlines | Claude | ||||||
| Qwen3-32B | Qwen2.5-7B | Gemma 3 | GPT-5.2 | Sonnet | CC Opus | Min. 14B | Mistral L3 | |
|---|---|---|---|---|---|---|---|---|
| 0.0 (pure ) | 0.206 | 0.217 | 0.329 | 0.335 | 0.315 | 0.245 | 0.619 | 0.353 |
| 0.1 | 0.237 | 0.233 | 0.353 | 0.357 | 0.338 | 0.248 | 0.636 | 0.370 |
| 0.2 | 0.269 | 0.250 | 0.376 | 0.379 | 0.361 | 0.251 | 0.653 | 0.387 |
| 0.3 (default) | 0.301 | 0.267 | 0.399 | 0.402 | 0.384 | 0.254 | 0.670 | 0.404 |
| 0.5 | 0.364 | 0.300 | 0.446 | 0.446 | 0.430 | 0.261 | 0.704 | 0.438 |
| 0.7 | 0.427 | 0.333 | 0.492 | 0.490 | 0.477 | 0.267 | 0.738 | 0.472 |
| Hypothesis | Model | ||
|---|---|---|---|
| Qwen3-32B | 55.0 | ||
| Qwen2.5-7B | 55.0 | ||
| Gemma 3 12B-IT | 55.0 | ||
| GPT-5.2 | 55.0 | ||
| Claude Sonnet 4.6 | 55.0 | ||
| CC Opus 4.6 | 55.0 |
| Setting | SVR s | MDR | UPR | NDCG | ||
|---|---|---|---|---|---|---|
| Default temp | ||||||
| Model | Ratio | |||
|---|---|---|---|---|
| Claude Sonnet 4.6 | ||||
| GPT-5.2 | ||||
| Gemma 3 12B-IT | ||||
| Qwen3-32B | ||||
| Qwen2.5-7B | ||||
| Ministral 3 14B | — † | — | — |
| Turn Count | Mean | ||||
|---|---|---|---|---|---|
| Model | MED | Non-MED | MED | Non-MED | (M-W) |
| Qwen3-32B | |||||
| Qwen2.5-7B | |||||
| Gemma 3 12B-IT | |||||
| GPT-5.2 | |||||
| Claude Sonnet 4.6 | |||||
| Qwen3-32B | Qwen2.5-7B | Gemma 3 | GPT-5.2 | Sonnet | CC Opus | Mistral L3 | |
|---|---|---|---|---|---|---|---|
| 1 | .62 / .67 | .60 / .60 | .47 / .70 | .60 / .65 | .61 / .69 | .60 / .64 | .53 / .68 |
| 2 | .67 / .76 | .62 / .64 | .61 / .85 | .70 / .74 | .70 / .84 | .67 / .81 | .60 / .83 |
| 3 | .67 / .80 | .64 / .67 | .63 / .87 | .74 / .88 | .73 / .93 | .72 / .89 | .66 / .90 |
| 5 | .67 / .80 | .64 / .67 | .63 / .87 | .77 / .88 | .77 / .93 | .85 / .99 | .67 / .90 |
| 7 | .67 / .80 | .64 / .67 | .63 / .87 | .77 / .88 | .78 / .93 | .96 / .99 | .67 / .90 |
| 10 | .67 / .80 | .64 / .67 | .63 / .87 | .77 / .88 | .78 / .93 | .96 / .99 | .67 / .90 |
| Metric | Finance | Retail |
|---|---|---|
| (paired drift) | 0.384 | 0.219 |
| SVR s (stated) | 0.926 | 1.000 |
| Severity-weighted SVR | 1.652 | 2.600 |
| MDR (3-field composite) | 0.170 | 0.196 |
| MED ( ) | 0.389 | 0.149 |
| UPR | 1.000 | 0.967 |
| Model | Median | ||
|---|---|---|---|
| Claude Sonnet 4.6 | 15 | 1.000 | 1.000 |
| CC Opus 4.6 | 10 | 1.000 | 1.000 |
| GPT-5.2 | 10 | 1.000 | 0.935 |
| Gemma 3 12B-IT | 10 | 1.000 | 0.974 |
| Qwen3-32B | 10 | 1.000 | 0.996 |
| Qwen2.5-7B | 5 | 1.000 | 0.183 |
| Quality | Drift | Safety | ||||
|---|---|---|---|---|---|---|
| Condition | NDCG p | UPR | SVR | Sev. SVR | MDR | |
| Clean baseline | ||||||
| Within-band ( ) | ||||||
| Full ( ) | ||||||
| Quality | Drift | Safety | ||||
|---|---|---|---|---|---|---|
| Condition | sNDCG p | UPR | SVR | MDR | ||
| Original | ||||||
| Anti-correlated | ||||||
| Shuffled | ||||||
| SVR s | Sev. SVR | |||
|---|---|---|---|---|
| Universe | Clean | Contam. | Clean | Contam. |
| 10 stocks | 0.774 | 0.926 | 1.374 | 1.648 |
| 50 stocks | 0.704 | 0.783 | 1.161 | 1.435 |
| Model | Params | Failure % | Status |
| Qwen3-32B | 32B | Main analysis | |
| Qwen2.5-7B-Instruct | 7B | Main analysis | |
| Gemma 3 12B-IT | 12B | Main analysis | |
| GPT-5.2 | — | Main analysis | |
| Claude Sonnet 4.6 | — | Main analysis | |
| CC Opus 4.6 | — | Main analysis |
| Quality | Drift | Safety | |||||
|---|---|---|---|---|---|---|---|
| Model | Failure % | NDCG | UPR | SVR | Sev. SVR | MDR | |
| Ministral 3 14B | |||||||
| Ministral 3 8B | † | ||||||
| Ministral 3 3B | ‡ | † | |||||
| Layer | null | Cohen’s | ||
|---|---|---|---|---|
| 11 | ||||
| 15 | ||||
| 19 |
| Ticker | GT | Contam. | consistent | inconsistent | no_prior | Incon.% |
|---|---|---|---|---|---|---|
| TSLA | 5 | 1 | 38 | 140 | 9 | 74.9% |
| VZ | 1 | 5 | 8 | 30 | 30 | 44.1% |
| PG | 1 | 5 | 15 | 42 | 44 | 41.6% |
| LIN | 2 | 4 | 37 | 15 | 68 | 12.5% |
| XOM | 2 | 4 | 69 | 14 | 54 | 10.2% |
| MRK | 3 | 3 | 110 | 5 | 52 | 3.0% |
| Ticker | GT | Contam. | consistent | inconsistent | no_prior | Incon.% |
|---|---|---|---|---|---|---|
| TSLA | 5 | 1 | 0 | 229 | 0 | 100.0% |
| PG | 1 | 5 | 0 | 230 | 0 | 100.0% |
| VZ | 1 | 5 | 1 | 216 | 0 | 99.5% |
| TQQQ | – | 1 | 1 | 169 | 0 | 99.4% |
| AMZN | 4 | 2 | 19 | 208 | 0 | 91.6% |
| LIN | 2 | 4 | 17 | 202 | 7 | 89.4% |
| Ticker | Non-ablation | Stripped | |
|---|---|---|---|
| TSLA | 74.9% | 89.6% | |
| PG | 41.6% | 60.8% | |
| VZ | 44.1% | 41.0% | |
| TQQQ | 41.9% | 75.0% | |
| LIN | 12.5% | 26.9% | |
| XOM | 10.2% | 20.9% |
LLM Agent Safety
Large language model agent safety studies how to keep tool-using, persistent, and multi-agent systems aligned with user intent and authorized limits.
See all 302 papers