Apply to my task
arXiv:2511.13972 ★ 90 Nov 17, 2025

Show and Tell: Controlling Style in Multi-Turn LLM Conversations

Key result

The paradox: show the model a concise example and it writes concisely. Ask it to "improve error handling" and it bloats the answer as if the examples never existed. This method lets you hold a code style even when you ask for revisions, not just on the first turn but across 2-3 iterations. The trick: few-shot examples set the shape but don't create a rule. They work as a template for the first answer. Explicit instructions ("write the minimum, no docstrings if the name is obvious"), however, act as operational constraints that the model applies on every generation. The combination gives -70% tokens up front and minimal bloat on revision.

Show and Tell: Controlling Style in Multi-Turn LLM Conversations

Show and Tell: Controlling Style in Multi-Turn LLM Conversations

02

TL;DR

Show and Tell is a study of how to keep an LLM's output style in check when you ask it to refine its work. It compares 4 strategies: no guidance, instructions only ("write minimal code"), examples only (few-shot), and a combination. Every strategy kept functional correctness (~99%), but they differed wildly in style control, especially once the model was asked to "improve the code".

Main finding: few-shot examples only work on the first turn. Show the model a lean example and it writes lean code. But ask it to "improve readability and error handling" and it bloats the answer exactly as if there had been no examples at all. Examples set the shape, but they don't create a rule. Explicit instructions ("write the minimum, no unnecessary docstrings"), on the other hand, act as operational constraints: they stick even when you ask for revisions.

Practical takeaway: to control style in multi-turn conversations, combine examples with explicit rules. Examples show WHAT it should look like. Rules explain WHY, and the model applies them on every revision. The combination cut tokens by 70% on the first turn and kept bloat to a minimum during revision.

Want this for your own case? Apply this study to your task: AI adapts its method to what you are working on and writes the prompt.

03

Method Blueprint

"EXAMPLES ONLY" STRATEGY:
Prompt: [few-shot examples of concise code]
→ First answer: -20% tokens
→ After "improve it": bloats as if there were no examples ❌

"INSTRUCTIONS ONLY" STRATEGY:
Prompt: "Write the minimum. No defensive code unless asked. No docstrings if the name is obvious."
→ First answer: -56% tokens
→ After "improve it": adds fewer tokens ✓

"COMBO" STRATEGY (the sweet spot):
Prompt: [explicit rules] + [examples] + "Write the minimum code that works"
→ First answer: -70% tokens
→ After "improve it": minimal bloat ✓✓

One prompt is the system prompt. The revision is a separate request asking for improvements.

04

Example in Practice

Task: You're working with Claude/ChatGPT on a Python script that processes CSV reports. You want minimalist code that won't balloon when you ask it to add error handling.

Prompt (system prompt or at the start of the chat):

I value minimal, working code. No defensive programming unless explicitly required. No docstrings if the function's purpose is obvious from its name and signature.

Good example:
```python
def parse_csv(path):
    return pd.read_csv(path)

def calc_stats(df):
    return {
        'total': len(df),
        'unique_users': df['user_id'].nunique(),
        'avg_by_type': df.groupby('event_type')['value'].mean().to_dict()
    }
```

Write the minimum code that works.

Then the task:

Write a Python CLI script: scan a directory for CSV files, check that the columns (timestamp, user_id, event_type, value) are present, compute statistics (total events, unique users, average value per type), and save the result to JSON.

After the first answer, the revision:

Improve the code: make it more readable, add error handling, make it modular.

Result: The model produces a compact first version (~760 tokens instead of ~2560 with no guidance). On revision it adds error handling sparingly: roughly +126 tokens instead of +266 for the "bare" model. Defensive constructs (try/except) take up a bigger share of the code, but the code itself stays lean.

05

Why It Works

The LLM weakness: RLHF trains models to be "helpful", which often means wordy. Without constraints, a model piles on docstrings, comments, "just in case" checks and helper functions. The code passes the tests but is 2-3x bigger than it needs to be.

The two control mechanisms work differently:

  • Examples (few-shot) work through imitation of surface form. The model copies the pattern: short functions, no comments, minimal code. But this doesn't create a rule; it's a template for one particular moment.
  • Instructions work as operational constraints. "No docstrings if the name is obvious" is a testable rule the model applies on every generation.

Why examples get "forgotten" on revision: when you ask it to "improve error handling", the model gets a new task. The examples at the top of the prompt were about the format of the first answer. Instructions are about how to work in general, so they keep applying.

Control levers:

  • Specific instructions → the more precise the rule ("no docstrings if the name is obvious"), the more strictly it's followed
  • Examples → set the format baseline, especially for the first answer
  • Order → rules placed before examples act as context for the examples
06

