Toward Agentic Retrieval-Augmented Generation for Enterprise Retail Workflows over Heterogeneous Data Sources
Organizations: Korea Advanced Institute of Science and Technology (KAIST) · GS Retail · Cluvion
Abstract
Enterprise retail workflows require agents to chain evidence across heterogeneous sources, from structured product and order records to unstructured inquiries and reviews, yet existing agentic RAG benchmarks rarely capture this challenge. To enable controlled evaluation of such workflows, we introduce RetailBridge, a compositional retail benchmark built from persona-driven simulations. Its questions are constructed by linking entities and intermediate answers across heterogeneous sources, requiring agents to identify the relevant sources, carry evidence between them, and produce a grounded answer. To systematically evaluate LLMs on these retail workflows, we develop RetailRAG, a retail-aware framework equipped with auto-schema briefing, source-routed plan chaining, and diagnostic plan revision. RetailRAG consistently outperforms existing agentic RAG baselines across all evaluation axes, serving as a strong reference system for assessing LLM agents on retail workflows. On RetailBridge, evaluating ten LLM backbones with RetailRAG reveals multi-source chaining as the dominant bottleneck across providers and model scales, suggesting that reliable retail agents require explicit cross-source orchestration rather than scaling alone. Code and data are publicly available at https://github.com/DISL-Lab/RetailBridge.
Figures & tables
| Operator | Query | Example |
| (Level-1) | Which seller broadcast the Libby’s Mixed Vegetables (8.5 oz, Pack of 12)? A: Robert A. | |
| (Level- ) | What is the average product review rating for Robert A. ? A: 3.41 | |
| (Composite) | What is the average product review rating for the seller who broadcast the Libby’s Mixed Vegetables ? A: 3.41 | |
| Effect | Single-entity bridge ( Script Review ); a singular hides one entity | |
| (Level- ) | Which of Mark A.’s products received the highest rating in product reviews? A: { Stretchable Candy Necklace, … } | |
| (Follow-up) | What is the total revenue from orders of these products ? A: $20,712.52 |
| Category | Method | Level-1 | Level-2 | Level-3 | Avg. | API Call | ||||||||
| Homo. | Hetero. | Homo. | Hetero. | |||||||||||
| Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | |||
| Naive | Text-to-SQL | 0.421 | 0.421 | 0.225 | 0.229 | 0.121 | 0.129 | 0.129 | 0.175 | 0.062 | 0.094 | 0.163 | 0.182 | 2.00 |
| Dense RAG | 0.050 | 0.200 | 0.004 | 0.108 | 0.010 | 0.121 | 0.017 | 0.067 | 0.010 | 0.096 | 0.016 | 0.115 | 2.00 | |
| Agentic | ReAct | 0.196 | 0.258 | 0.058 | 0.096 | 0.033 | 0.079 | 0.008 | 0.021 | 0.006 | 0.029 | 0.049 | 0.085 | 4.20 |
| MAC-SQL | 0.404 | 0.463 | 0.175 | 0.204 | 0.150 | 0.204 | 0.092 | 0.125 | 0.075 | 0.102 | 0.160 | 0.201 | 3.08 | |
| Category | Method | Default | w/ Briefing | ||
| LLM | API Call | LLM | API Call | ||
| Naive | Text-to-SQL | 0.182 | 2.00 | 0.296 | 2.00 |
| Agentic | ReAct | 0.085 | 4.20 | 0.102 | 4.29 |
| MAC-SQL | 0.201 | 3.08 | 0.205 | 3.13 | |
| TableRAG | 0.185 | 6.55 | 0.229 | 6.23 | |
| HetaRAG | 0.293 | 25.21 | 0.336 | 23.37 | |
| Category | Model | Level-1 | Level-2 | Level-3 | Avg. | API Call | ||||||||
| Homo. | Hetero. | Homo. | Hetero. | |||||||||||
| Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | |||
| Open-source | Qwen3.6-35B-A3B | 0.562 | 0.608 | 0.154 | 0.242 | 0.135 | 0.217 | 0.092 | 0.121 | 0.052 | 0.125 | 0.169 | 0.236 | 12.76 |
| Kimi-K2.5 | 0.621 | 0.658 | 0.179 | 0.254 | 0.129 | 0.204 | 0.113 | 0.158 | 0.090 | 0.154 | 0.193 | 0.255 | 11.81 | |
| Gemma-4-31B-IT | 0.692 | 0.704 | 0.346 | 0.492 | 0.317 | 0.529 | 0.242 | 0.354 | 0.208 | 0.440 | 0.333 | 0.498 | 10.50 | |
| GPT-oss-120B | 0.688 | 0.725 | 0.342 | 0.463 | 0.279 | 0.479 | 0.179 | 0.250 | 0.158 | 0.302 | 0.298 | 0.429 | 7.45 | |
| Model | Level-1 | Level-2 | Level-3 | Avg. | ||
| Homo. | Hetero. | Homo. | Hetero. | |||
| Qwen3.6-35B-A3B | 0.606 | 0.359 | 0.326 | 0.241 | 0.273 | 0.343 |
| Kimi-K2.5 | 0.616 | 0.352 | 0.273 | 0.250 | 0.299 | 0.337 |
| Gemma-4-31B-IT | 0.684 | 0.606 | 0.590 | 0.545 | 0.607 | 0.604 |
| GPT-oss-120B | 0.694 | 0.588 | 0.533 | 0.474 | 0.484 | 0.541 |
| DeepSeek-V4-Flash | 0.703 | 0.563 | 0.551 | 0.509 | 0.529 | 0.562 |
Appendix figures & tables36 assets
Supplementary material from the paper’s appendix.
Appendix
| Operator | Query | Example |
| (Entity Set) | (Level- ) | Which products sold by Leslie B. have the highest refund rate? A: { Dell 2019 New …, Herstyle Certain… } (2 products) |
| (Follow-up) | What is the average product review rating for these products ? A: 3.37 | |
| (Composite) | What is the average product review rating for the products sold by Leslie B. that have the highest refund rate ? A: 3.37 | |
| Effect | Set bridge ( Order Review ); a plural hides the whole answer set | |
| (Scalar) | (Level- ) | What is the total amount spent by Lisa J. across all her orders? A: $3,161.72 |
| (Follow-up) | Which buyers have a total order value greater than $3,161.72 ? A: {Adam N., Brent B., …} (18 buyers) |
| Statistic | Number | |
| Sources | 5 tabular / 3 textual | |
| Total rows: 49,718 | Total docs: 43,140 | |
| Tabular (rows / cols) | ||
| Product: 200 / 6 | Order: 6,378 / 14 | Script: 287 / 11 |
| Review: 24,104 / 11 | Inquiry: 18,749 / 9 | |
| Textual (docs / avg. chars) | ||
| Level | Source | Modality | Example question / answer |
| Level-1 | Homo. (Order ∗ ) | SQL | Q: What is the total revenue for Michael K.? A: $11,296.83 |
| Homo. (Script † ) | Text | Q: What input connections did Mark A. mention for the INSIGNIA 2.1-Channel 80W Soundbar …? A: RCA, optical digital, mini-jack, and Bluetooth. | |
| Level-2 | Homo. (Order ∗ ) | SQL | Q: Which sellers have a refund rate greater than Mark A.’s refund rate? A: Natalie H., Joshua H., Joann I., Robert A., Olivia F., Michael K., Diana G., Daniel X., Ashley X., Steven C., Leslie B., Allen G., Alexander G., Michelle W. |
| Hetero. (Order ∗ , Product ∗ ) | SQL | Q: What is the original price of the product sold by Robert A. that has the highest conversion rate? A: $21.31 | |
| Homo. (Inquiry † ) | Text | Q: What did Ashley X. tell Gabriel Z. about the return shipping costs for a change-of-mind return of the product that was the subject of a pre-purchase inquiry between Beth A. and Steven C.? A: The buyer must cover the return shipping cost; no prepaid label is provided for a change-of-mind return. | |
| Hetero. (Inquiry † , Script † ) | Text | Q: What structural features did the seller highlight to assure buyers that the product the buyer asked about (regarding weight limits and dimensions) can support heavy winter coats? A: The rack features a solid wood core and sturdy metal anchors, providing a rock-solid structure designed to securely hold heavy winter coats. |
| Level | Shared query pattern | RetailBridge (ours) | Human-authored workload |
| L1 | Ranking by frequency | Which buyer has sent the most pre-purchase inquiries to Ashley X.? | Identify the top-3 customers with the highest number of delivered orders. (Olist) |
| L1 | Threshold filtering | How many broadcasts did Michael K. conduct with a discount rate greater than 20%? | Which liquor categories each contribute at least 1% of monthly sales volume? (Iowa Liquor) |
| L2 | Best entity within a resolved group | Among the buyers who gave Diana G. the lowest product-quality rating, which buyer has the highest conversion rate? | Find the top-selling product among customers who bought “YouTube Men’s Vintage Henley”. (GA360) |
| L3 | Chained lookups with aggregation | Most common delivery date for orders of the most expensive product Jacob Z. ordered from the seller who received the highest total spending from him. | Most-purchased other products by customers who bought the Google Red Speckled Tee, per month. (GA4) |
| Level | 1 Step | 2 Steps | 3+ Steps |
| Level-1 | 89.2% | 8.8% | 2.0% |
| Level-2 | 12.7% | 64.4% | 22.9% |
| Level-3 | 7.9% | 8.3% | 83.8% |
| Stage | Type | Model | Usage | Model Checkpoint | Source | Reference |
| Simu- lation | Open- source | DeepSeek-V3.2 | Simulation | deepseek-ai/DeepSeek-V3.2 | HuggingFace | Liu et al. (2025) |
| GPT-oss-120B | Simulation | openai/gpt-oss-120b | HuggingFace | Agarwal et al. (2025) | ||
| Qwen3-235B | Simulation | Qwen/Qwen3-235B-A22B-Instruct | HuggingFace | Yang et al. (2025a) | ||
| Proprietary | Gemini-3-Flash | Simulation | gemini-3-flash-preview | Google API | Google DeepMind (2025) | |
| Benchmark Construction | Open-source | Qwen3-Embedding-8B | QA Sampling | qwen/qwen3-embedding-8b | HuggingFace | Zhang et al. (2025) |
| Proprietary | Qwen3.6-Max | QA Generation | qwen3.6-max-preview | Qwen API | Qwen Team (2026b) |
| Judge Model | Cohen’s | Precision | Recall | F1 |
| Qwen3.6-Plus (Paper) | 0.960 | 0.971 | 0.984 | 0.978 |
| Muse-Spark-1.3 | 0.959 | 0.991 | 0.963 | 0.977 |
| MiMo-V2.6-Flash | 0.939 | 0.944 | 0.990 | 0.966 |
| Reference Judge | Agreement (Cohen’s ) | Ranking (Kendall’s ) | Bias (Qwen family) | Bias (Qwen3.6-Plus) |
| Muse-Spark-1.3 | 0.949 | 0.954 | 0.1 | +0.7 |
| MiMo-V2.6-Flash | 0.932 | 0.928 | 0.8 | 1.2 |
| Answer Type | Rule-based | LLM Judge | |
| Number | 4,650 | 0.412 | 0.417 |
| Temporal | 840 | 0.647 | 0.647 |
| Set | 2,110 | 0.409 | 0.411 |
| Entity | 3,290 | 0.539 | 0.547 |
| Total (excl. free text) | 10,890 | 0.468 | 0.473 |
| Supported | Not Supported | Total | |
| Correct | 7,057 (42.0%) | 148 (0.9%) | 7,205 (42.9%) |
| Incorrect | 4,145 (24.7%) | 5,450 (32.4%) | 9,595 (57.1%) |
| Total | 11,202 (66.7%) | 5,598 (33.3%) | 16,800 (100%) |
| Category | Method | F1 | Cards | Hero | Football | Throm. | Code | Student | Tox. | Fin. | Debit | Schools | Avg. |
| Naive | Text-to-SQL | 0.606 | 0.577 | 0.865 | 0.804 | 0.520 | 0.625 | 0.729 | 0.450 | 0.406 | 0.600 | 0.367 | 0.615 |
| Dense RAG | 0.136 | 0.096 | 0.019 | 0.098 | 0.060 | 0.082 | 0.062 | 0.150 | 0.000 | 0.100 | 0.000 | 0.078 | |
| Agentic | ReAct | 0.455 | 0.365 | 0.615 | 0.549 | 0.340 | 0.469 | 0.562 | 0.325 | 0.344 | 0.233 | 0.300 | 0.432 |
| MAC-SQL | 0.591 | 0.558 | 0.846 | 0.804 | 0.540 | 0.653 | 0.812 | 0.350 | 0.375 | 0.533 | 0.433 | 0.612 | |
| TableRAG | 0.121 | 0.115 | 0.096 | 0.157 | 0.020 | 0.061 | 0.042 | 0.100 | 0.062 | 0.033 | 0.000 | 0.080 | |
| HetaRAG | 0.515 | 0.577 | 0.865 | 0.784 | 0.480 | 0.653 | 0.812 | 0.425 | 0.562 | 0.533 | 0.533 | 0.622 |
| Run | Level-1 | Level-2 | Level-3 | Avg. | ||||
| Acc | LLM | Acc | LLM | Acc | LLM | Acc | LLM | |
| Run 1 | 0.688 | 0.725 | 0.300 | 0.474 | 0.165 | 0.285 | 0.298 | 0.429 |
| Run 2 | 0.662 | 0.717 | 0.287 | 0.449 | 0.174 | 0.296 | 0.292 | 0.421 |
| Run 3 | 0.679 | 0.729 | 0.293 | 0.436 | 0.165 | 0.303 | 0.293 | 0.421 |
| Run 4 | 0.683 | 0.725 | 0.293 | 0.450 | 0.165 | 0.290 | 0.294 | 0.421 |
| Run 5 | 0.688 | 0.721 | 0.304 | 0.461 | 0.179 | 0.300 | 0.305 | 0.429 |
| Framework | LLM | Input Token | Output Token | API Call |
| ReAct | 0.085 0.165 | 2.4k 6.7k | 1.3k 2.1k | 4.2 6.2 |
| MAC-SQL | 0.201 0.270 | 6.1k 20.4k | 2.4k 4.3k | 3.1 5.0 |
| TableRAG | 0.185 0.230 | 11.8k 17.7k | 2.9k 3.2k | 6.6 6.8 |
| HetaRAG | 0.293 0.368 | 19.3k 90.6k | 14.4k 18.7k | 25.2 27.6 |
| RetailRAG | 0.429 | 19.8k | 5.4k | 7.45 |
| Condition | Level-1 | Level-2 | Level-3 | |||||
| SQL | Text | SQL | Text | Comp. | SQL | Text | Comp. | |
| RetailRAG | 0.857 | 0.625 | 0.561 | 0.400 | 0.464 | 0.381 | 0.221 | 0.255 |
| Oracle-source | 0.867 | 0.633 | 0.527 | 0.438 | 0.490 | 0.393 | 0.267 | 0.272 |
| Oracle-plan | 0.876 | 0.750 | 0.690 | 0.329 | 0.611 | 0.594 | 0.250 | 0.444 |
| Oracle-intermediate | – | – | 0.469 | 0.442 | 0.619 | 0.502 | 0.433 | 0.469 |
| Oracle-evidence | 0.971 | 0.990 | 0.975 | 0.992 | 0.992 | 0.983 | 0.971 | 0.987 |
| Applied case | Hint |
| Level-1 atomic question entity exact-match block | # tier == "seller": [!] CRITICAL - use this EXACT string in SQL, character-for-character: WHERE seller_name = ’{anchor_id}’ Do NOT add, remove, or change any character - no trailing quotes, no possessive. # tier == "buyer": [!] CRITICAL - use this EXACT string in SQL, character-for-character: WHERE buyer_name = ’{anchor_id}’ Do NOT add, remove, or change any character - no trailing quotes, no possessive. # tier == "product": [!] CRITICAL - exact DB values (copy this FULL title literally into SQL): product_name: ’{ptitle}’ CORRECT form: WHERE product_name = ’{ptitle}’ DO NOT truncate the title, DO NOT add a trailing apostrophe. |
| Level-1 SQL atomic question | # answer-shape hint constants (ans_hint): _HINT_NAME = "The answer should be an entity NAME (buyer name, seller name, or product name)." _HINT_NUMERIC = "The answer should be a numeric value (count, average, total, ratio, etc.)." _HINT_DATE = "The answer should be a DATE or DATETIME (e.g. broadcast date, order date, delivery date)." # (sellers source) ans_hint: "The answer should be a PRODUCT NAME. Ask which product of this seller has the highest or lowest {col}." # _make_focus_hint(focus) -> (note leading space): " Focus the question on {focus}." # appended when src == "reviews": " Always filter by one specific review_category value: ’broadcast’, ’product’, ’pre-cs’, or ’post-cs’." # appended when src == "inquiries": " Always filter by one specific inquiry_type value: ’pre’ or ’post’." |
| Level-1 SQL atomic question with triplet constraint | TRIPLET-COMBINATION MODE - still generate a SINGLE-TABLE atomic question. Use ONLY the {src} primary source table; do NOT use JOINs or any other table. The question must be specifically constrained to this triplet entity combination: {col}=’{val}’, {col}=’{val}’. The SQL MUST include these exact filters: {col} = ’{val}’ AND {col} = ’{val}’. |
| Applied case | Hint |
| Level-1 text atomic question sales scripts | # src == "sales_scripts": TRIPLET TEXT CONTEXT - this text source is scoped by seller + product only: - seller: {seller} - product: {product} - buyer is NOT part of sales_scripts scope; do not mention the buyer in the question or search_query. The question must explicitly name the seller ({seller}) and the product ({product}). Ask about what the seller said, emphasized, described, or promised in the sales script. # + diversity_note, appended only when diversity_idx > 0: This is question variation #{idx} - generate a question from a DIFFERENT angle than you would generate by default. Be specific to the actual content of the script. |
| Level-1 text atomic question reviews text | # src == "reviews_text": TRIPLET TEXT CONTEXT - this text source is scoped by seller + buyer + product: - seller: {seller} - buyer: {buyer} - product: {product} The question must explicitly name the buyer ({buyer}), seller ({seller}), and product ({product}). # category_line: if category_filter -> first line; else -> second line: Focus ONLY on the ’{category_filter}’ review_category record. Use review_category metadata to make the question specific. # + diversity_note (diversity_idx > 0), with one review angle: This is question variation #{idx} - generate a question from a DIFFERENT angle than the default one. [angle 1] Ask about the buyer’s overall opinion, satisfaction, or impression. [angle 2] Ask only about the explicit reason, praised point, criticized point, or concrete detail stated in the review. Do not ask for an overall summary. Avoid near-duplicate wording across variations. |
| Level-1 text atomic question inquiries text | # src == "inquiries_text": TRIPLET TEXT CONTEXT - this text source is scoped by seller + buyer + product: - seller: {seller} - buyer: {buyer} - product: {product} The question must explicitly name the buyer ({buyer}), seller ({seller}), and product ({product}). # type_line: if category_filter -> first line; else -> second line: Focus ONLY on the ’{category_filter}’ inquiry_type record. Use inquiry_type metadata (pre or post) to make the question specific. # + diversity_note (diversity_idx > 0), with one inquiry angle: This is question variation #{idx} - generate a question from a DIFFERENT angle than the default one. [angle 1] Ask about the buyer’s main question, request, or concern. [angle 2] Ask about concrete details discussed, such as price, shipping, timing, or policy. [angle 3] Ask about the seller’s response, clarification, or resolution to the buyer’s concern. Avoid near-duplicate wording across variations. |
| Applied case | Hint |
| Set-answer follow-up atomic question AGG variant | [!] CRITICAL - {col} filter MUST use this exact IN clause (do NOT hardcode names): WHERE {col} IN ({in_clause}) {review_hint} These {n} {entity_label}s form a SET. Generate an AGGREGATION question: - Returns a SINGLE scalar (COUNT / SUM / AVG / MIN / MAX) - About ALL {n} {entity_label}s as a group - not about any individual - Use ’{placeholder}’ to refer to the group in the question text SQL examples (adapt to the actual columns in the data above): SELECT COUNT(*) FROM ... WHERE {col} IN ({in_clause}) SELECT AVG(review_rating) FROM ... WHERE {col} IN ({in_clause}) [+ AND review_category = ’...’ when source = reviews] |
| Set-answer follow-up atomic question FILTER variant | [!] CRITICAL - {col} filter MUST use this exact IN clause (do NOT hardcode names): WHERE {col} IN ({in_clause}) {review_hint} These {n} {entity_label}s form a SET. Generate a FILTERING/NARROWING question: - Returns one or more {entity_label} names from this set (NOT a scalar) - Use a single condition: argmax/argmin OR a numeric threshold - Use ’{placeholder}’ to refer to the group in the question text - Do NOT use LIMIT - use a WHERE condition instead: argmax -> AND metric = (SELECT MAX(metric) FROM ... WHERE {col} IN (...)) threshold -> AND metric > value SQL examples: SELECT DISTINCT {col} FROM ... WHERE {col} IN ({in_clause}) AND total_price = (SELECT MAX(total_price) FROM ... WHERE {col} IN ({in_clause})) SELECT DISTINCT {col} FROM ... WHERE {col} IN ({in_clause}) [+ AND review_category=’...’ AND review_rating >= 4 when source = reviews; else AND refund_rate > 20] |
| Scalar-answer follow-up atomic question | [!] SCALAR THRESHOLD HINT - use this numeric threshold from a previous step: Threshold value (MUST appear verbatim in the question): {scalar_val} Threshold measures: ’{measure_label}’ {review_hint} Generate a question that finds which entities have {measure_label} {op} {scalar_val}. - Include the exact numeric value {scalar_val} in the question text - Entity columns to group/filter by: {entity_cols} # if metric table (buyer_metrics/seller_metrics/products/sellers): SQL pattern (metric table - direct WHERE comparison): SELECT DISTINCT {entity_example} FROM {table} WHERE metric_col {op} {scalar_val} # else (raw table): SQL pattern (raw table - GROUP BY + HAVING): SELECT DISTINCT {entity_example} FROM {table} WHERE review_category = ’...’ [only when source = reviews] GROUP BY {entity_example} HAVING {agg_expr} {op} {scalar_val} |
Agentic RAG
Agentic retrieval-augmented generation lets language models plan searches, use tools, and refine evidence before producing grounded answers.
See all 240 papers