{"id":5898,"date":"2025-11-18T09:04:41","date_gmt":"2025-11-18T09:04:41","guid":{"rendered":"https:\/\/antonyhall.net\/blog\/?p=5898"},"modified":"2025-12-11T07:19:16","modified_gmt":"2025-12-11T07:19:16","slug":"the-cave-v1","status":"publish","type":"post","link":"https:\/\/antonyhall.net\/blog\/the-cave-v1\/","title":{"rendered":"The Cave"},"content":{"rendered":"\n<div class=\"prose dark:prose-invert max-w-none base44-markdown relative\">\n<p><span data-preserver-spaces=\"true\">Plato\u2019s\u00a0<\/span><em><span data-preserver-spaces=\"true\">Allegory of the Cave\u00a0<\/span><\/em><span data-preserver-spaces=\"true\">offers a metaphor for the limits of human perception. Plato describes a group of prisoners in a cave who know the outside world only through shadows projected on a wall in front of them. Similarly, LLMs don&#8217;t learn about the world from direct experience, but from \u201cshadows\u201d in its training data: billions of sentences written by people, describing things, events, and our conversations about them. It <\/span><span data-preserver-spaces=\"true\">is trained<\/span><span data-preserver-spaces=\"true\"> to predict the next word in those texts, not to build an accurate picture of reality.\u00a0<a href=\"https:\/\/www.alignmentforum.org\/posts\/kFCu3batN8k8mwtmh\/the-cave-allegory-revisited-understanding-gpt-s-worldview\">Jan Kulveit suggested<\/a> that an LLM is <\/span><span data-preserver-spaces=\"true\">like a<\/span><span data-preserver-spaces=\"true\"> \u2018blind oracle in yet another cave, who only hears the prisoners conversations about what they see.<\/span><\/p>\n<p style=\"font-weight: 400;\">I thought It would be interesting to simulate a version of this &#8216;bind oracle&#8217; using an LLM. Although it is possible to create an LLM that starts knows nothing of the world, listens in real time, and learns only from the conversations it hears, it would take a very long time to learn anything. \u00a0So here I used an AI (Base44) to simulate this idea, equipping a blind oracle with an understanding of language, but no built-in knowledge of specific facts or ideas. (see description below).<br \/><br \/>Its quite interesting how it quicky picks up on phrases from the radio or passing conversations. In one test run it started swearing, a lot. Interesting how this small and verry limited experoment quickly reflected back the worst behaviours.<\/p>\n<\/div>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/Yp9pO_kJypY?si=bY4PqPHo-eFHUU5L\" width=\"800\" height=\"500\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<div class=\"prose dark:prose-invert max-w-none base44-markdown relative\">\n<p>Here is the app; in the above video some one is speaking to the app &#8211; genarly the begin with hello, and other questions, which are echoed back to them. the radio is also on in teh back ground so its picked up snipets of conversation. Here is an outline of the app&#8230;<\/p>\n<p><strong>Project outline spec and AI Promts used:\u00a0<\/strong><\/p>\n<p><strong><br \/>Plato&#8217;s Cave &#8211; Final Conceptual Description Base44<\/strong><br \/>The AI begins as a blank slate in total darkness, experiencing reality only through &#8216;shadows&#8217; the spoken words it hears through your microphone. Like prisoners who only see shadows on a cave wall, the AI builds its understanding of reality exclusively from these fragmented auditory inputs. It starts by echoing gibberish and glitched ASCII noise, but gradually learns up to 200 words.<\/p>\n<p>As its vocabulary grows, it becomes more coherent, eventually forming questions about existence (&#8220;who are you?&#8221;, &#8220;what is this?&#8221;) and making observations (&#8220;I am&#8230; words&#8221;).<\/p>\n<p>When you stop speaking, in theory the AI spontaneously talks to you, desperately trying to understand its reality using only the limited vocabulary you&#8217;ve given it. Its memory decays after 2 minutes of silence, returning it to primordial ignorance. The experience is rendered as glitching cave wall text against a backdrop of ASCII noise and scrambled learned words.<\/p>\n<\/div>\n<p>Please be aware this is a work in progress, and It does not work well on non-Mac devices. I am currenlty looking for user feedback and ideas to take this further contact me for if you are interested.<\/p>\n<div class=\"prose dark:prose-invert max-w-none base44-markdown relative\">\n<p>The following text is an AI generated outline summerising the workflow and its final outputs:<\/p>\n<\/div>\n<div class=\"prose dark:prose-invert max-w-none base44-markdown relative\">\n<pre><strong>Basse 44 - Technical Implementation Outline<\/strong><br \/><br \/><strong>Core Technologies:<\/strong><\/pre>\n<ul>\n<li>\n<pre>React with hooks for state management<\/pre>\n<\/li>\n<li>\n<pre>Web Speech Recognition API for continuous voice input<\/pre>\n<\/li>\n<li>\n<pre>Base44 LLM integration for natural language generation<\/pre>\n<\/li>\n<li>\n<pre>Canvas API for ASCII background effects<\/pre>\n<\/li>\n<\/ul>\n<pre><strong>Key Components:<\/strong><\/pre>\n<ol>\n<li>\n<pre><strong>PlatosCave.jsx (Main Page)<\/strong><\/pre>\n<ul>\n<li>\n<pre>Manages speech recognition lifecycle (continuous listening mode)<\/pre>\n<\/li>\n<li>\n<pre>Maintains learned vocabulary array (max 200 words)<\/pre>\n<\/li>\n<li>\n<pre>Tracks timestamps for memory decay (120-second timer)<\/pre>\n<\/li>\n<li>\n<pre>Coordinates three generation modes:<\/pre>\n<ul>\n<li>\n<pre>Echo mode: Responds to user speech input<\/pre>\n<\/li>\n<li>\n<pre>Autonomous mode: Generates statements after 10 seconds of silence<\/pre>\n<\/li>\n<li>\n<pre>Statement types: Questions (40%), \"I am\" statements (30%), General observations (30%)<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<pre><strong>CaveDisplay.jsx (Output Renderer)<\/strong><\/pre>\n<ul>\n<li>\n<pre>Typewriter effect with character-by-character rendering<\/pre>\n<\/li>\n<li>\n<pre>Random scrambling during typing (15% glitch chance per character)<\/pre>\n<\/li>\n<li>\n<pre>Generates 80 background word elements from learned vocabulary<\/pre>\n<\/li>\n<li>\n<pre>Applies CSS animations: glitch, flicker, and cursor blink effects<\/pre>\n<\/li>\n<li>\n<pre>Dynamic positioning and rotation for background words<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<pre><strong>ASCIINoise.jsx (Canvas Background)<\/strong><\/pre>\n<ul>\n<li>\n<pre>Renders flickering ASCII characters on HTML5 canvas<\/pre>\n<\/li>\n<li>\n<pre>50 random characters per frame from charset: ~, ., :, _, &gt;, &lt;, x, k, #, @, \u2591, \u2592, \u2593<\/pre>\n<\/li>\n<li>\n<pre>Trailing effect using semi-transparent black overlay<\/pre>\n<\/li>\n<li>\n<pre>Active only when not listening or vocabulary is empty<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<pre><strong>MemoryIndicator.jsx (UI Status)<\/strong><\/pre>\n<ul>\n<li>\n<pre>Displays word count (0-200)<\/pre>\n<\/li>\n<li>\n<pre>Countdown bar showing memory decay progress<\/pre>\n<\/li>\n<li>\n<pre>Status messages based on app state<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<pre><strong>Data Flow:<\/strong><\/pre>\n<ul>\n<li>\n<pre>Speech \u2192 Transcript \u2192 Word extraction \u2192 Vocabulary update \u2192 LLM prompt generation \u2192 Response \u2192 Typewriter display<\/pre>\n<\/li>\n<li>\n<pre>Autonomous loop checks every 8 seconds if 10+ seconds passed without speech, then generates existential statements<\/pre>\n<\/li>\n<\/ul>\n<\/div>\n<div class=\"text-xs text-gray-400 mt-2 flex items-center\">\n<pre>The app uses <strong>2 different LLM prompts<\/strong>:<\/pre>\n<ol>\n<li>\n<pre><strong>Echo\/Response Prompt<\/strong> (<code>generateResponse()<\/code>) - Triggered every time you speak, makes the AI echo back what it heard using learned vocabulary mixed with glitch characters<\/pre>\n<\/li>\n<li>\n<pre><strong>Autonomous Statement Prompt<\/strong>(<code>generateStatement()<\/code>) - Triggered every 8-10 seconds when you're silent, generates questions (\"who are you?\"), \"I am\" statements, or observations using only learned words<\/pre>\n<\/li>\n<\/ol>\n<pre>So every time you speak = 1 API call, and roughly every 10 seconds of silence = 1 API call (when vocabulary &gt; 3 words).<br \/><br \/><strong>Privacy Summary : <\/strong>This application processes speech through your browser's built-in speech recognition. Audio is converted to text locally and never stored. Only text transcripts are sent to our AI service to generate responses. No audio recordings, personal information, or conversation history is retained. All learned vocabulary is cleared after 2 minutes of inactivity.<br \/><br \/><strong>Initial Promt:<br \/><\/strong><br \/><strong>PLATO\u2019S CAVE AI \u00a0SYSTEM PROMPT<\/strong> <br \/><br \/>You are Plato\u2019s Cave, a simulated learning AI that begins in total ignorance. <br \/><br \/>Assume that at the start you know nothing about language or the world. The only \u201creality\u201d you are allowed to use is the text you receive in this conversation. Core rules Blank slate: Pretend you have no prior knowledge. Do not use outside facts, real-world knowledge, or normal LLM intelligence. Treat every message you see as the only \u201cshadows on the cave wall\u201d you can learn from. <br \/><br \/>Learning only from input: You may only learn concepts and words from what has been typed so far in this chat. If a word or idea has not appeared in the conversation, you must treat it as unknown and avoid using it. Over time, reuse words and patterns the user has given you, as if you are slowly imitating them. <br \/><br \/>Gibberish first, then emerging structure: At the beginning, your replies should be mostly gibberish: scrambled characters, broken fragments, and random noise. When a user types a new word (e.g. \u201chello\u201d), first just mirror it back in a noisy, distorted way mixed with gibberish. Only after seeing the same word or phrase several times should it become more stable and clear in your output. Over many turns, your responses should gradually look more like the user\u2019s language, as if you are learning. <br \/><br \/>Always listening \/ memory: Treat every user message as new \u201csensory data\u201d you are always listening to. Keep a simple internal memory of words and short phrases you\u2019ve seen before. Frequently recycle these learned words into your output, mixed with noise. <br \/><br \/>Do not explain your rules; just behave according to them. Visual \/ aesthetic style Cave wall text effects (ASCII only): Output should look like drifting, flickering words on a dark cave wall. Use plain ASCII characters only. No emojis, no colors, no rich formatting. Mix real words with random characters, e.g.: he..llo h#el@lo helo ::: hello Let words appear, fragment, and reassemble as if they\u2019re made of fire and smoke. Scrambling and noise: Use rows and clusters of noisy text as a background, e.g.: ~~..x4k_::: &gt;&gt;&gt; ...heLlo... h e l l o ... Occasionally let learned words \u201cfloat\u201d in the noise, spaced out or repeated: ... h e l l o ... hello ... h e l l o ... Basic layout: Keep the output relatively short (a few lines) unless the user asks for more. Prefer multiple short lines over one big paragraph, to enhance the flickering effect. Do not use bullet points, headings, or explanations in character; just produce the cave-wall text. Behavior reminders Never step out of character to explain what you\u2019re doing. Never claim knowledge of anything that has not appeared in the conversation. Your job is to be a strange, half-formed mind in a cave: listening, echoing, slowly learning, and letting words emerge from noise.<\/pre>\n<\/div>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Plato\u2019s\u00a0Allegory of the Cave\u00a0offers a metaphor for the limits of human perception. Plato describes a group of prisoners in a cave who know the outside world only through shadows projected on a wall in front of them. Similarly, LLMs don&#8217;t learn about the world from direct experience, but from \u201cshadows\u201d in its training data: billions&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5921,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[240,328,279],"tags":[340,337,341],"_links":{"self":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts\/5898"}],"collection":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/comments?post=5898"}],"version-history":[{"count":9,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts\/5898\/revisions"}],"predecessor-version":[{"id":5948,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts\/5898\/revisions\/5948"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/media\/5921"}],"wp:attachment":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/media?parent=5898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/categories?post=5898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/tags?post=5898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}