{
    "componentChunkName": "component---src-templates-blog-post-js",
    "path": "/odd-bot-out-a-party-game-where-gpt-3-hides-among-your-relatives/",
    "result": {"data":{"site":{"siteMetadata":{"title":"catch { snail }","author":"Andrew"}},"markdownRemark":{"id":"44d891da-8a97-5ffb-ac57-c9414669d64d","excerpt":"Between the cheese course and the board games this Christmas, I made my family play against a language model, and I’d like to report the results as if they were…","html":"<p>Between the cheese course and the board games this Christmas, I made my family play against a language model, and I’d like to report the results as if they were science.</p>\n<p>The game is embarrassingly simple. Everyone gets a question on their phone — <em>“what’s the worst gift you ever received?”</em>, <em>“describe your morning in four words”</em>, <em>“invent a rule for this dinner”</em>. Everyone types an answer. The server quietly adds one more answer, written by GPT-3. All answers appear shuffled on the TV, and everyone votes for which one is the bot. Bot survives → bot scores. Bot caught → humans score.</p>\n<p>I called it <strong>Odd Bot Out</strong>. One evening of Flask, a phone-friendly page, a <code class=\"language-text\">davinci</code> completion call, and a shared screen. Now that the API waitlist is gone, anyone can run this at their own dinner table for pennies — a full evening of rounds cost me about forty cents.</p>\n<h2 id=\"version-1-instant-humiliation\" style=\"position:relative;\"><a href=\"#version-1-instant-humiliation\" aria-label=\"version 1 instant humiliation permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Version 1: instant humiliation</h2>\n<p>My first prompt was the obvious one — <em>“Answer the following question like a human player in a party game”</em> — and the bot was caught <strong>eight rounds out of eight</strong>. Unanimously. My mother, who calls WhatsApp “the WhatsApp,” identified the machine in under three seconds.</p>\n<p>Looking at the transcripts, the tells were brutal:</p>\n<ul>\n<li><strong>It wrote essays.</strong> Humans, typing on phones with wine in hand, answer “socks. again.” The model produced three elegant sentences with a topic and a conclusion.</li>\n<li><strong>Immaculate punctuation.</strong> Capital letters, commas, a closing period. Nobody at my table has used a capital letter on a phone since 2015.</li>\n<li><strong>It answered the question.</strong> Genuinely, helpfully, on-topic. Humans dodge, riff, or use the answer box to bully their brother.</li>\n<li><strong>It belonged nowhere.</strong> Every human answer leaked the room — the dog barking during dinner, dad’s parking incident, a running joke from 2009. The bot’s answers were universal, and universal turned out to be the strongest tell of all.</li>\n</ul>\n<h2 id=\"version-2-engineering-mediocrity\" style=\"position:relative;\"><a href=\"#version-2-engineering-mediocrity\" aria-label=\"version 2 engineering mediocrity permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Version 2: engineering mediocrity</h2>\n<p>So the fix wasn’t making the model smarter. It was making it <em>lazier</em>. The winning prompt contains no instructions at all — just a fake transcript of the game itself: a few questions, each followed by short, lowercase, slightly disappointing “player answers” I wrote by hand. The whole bot is this:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> openai\n\nFAKE_TRANSCRIPT <span class=\"token operator\">=</span> <span class=\"token triple-quoted-string string\">\"\"\"Q: what's your secret talent?\nA: parallel parking. thats it\nQ: describe your job badly\nA: i move numbers between boxes\nQ: whats always in your fridge?\nA: mustard and regret\nQ: best thing about winter?\nA: it ends\n\"\"\"</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">degrade</span><span class=\"token punctuation\">(</span>text<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token triple-quoted-string string\">\"\"\"Essays and punctuation are how it gets caught.\"\"\"</span>\n    text <span class=\"token operator\">=</span> text<span class=\"token punctuation\">.</span>strip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>lower<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> text<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token keyword\">if</span> text<span class=\"token punctuation\">.</span>endswith<span class=\"token punctuation\">(</span><span class=\"token string\">\".\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">else</span> text\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">ask_bot</span><span class=\"token punctuation\">(</span>question<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    resp <span class=\"token operator\">=</span> openai<span class=\"token punctuation\">.</span>Completion<span class=\"token punctuation\">.</span>create<span class=\"token punctuation\">(</span>\n        engine<span class=\"token operator\">=</span><span class=\"token string\">\"davinci\"</span><span class=\"token punctuation\">,</span>\n        prompt<span class=\"token operator\">=</span>FAKE_TRANSCRIPT <span class=\"token operator\">+</span> <span class=\"token string-interpolation\"><span class=\"token string\">f\"Q: </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>question<span class=\"token punctuation\">}</span></span><span class=\"token string\">\\nA:\"</span></span><span class=\"token punctuation\">,</span>\n        max_tokens<span class=\"token operator\">=</span><span class=\"token number\">16</span><span class=\"token punctuation\">,</span>          <span class=\"token comment\"># physically cannot write an essay</span>\n        temperature<span class=\"token operator\">=</span><span class=\"token number\">0.9</span><span class=\"token punctuation\">,</span>        <span class=\"token comment\"># some chaos, it's a party</span>\n        stop<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"Q:\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>      <span class=\"token comment\"># one answer, then shut up</span>\n    <span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> degrade<span class=\"token punctuation\">(</span>resp<span class=\"token punctuation\">.</span>choices<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>text<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Note what’s <em>not</em> here: no instructions, no “pretend to be human,” no persona. Plain davinci is a continuation engine, so the fake transcript does everything — it establishes the format, the register, and the level of effort, and the model simply continues the document it finds itself in. Every one of my hand-written fake answers is doing more work than a billion parameters.</p>\n<p>I drew one ethical line for myself: <code class=\"language-text\">degrade()</code> deletes polish, but no injecting fake typos. If it survives, it should survive by register, not by costume.</p>\n<p>Result across the rest of the holidays, 23 rounds with five to seven players: <strong>the bot survived 10</strong> — and twice a human got the most bot-votes instead. My uncle was declared a machine for answering too cleverly. He has not recovered.</p>\n<h2 id=\"what-the-scoreboard-actually-measures\" style=\"position:relative;\"><a href=\"#what-the-scoreboard-actually-measures\" aria-label=\"what the scoreboard actually measures permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What the scoreboard actually measures</h2>\n<p>Here’s what the game taught me, and I think it generalizes beyond my living room.</p>\n<p>We casually treat “passes for human” as a summit — as if text becomes human-like at the <em>top</em> of some quality scale. The party game says the opposite: <strong>the bot got caught whenever it was too good, and survived by being unremarkable.</strong> Fluency, structure, correctness — those read as machine. Laziness, fragments, mild rudeness — those read as person. In a room of casual humans, the Turing test is not a test of intelligence. It’s a test of <em>calibrated mediocrity</em>, and calibrating mediocrity is a real engineering problem: my prompt’s fake lazy answers were doing more work than the 175 billion parameters.</p>\n<p>The tell the model never beat, though, was <strong>placelessness</strong>. I could match the register of a tired human, but not the <em>address</em> of one. Human answers had a stake in that specific room on that specific evening; the model’s best efforts were from nowhere, for anyone. The final round’s question was “invent a rule for this dinner,” and the winning human answer referenced the gravy incident from an hour earlier. No amount of temperature gets you the gravy incident. Context isn’t flavor — it’s identity, and the model’s only context was whatever I smuggled into the prompt.</p>\n<p>Which suggests the uncomfortable corollary: give the machine the gravy incident — feed the room’s chatter into the prompt — and that last tell starts to dissolve. I tested a mild version, seeding tonight’s earlier answers into the context, and the bot immediately got better at blending. I stopped there, partly because it felt like enough, partly because it was genuinely a little eerie, and partly because it was time for dessert.</p>\n<h2 id=\"recipe-if-you-want-it\" style=\"position:relative;\"><a href=\"#recipe-if-you-want-it\" aria-label=\"recipe if you want it permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Recipe, if you want it</h2>\n<p>The whole server is small enough to read over coffee. One route collects answers, one builds the board by sneaking the bot in and shuffling, one counts votes:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> random\n<span class=\"token keyword\">from</span> flask <span class=\"token keyword\">import</span> Flask<span class=\"token punctuation\">,</span> request<span class=\"token punctuation\">,</span> jsonify\n\napp <span class=\"token operator\">=</span> Flask<span class=\"token punctuation\">(</span>__name__<span class=\"token punctuation\">)</span>\ngame <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token string\">\"question\"</span><span class=\"token punctuation\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"answers\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"board\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"votes\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"scores\"</span><span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.</span>route</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/ask\"</span><span class=\"token punctuation\">,</span> methods<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>           <span class=\"token comment\"># host sets the question</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">ask</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    game<span class=\"token punctuation\">.</span>update<span class=\"token punctuation\">(</span>question<span class=\"token operator\">=</span>request<span class=\"token punctuation\">.</span>form<span class=\"token punctuation\">[</span><span class=\"token string\">\"q\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> answers<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span> votes<span class=\"token operator\">=</span><span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">204</span>\n\n<span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.</span>route</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/answer\"</span><span class=\"token punctuation\">,</span> methods<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>        <span class=\"token comment\"># players submit from phones</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">answer</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    game<span class=\"token punctuation\">[</span><span class=\"token string\">\"answers\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>request<span class=\"token punctuation\">.</span>form<span class=\"token punctuation\">[</span><span class=\"token string\">\"player\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> request<span class=\"token punctuation\">.</span>form<span class=\"token punctuation\">[</span><span class=\"token string\">\"text\"</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">204</span>\n\n<span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.</span>route</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/board\"</span><span class=\"token punctuation\">)</span>                           <span class=\"token comment\"># the TV polls this</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">board</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> <span class=\"token keyword\">not</span> game<span class=\"token punctuation\">[</span><span class=\"token string\">\"board\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n        entries <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span>game<span class=\"token punctuation\">[</span><span class=\"token string\">\"answers\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        entries<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"__bot__\"</span><span class=\"token punctuation\">,</span> ask_bot<span class=\"token punctuation\">(</span>game<span class=\"token punctuation\">[</span><span class=\"token string\">\"question\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        random<span class=\"token punctuation\">.</span>shuffle<span class=\"token punctuation\">(</span>entries<span class=\"token punctuation\">)</span>\n        game<span class=\"token punctuation\">[</span><span class=\"token string\">\"board\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> entries\n    <span class=\"token keyword\">return</span> jsonify<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>text <span class=\"token keyword\">for</span> _<span class=\"token punctuation\">,</span> text <span class=\"token keyword\">in</span> game<span class=\"token punctuation\">[</span><span class=\"token string\">\"board\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.</span>route</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/vote\"</span><span class=\"token punctuation\">,</span> methods<span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token string\">\"POST\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>          <span class=\"token comment\"># index of the suspected bot</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">vote</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    game<span class=\"token punctuation\">[</span><span class=\"token string\">\"votes\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>request<span class=\"token punctuation\">.</span>form<span class=\"token punctuation\">[</span><span class=\"token string\">\"player\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>request<span class=\"token punctuation\">.</span>form<span class=\"token punctuation\">[</span><span class=\"token string\">\"idx\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span> <span class=\"token number\">204</span>\n\n<span class=\"token decorator annotation punctuation\">@app<span class=\"token punctuation\">.</span>route</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"/reveal\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">reveal</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    bot_idx <span class=\"token operator\">=</span> <span class=\"token builtin\">next</span><span class=\"token punctuation\">(</span>i <span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>who<span class=\"token punctuation\">,</span> _<span class=\"token punctuation\">)</span> <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span>game<span class=\"token punctuation\">[</span><span class=\"token string\">\"board\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">if</span> who <span class=\"token operator\">==</span> <span class=\"token string\">\"__bot__\"</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> player<span class=\"token punctuation\">,</span> idx <span class=\"token keyword\">in</span> game<span class=\"token punctuation\">[</span><span class=\"token string\">\"votes\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>items<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        game<span class=\"token punctuation\">[</span><span class=\"token string\">\"scores\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>player<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> game<span class=\"token punctuation\">[</span><span class=\"token string\">\"scores\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>get<span class=\"token punctuation\">(</span>player<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span>idx <span class=\"token operator\">==</span> bot_idx<span class=\"token punctuation\">)</span>\n    caught <span class=\"token operator\">=</span> <span class=\"token builtin\">list</span><span class=\"token punctuation\">(</span>game<span class=\"token punctuation\">[</span><span class=\"token string\">\"votes\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span>values<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>count<span class=\"token punctuation\">(</span>bot_idx<span class=\"token punctuation\">)</span> <span class=\"token operator\">></span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>game<span class=\"token punctuation\">[</span><span class=\"token string\">\"votes\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token number\">2</span>\n    game<span class=\"token punctuation\">[</span><span class=\"token string\">\"board\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> jsonify<span class=\"token punctuation\">(</span>bot<span class=\"token operator\">=</span>bot_idx<span class=\"token punctuation\">,</span> caught<span class=\"token operator\">=</span>caught<span class=\"token punctuation\">,</span> scores<span class=\"token operator\">=</span>game<span class=\"token punctuation\">[</span><span class=\"token string\">\"scores\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>A global dict as a database, no auth, race conditions if your family votes aggressively — it’s a living-room toy and proud of it. The front end is one HTML page polling <code class=\"language-text\">/board</code>; the “TV” is a laptop and an HDMI cable. Rotate who writes the question.</p>\n<p>Two warnings from the field: cap the bot at sixteen tokens or it will monologue, and prepare for the real endgame — after round three, the humans start impersonating the bot on purpose, and the game quietly turns into everyone performing their idea of a machine performing a person. That meta-round is the best round. I have notes about what <em>that</em> means, but they can wait for another post.</p>\n<p>Final score for the holidays: humans 13, machine 10, uncle still legally a robot.</p>","frontmatter":{"title":"Odd Bot Out: a party game where GPT-3 hides among your relatives","date":"December 29, 2021","description":"I built a living-room game over the holidays — everyone answers a question, one answer is a language model, find it. Tuning the bot to survive taught me what 'sounding human' actually means"}}},"pageContext":{"slug":"/odd-bot-out-a-party-game-where-gpt-3-hides-among-your-relatives/","previous":{"fields":{"slug":"/i-hired-gpt-3-as-my-on-call-intern/"},"frontmatter":{"title":"I hired GPT-3 as my on-call intern"}},"next":{"fields":{"slug":"/my-infrastructure-accepts-pull-requests-from-a-language-model-now/"},"frontmatter":{"title":"My infrastructure accepts pull requests from a language model now"}}}},
    "staticQueryHashes": ["3435731857","426816048","63159454"]}