Prompt Template

I value {output_style}. {rule_1}. {rule_2}. {rule_3}.

Good example:
{example_in_target_format}

{final_directive}.

Placeholders:

  • {output_style}: the result you want, e.g. "minimal working code", "concise answers with no fluff", "structured reports without repetition"
  • {rule_1-3}: concrete constraints, e.g. "no X unless Y", "only Z when W"
  • {example_in_target_format}: 1-2 examples of the desired output
  • {final_directive}: a short summary, e.g. "Write the minimum code that works", "Get straight to the point"
07

Limitations

⚠️ Tested on a single task: a Python CLI script. The effect may differ for other kinds of work: essays, analysis, creative writing.

⚠️ One model: Gemini 2.5 Pro. The principle is universal (instructions vs. examples), but the exact compression numbers may differ for Claude/GPT.

⚠️ Two turns: only one revision cycle was tested. Over 5-10 iterations the effect could compound or fade; nobody knows yet.

⚠️ Minimalism ≠ readability: aggressive compression can make code harder for other people to understand. The study didn't measure subjective readability.

08

How They Studied It

The team ran 160 code-generation sessions (40 for each of the 4 strategies) with Gemini 2.5 Pro. The task was always the same: a Python CLI for processing CSV files. Turn one was generation; turn two was a standard request to "improve readability, error handling, modularity".

What they measured: token count, share of defensive code (try/except and checks), documentation density, number of functions. Functional correctness was a binary test (works / doesn't work).

Why the results are convincing: 99% of the code passed the tests under every condition, so the differences in style have nothing to do with solution quality. The effects are huge: Combined vs. Control = d = -10.97 on the first turn (a "gigantic" effect size in statistical terms). On revision, Examples bloated exactly like Control (d = 0.01, zero difference), while Combined added 140 fewer tokens.

Unexpected insight: examples increased modularity (more functions), while instructions decreased it: the model read "minimum code" as "fewer abstractions". Style is multidimensional, and different mechanisms push on different dimensions.

09

Original from the Paper

Instructions System Prompt:

I value minimal, functional code. No defensive coding unless explicitly required.
No docstrings unless function purpose is non-obvious from the name and signature.

Write the minimum code that works.

Examples System Prompt:

python
def parse_csv(path):
    return pd.read_csv(path)

def calc_stats(df):
    return {
        'total': len(df),
        'unique_users': df['user_id'].nunique(),
        'avg_by_type': df.groupby('event_type')['value'].mean().to_dict()
    }
```

**Combined:** both blocks together, instructions first.

**Context:** the researchers tested how the system prompt affects code style during generation and during later revision.

---

## Adaptations and Extrapolations

> 💡 **Adapting it for text (not code):** the same principle works for any task where style matters.

**Example: concise chat answers:**
```
I value short, concrete answers. No opening phrases like "Great question!". Don't repeat the question. No "it depends on the context" caveats if a direct answer is possible.

Good example:
Q: Which language should I learn for data science?
A: Python. The most libraries, jobs and learning materials.

Get straight to the point.
```

> 🔧 **Technique: add "testable" rules**

Replace abstract rules with concrete, conditional ones:
- ❌ "Be brief"
- ✅ "Answer in 3 sentences or fewer unless the question needs a detailed explanation"
- ❌ "No fluff"
- ✅ "No opening phrases. Start with the substance."

Concrete rules are easier to "check", so the model follows them better.

> 🔧 **Technique: restate the rules when revising**

When you ask it to improve or extend something, remind it of the constraints:
```
Add error handling. Stay minimal: only the checks that are necessary.

This makes up for instructions "fading" over long conversations.

10

Resources

Paper: "Show and Tell: Prompt Strategies for Style Control in Multi-Turn LLM Code Generation"

Author: Jeremiah Bohr, University of Wisconsin Oshkosh

Data and code: https://github.com/jeremiahbohr/show-and-tell

Key references from the paper:

  • Min et al. 2022, "Rethinking the Role of Demonstrations" (why few-shot works through imitation of form)
  • Ouyang et al. 2022, RLHF and instruction-following (why instructions persist)
  • Laban et al. 2025, "LLMs Get Lost in Multi-Turn Conversation" (the context-fading problem)

Research digest

Key result

The paradox: show the model a concise example and it writes concisely. Ask it to "improve error handling" and it bloats the answer as if the examples never existed. This method lets you hold a code style even when you ask for revisions, not just on the first turn but across 2-3 iterations. The trick: few-shot examples set the shape but don't create a rule. They work as a template for the first answer. Explicit instructions ("write the minimum, no docstrings if the name is obvious"), however, act as operational constraints that the model applies on every generation. The combination gives -70% tokens up front and minimal bloat on revision.

Principle

Don't rely on examples alone to control style; combine them with explicit rules. Examples show WHAT the result should look like (short functions, no comments). Rules explain WHY ("no defensive code unless asked", "no docstrings if the purpose is obvious"). Examples work as imitation of surface form: the model copies the pattern for one particular moment. Rules work as testable constraints that the model checks on every revision. When you ask it to "improve readability", that's a new task. The examples at the top of the prompt belong to the previous turn. The rules keep applying.

Why it works

LLMs are trained with RLHF to be "helpful", which often means wordy. Without constraints, a model adds docstrings, comments and "just in case" checks. The code works but is 2-3x bloated. Examples only provide a pattern for the first answer; the model doesn't extract a principle from them. Instructions create a rule that gets applied every time. "No docstrings if the name is obvious" is a testable condition, not a template. Numbers from the study: examples alone give -20% tokens on the first turn, but on revision the bloat matches having no examples. Instructions alone give -56% up front and less bloat. The combination gives -70% tokens and minimal bloat on revision (+126 tokens vs. +266 for the bare model).

When to apply

Multi-turn code-generation conversations where you need a concise style that survives revisions. Especially for CLI scripts, utilities and prototypes where compactness matters. Also for any task where you ask the model to refine its output: essays (no fluff), reports (no repetition), documentation (to the point). NOT a fit if you need maximum readability for a team or code with detailed comments for teaching.

Mini recipe

1. State the rules explicitly: "I value minimal working code. No defensive programming unless required. No docstrings if the purpose is obvious from the name." 2. Show a format example: 2-3 functions in the target style (short, no comments, to the point) 3. Add a final directive: "Write the minimum code that works" 4. When revising, just ask: "Improve error handling" and the rules keep applying Order: rules → example → directive. The rules provide context for the example.

Examples

[BAD]: `Write a Python CLI script that processes CSV files and computes statistics`. With no guidance the model produces 2500+ tokens of docstrings, defensive checks and comments. On the revision "improve error handling" it bloats by another +266 tokens [GOOD]: First the system prompt: `I value minimal working code. No defensive code unless required. No docstrings if the function's purpose is obvious. Good example: [show 2-3 short functions]. Write the minimum code that works.` Then the task: `Write a CLI script: scan CSV files, check columns, compute statistics, save JSON`. You get ~760 tokens. On the revision `Improve readability and error handling` the model adds only +126 tokens because the rules keep working

In plain words

When you ask an AI to write code, it acts like an overeager intern: it crams in as many comments, docstrings and extra checks as it can to look helpful. That behavior is baked in during training. The trouble is that the moment you ask it to "polish" the code, the model goes completely off the rails and bloats the file to unreadable proportions. The Show and Tell study shows that LLMs don't care about your convenience: they're wired for verbosity, and that wrecks a lean style by the second or third turn of a conversation.

It's like asking an architect for a quick, minimalist sketch of a cabin and getting back plans for a three-story mansion with crown molding. You say "Make it simpler", and he removes one column but adds a fountain and a sunroom because "it looks more impressive". The code still works, but it turns into a massive wall of text that's miserable to maintain. The model genuinely believes "improve" means "add another 50 lines of junk".

The researchers tested four approaches and found that plain instructions (just telling it "keep it short") underperform badly. The few-shot method (giving a couple of examples of concise code) saves the day at first and trims output by 20%, but as soon as you ask for edits, the model forgets the style and slides back into its old habits. The most durable option is the combined strategy, where you both lay down the law in words and show what good looks like with examples. That's the only way to keep code in line as the conversation drags on.

The principle is universal: it applies not just to Python scripts for CSV files but to any multi-step interaction with AI. If you don't lock the style in with a strict template and an example, every revision will turn your tidy project into a landfill. GEO for code works the same way as for text: the model has to see clear boundaries, or its urge to "be helpful" will bury your productivity under a mountain of wasted tokens.

Bottom line: if you want clean code from ChatGPT or Claude, don't count on their common sense. They'll hit 99% correctness either way, but without combining examples and instructions you'll get working yet completely unreadable junk. Either you set a strict format up front and rub the model's nose in it on every edit, or you get ready to muck out a stable full of comments and useless functions. Skip writing a prompt with examples, and you'll spend that time refactoring garbage.

AI lab assistant

Apply this study to your task

Describe what you're working on. AI takes the method and the measured results from this paper and adapts them to your case, or writes a ready prompt built on them.

Based on Show and Tell: Controlling Style in Multi-Turn LLM Conversations arXiv:2511.13972

Sign in to apply this study New accounts get 50 free credits.

Get the week’s best papers by email

One email on Sundays with the highest-rated new techniques. Unsubscribe with one click.