{"id":32188,"date":"2026-03-04T12:42:31","date_gmt":"2026-03-04T20:42:31","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=32188"},"modified":"2026-03-05T12:43:48","modified_gmt":"2026-03-05T20:43:48","slug":"build-ai-powered-life-simulator-embeddings-branching-tidb","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/","title":{"rendered":"How to Build an AI App That Simulates Life Decisions"},"content":{"rendered":"<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Key_Takeaways\"><\/span>Key Takeaways<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build an AI-powered life simulator app generating realistic 6-24 month outcomes across 6 life dimensions (financial, emotional, career, health, relationships, overall).<\/li>\n\n\n\n<li>6 embeddings per decision enable targeted semantic search across specific life dimensions instead of diluted generic results.<\/li>\n\n\n\n<li>TiDB combines vector search + SQL joins in single queries and offers database-level branching for isolated scenario exploration.<\/li>\n\n\n\n<li>Prompt for emotional honesty, not optimism as realistic downsides and lived experiences make AI predictions actually useful for decision-making.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p>For most of 2025, I found myself trapped in an exhausting loop. Every few days, I&#8217;d open ChatGPT, Claude, or Gemini and ask the same question in slightly different ways: &#8220;Should I buy a house or keep renting?&#8221;<\/p>\n\n\n\n<p>The numbers seemed simple on the surface. My rent was $2,000 monthly. The mortgage would run around $3,500. Case closed, right? Keep renting and pocket the $1,500 difference.<\/p>\n\n\n\n<p>But that&#8217;s not how major life decisions actually work.<\/p>\n\n\n\n<p>What about building equity? Tax benefits? The opportunity cost of investing that $1,500 difference in index funds? And more importantly\u2014what about the non-financial factors? The emotional security of ownership? The flexibility of renting? The stress of maintenance?<\/p>\n\n\n\n<p>I&#8217;d copy-paste my financial details into ChatGPT, tweak one variable, and ask again. Then I&#8217;d try Claude with a different framing, then Gemini, then back to ChatGPT with updated assumptions. Each AI gave me reasonable answers, but I was essentially running the same simulation manually, hundreds of times.<\/p>\n\n\n\n<p>After three months of this exhausting cycle, I had an epiphany: I was manually doing what an AI-powered app could do automatically.<\/p>\n\n\n\n<p>That&#8217;s when I decided to build <strong><a href=\"https:\/\/app.parallellives.ai\/\">Parallel Lives<\/a><\/strong>, an AI-powered life simulation tool that generates branching timelines of your possible futures. Not fantasy 20-year projections that are impossible to plan around, but realistic 6, 12, and 24-month scenarios you can actually use.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"796\" src=\"https:\/\/static.pingcap.com\/files\/2026\/03\/05114746\/image-1024x796.png\" alt=\"An image depicting Parallel Live, an AI-powered life simulator.\" class=\"wp-image-32214\" srcset=\"https:\/\/static.pingcap.com\/files\/2026\/03\/05114746\/image-1024x796.png 1024w, https:\/\/static.pingcap.com\/files\/2026\/03\/05114746\/image-300x233.png 300w, https:\/\/static.pingcap.com\/files\/2026\/03\/05114746\/image-768x597.png 768w, https:\/\/static.pingcap.com\/files\/2026\/03\/05114746\/image.png 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Parallel_Lives_Does_An_AI-Powered_Life_Simulator\"><\/span>What Parallel Lives Does: An AI-Powered Life Simulator<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Parallel Lives takes any major life decision and shows you how different choices might unfold across multiple dimensions\u2014not just financially, but emotionally, professionally, and personally.<\/p>\n\n\n\n<p><strong>The core workflow:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Input a decision (buy vs. rent, job offer vs. current role, relocate vs. stay).<\/li>\n\n\n\n<li>AI generates two initial paths with realistic outcomes.<\/li>\n\n\n\n<li>Click any path to explore deeper consequences.<\/li>\n\n\n\n<li>Create alternate branches at any decision point.<\/li>\n\n\n\n<li>Search across all past decisions semantically.<\/li>\n\n\n\n<li>Compare paths side-by-side with AI analysis.<\/li>\n<\/ul>\n\n\n\n<p>Think of it as a decision tree visualizer powered by large language models, with each node representing not just an outcome, but a lived experience across six life dimensions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Technology_Stack_Why_I_Chose_These_Tools\"><\/span>The Technology Stack: Why I Chose These Tools<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Building an AI decision simulation app requires balancing multiple capabilities: Natural language understanding, vector similarity search, relational data management, and real-time streaming. No single tool does everything perfectly, so I selected specialized solutions for each layer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">TiDB Cloud Starter: The Database Foundation for Everything<\/h3>\n\n\n\n<p>I needed a database that could handle:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Relational data (decision trees, user sessions, branching paths).<\/li>\n\n\n\n<li>Vector embeddings (1,536 dimensions per node).<\/li>\n\n\n\n<li>Semantic search across multi-dimensional data.<\/li>\n\n\n\n<li>Real-time queries joining vectors and relations.<\/li>\n\n\n\n<li>Cost-effective scaling for unpredictable traffic.<\/li>\n<\/ul>\n\n\n\n<p><a href=\"https:\/\/www.pingcap.com\/ko\/tidb\/\">TiDB Cloud \uc2a4\ud0c0\ud130<\/a> delivers all of this in one MySQL-compatible system. Instead of managing Postgres + Pinecone + Redis, I write SQL queries that join relational tables and perform vector similarity search in the same statement. This Starter tier scales to zero during idle periods, so I&#8217;m not burning money when users aren&#8217;t actively making decisions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Claude Opus 4.5: Primary Scenario Generation Engine<\/h3>\n\n\n\n<p>Opus is the heart of Parallel Lives. When you input a decision, Opus generates branching scenarios with realistic emotional nuance. This isn&#8217;t a lookup task or simple prediction\u2014it requires understanding context, anticipating second-order effects, and being honest about downsides.<\/p>\n\n\n\n<p>I tried GPT-4 and Gemini 1.5 Pro first. They both generated plausible scenarios but consistently skewed too optimistic. Opus captures the messy reality of life decisions: The promotion that strains your relationship, the startup that fails but teaches you invaluable lessons, the house that builds equity but limits career flexibility.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Claude Sonnet 4: Dimensional Extraction and Structured Data<\/h3>\n\n\n\n<p>Before storing decision nodes, I need to extract summaries across six life dimensions (financial, emotional, relationship, career, health, overall). Sonnet 4 excels at this structured extraction task\u2014faster and cheaper than Opus for cases where nuance matters less than consistency.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">GPT-4o mini: Path Comparison Analysis<\/h3>\n\n\n\n<p>When users want to compare two branches side-by-side, GPT-4o mini generates the tradeoff analysis. It&#8217;s fast, cost-effective, and particularly good at weighing competing priorities in a digestible format.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">OpenAI Embeddings (text-embedding-3-small): Semantic Search Foundation<\/h3>\n\n\n\n<p>Every dimensional summary gets converted into a 1,536-dimensional vector. This enables semantic search like &#8220;show me decisions that affected work-life balance&#8221; without requiring exact keyword matches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Data_Architecture_Multi-Dimensional_Decision_Modeling\"><\/span>The Data Architecture: Multi-Dimensional Decision Modeling<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Here&#8217;s where Parallel Lives diverges from typical AI applications. Most apps create one embedding per document. I create <strong>six embeddings per decision node.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Why Six Dimensions Matter for Life Decisions<\/h3>\n\n\n\n<p>A major life choice doesn&#8217;t impact just one area of your life. Taking a new job affects:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Financial<\/strong>: Salary, benefits, commute costs, relocation expenses.<\/li>\n\n\n\n<li><strong>Emotional<\/strong>: Stress levels, fulfillment, anxiety, excitement.<\/li>\n\n\n\n<li><strong>Relationship<\/strong>: Time with family\/friends, romantic relationship health, professional network.<\/li>\n\n\n\n<li><strong>Career<\/strong>: Skill development, reputation, future opportunities, trajectory.<\/li>\n\n\n\n<li><strong>Health<\/strong>: Physical wellness, mental health, energy, burnout risk.<\/li>\n\n\n\n<li><strong>Overall<\/strong>: The holistic picture combining all factors.<\/li>\n<\/ul>\n\n\n\n<p>When someone asks &#8220;show me decisions that affected my relationships,&#8221; they don&#8217;t want results diluted by financial content. Targeted dimensional search beats generic embedding search.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Database Schema for Multi-Dimensional Decisions<\/h3>\n\n\n\n<p>The core data model uses three tables:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Stores complete decision trees\nCREATE TABLE trees (\n  id VARCHAR(36) PRIMARY KEY,\n  decision TEXT NOT NULL,\n  tree_data JSON NOT NULL,\n  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  INDEX idx_created (created_at)\n);\n\n-- Tracks user's exploration path through decisions\nCREATE TABLE decision_history (\n  id VARCHAR(36) PRIMARY KEY,\n  session_id VARCHAR(36) NOT NULL,\n  parent_id VARCHAR(36),\n  decision TEXT NOT NULL,\n  choice_made TEXT,\n  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  INDEX idx_session (session_id),\n  INDEX idx_parent (parent_id)\n);\n\n-- Stores six embeddings per decision node\nCREATE TABLE decision_embeddings (\n  id VARCHAR(36) PRIMARY KEY,\n  decision_id VARCHAR(36) NOT NULL,\n  node_id VARCHAR(255) NOT NULL,\n  dimension ENUM('financial', 'emotional', 'relationship', \n                  'career', 'health', 'overall'),\n  summary TEXT NOT NULL,\n  embedding VECTOR(1536),\n  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  INDEX idx_decision (decision_id),\n  INDEX idx_dimension (dimension),\n  VECTOR INDEX idx_embedding (embedding) USING HNSW\n);<\/code><\/pre>\n\n\n\n<p>The <code>tree_data<\/code> JSON column stores the complete branching structure, with each node containing scenario descriptions, timeframes, sentiment scores, and child nodes for further exploration.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How Data Flows Through the System<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;User inputs a life decision]\n      \u2193\n&#91;Claude generates 2 initial paths with 2-year outcomes]\n      \u2193\n&#91;User clicks a path to explore further]\n      \u2193\n&#91;Claude generates next decision point + consequences]\n      \u2193\n&#91;User can branch: \"what if I chose differently?\"]\n      \u2193\n&#91;Extract 6-dimensional summaries from each node]\n      \u2193\n&#91;Generate embeddings, store in TiDB]\n      \u2193\n&#91;Semantic search across all past decisions]<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AI-Powered_Life_Simulator_Why_Choose_TiDB_Cloud_Starter\"><\/span>AI-Powered Life Simulator: Why Choose TiDB Cloud Starter<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Most vector databases force you to choose between vector search and relational queries. TiDB Cloud Starter uniquely combines both, which unlocked three capabilities essential for decision modeling.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Multi-Dimensional Vector Indexing<\/h3>\n\n\n\n<p>Each decision node needs six separate vector indexes\u2014one per life dimension. With Pinecone, that means six namespaces or six separate indexes. Querying &#8220;decisions affecting health and relationships&#8221; requires six API calls, then merging results in application code.<\/p>\n\n\n\n<p>With TiDB Cloud Starter, it&#8217;s one SQL query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM decision_embeddings\nWHERE dimension IN ('emotional', 'health')\n  AND VEC_COSINE_DISTANCE(embedding, ?) &lt; 0.5\nORDER BY distance ASC;<\/code><\/pre>\n\n\n\n<p>The database handles multi-dimension filtering natively. No client-side merging required.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Joining Vectors with Relational Data<\/h3>\n\n\n\n<p>When searching &#8220;decisions that affected my relationships,&#8221; I need to:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Find matching embeddings in the relationship dimension.<\/li>\n\n\n\n<li>Join to decision_history for original decision text.<\/li>\n\n\n\n<li>Join to trees for full context and branching paths.<\/li>\n<\/ol>\n\n\n\n<p>With split architecture (Pinecone + Postgres), that&#8217;s vector search, then manual joins, then result merging. With TiDB Cloud Starter, it&#8217;s one query:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT \n  de.summary, \n  d.decision, \n  t.tree_data\nFROM decision_embeddings de\nJOIN decision_history d ON de.decision_id = d.id\nJOIN trees t ON d.session_id = t.id\nWHERE de.dimension = 'relationship'\n  AND VEC_COSINE_DISTANCE(de.embedding, ?) &lt; 0.5\nORDER BY distance ASC;<\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/docs.pingcap.com\/ai\/vector-search-overview\/\">Vector similarity search<\/a> and relational joins execute together, enabling semantic search with full context retrieval.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Database-Level Branching for Scenario Exploration<\/h3>\n\n\n\n<p>This feature made me realize TiDB Cloud Starter was purpose-built for decision modeling applications.<\/p>\n\n\n\n<p>Parallel Lives is fundamentally about exploring alternate realities. &#8220;What if I took the job?&#8221; versus &#8220;What if I stayed?&#8221; Each path branches into more paths. Users click around, explore, backtrack, try different scenarios.<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.pingcap.com\/tidbcloud\/branch-overview\/?plan=starter\">TiDB Cloud Starter&#8217;s branching API<\/a> creates isolated database copies in milliseconds:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const response = await fetch(\n  `https:\/\/serverless.tidbapi.com\/v1beta1\/clusters\/${clusterId}\/branches`,\n  {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application\/json\" },\n    body: JSON.stringify({\n      displayName: `scenario-${scenarioId}`,\n      parentId: clusterId\n    })\n  }\n);<\/code><\/pre>\n\n\n\n<p>Each branch is a complete database copy. Users can explore a decision path, generate new nodes, store embeddings, and if they want to reset or try different assumptions, the original branch remains untouched. Real isolation. Real rollback capability.<\/p>\n\n\n\n<p>This is the same feature <a href=\"https:\/\/www.pingcap.com\/ko\/case-study\/manus-agentic-ai-database-tidb\/\">Manus.ai <\/a>uses to let agents explore thousands of solution paths simultaneously. For Parallel Lives, it means users can branch decision trees at the database level, not just the UI level.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bonus: Scale-to-Zero Economics<\/h3>\n\n\n\n<p>Decision-making has bursts of intense usage (when someone faces a major choice), then silence for weeks. Traditional database pricing punishes this pattern with always-on costs.<\/p>\n\n\n\n<p>TiDB Cloud Starter scales to zero. During idle periods, I pay nothing. When a user explores decision trees, capacity spins up instantly. For a side project with unpredictable traffic, this is the difference between sustainable and prohibitively expensive.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AI-Powered_Life_Simulator_Making_Predictions_Emotionally_Honest\"><\/span>AI-Powered Life Simulator: Making Predictions Emotionally Honest<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>My first attempt at scenario generation was garbage. I told Claude to &#8220;generate possible outcomes&#8221; and received pure fantasy. Every scenario worked out perfectly. No stress, relationship strain, or hidden costs. Completely useless for actual decision-making.<\/p>\n\n\n\n<p>The breakthrough came from reframing the prompt to demand <strong>emotional honesty over optimism<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The System Prompt That Changed Everything<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>const SYSTEM_PROMPT = `You are simulating possible futures for a major life decision.\n\nCRITICAL RULES:\n\n1. Be emotionally honest. Include realistic downsides, not vague risks.\n   - BAD: \"You might face some challenges\"\n   - GOOD: \"You'll probably feel isolated for the first 6 months. Most people do.\"\n\n2. Show the lived experience, not just outcomes.\n   - BAD: \"Your salary increases to $150k\"\n   - GOOD: \"You're making $150k but working 60-hour weeks. You've missed \n           three family events this quarter.\"\n\n3. Preserve specific facts from the user's input.\n   - If they said \"$120k offer\" keep saying $120k, not \"a good salary\"\n\n4. Different timeframes show progression, not repetition.\n   - 6 months: immediate adjustment period\n   - 1 year: patterns emerging\n   - 2 years: new normal established\n\n5. Every positive has a cost. Every negative has a silver lining.\n   - Promotion \u2192 less time for side projects\n   - Startup fails \u2192 but you learned to ship fast`;<\/code><\/pre>\n\n\n\n<p>The difference was transformative.<\/p>\n\n\n\n<p><strong>Before:<\/strong> &#8220;You succeed and feel fulfilled.&#8221;<\/p>\n\n\n\n<p><strong>After:<\/strong> &#8220;You close the funding round but your co-founder relationship is strained. You haven&#8217;t exercised in two months. The equity is valuable on paper, but you&#8217;re questioning whether the stress is worth it.&#8221;<\/p>\n\n\n\n<p>This kind of nuanced prediction is what separates useful decision tools from motivational fantasy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Domain-Specific Guidance for Different Decision Types<\/h3>\n\n\n\n<p>A job offer decision requires different considerations than housing or relocation. My first version used generic prompts for everything. The outputs were bland and similar.<\/p>\n\n\n\n<p>Now I detect the decision type and inject domain-specific guidance:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>function getScenarioGuidance(decision: string): string {\n  const lower = decision.toLowerCase();\n\n  if (lower.includes('job offer') || lower.includes('salary')) {\n    return `JOB OFFER GUIDANCE:\n- Total comp matters more than base salary (equity, bonus, benefits)\n- Consider: commute impact on daily energy, team culture fit, growth ceiling\n- Hidden costs: relocation, lifestyle inflation, golden handcuffs`;\n  }\n\n  if (lower.includes('house') || lower.includes('mortgage') || \n      lower.includes('rent')) {\n    return `HOUSING GUIDANCE:\n- True cost = mortgage + property tax + insurance + maintenance \n  (budget 1-2% of home value\/year)\n- Renting isn't \"throwing money away\" - run the actual numbers\n- Location lock-in: how does this affect job flexibility?`;\n  }\n\n  if (lower.includes('move') || lower.includes('relocate') || \n      lower.includes('city')) {\n    return `RELOCATION GUIDANCE:\n- Cost of living differences can erase salary gains\n- Social network rebuild takes 1-2 years minimum\n- Consider: weather impact on mental health, proximity to family`;\n  }\n\n  return ''; \/\/ Generic decision, no special guidance\n}<\/code><\/pre>\n\n\n\n<p>This contextual prompting dramatically improved output quality. Housing decisions now surface maintenance reserves and opportunity costs. Job offers include cultural fit and commute impact. The details people forget to consider.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Streaming_Responses_for_Better_UX\"><\/span>Streaming Responses for Better UX<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Tree generation takes 10-15 seconds with Claude Opus. That&#8217;s too long to stare at a loading spinner without feedback.<\/p>\n\n\n\n<p>I stream the AI response so users see the decision tree building in real-time:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export async function POST(request: NextRequest) {\n  const { decision, mode } = await request.json();\n\n  const stream = await anthropic.messages.stream({\n    model: \"claude-opus-4-5-20250514\",\n    max_tokens: 4000,\n    system: SYSTEM_PROMPT + getScenarioGuidance(decision),\n    messages: &#91;{ role: \"user\", content: buildPrompt(decision, mode) }]\n  });\n\n  return new Response(\n    new ReadableStream({\n      async start(controller) {\n        for await (const chunk of stream) {\n          if (chunk.type === 'content_block_delta') {\n            controller.enqueue(\n              new TextEncoder().encode(chunk.delta.text)\n            );\n          }\n        }\n        controller.close();\n      }\n    }),\n    { headers: { 'Content-Type': 'text\/plain; charset=utf-8' } }\n  );\n}<\/code><\/pre>\n\n\n\n<p>The frontend parses the stream incrementally and renders nodes as they appear. Users watch the tree grow, which creates the perception of speed even when generation takes the same time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Semantic_Search_Across_Past_Decisions\"><\/span>Semantic Search Across Past Decisions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Once you&#8217;ve explored several decisions with six-dimensional embeddings each, powerful search becomes possible:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>export async function POST(request: NextRequest) {\n  const { query, dimensions = &#91;'overall'], limit = 10 } = await request.json();\n\n  const queryEmbedding = await generateEmbedding(query);\n\n  const &#91;rows] = await pool.execute(`\n    SELECT\n      de.decision_id,\n      de.node_id,\n      de.dimension,\n      de.summary,\n      d.decision as original_decision,\n      VEC_COSINE_DISTANCE(de.embedding, ?) as distance\n    FROM decision_embeddings de\n    JOIN decision_history d ON de.decision_id = d.id\n    WHERE de.dimension IN (${dimensions.map(() =&gt; '?').join(',')})\n      AND VEC_COSINE_DISTANCE(de.embedding, ?) &lt; 0.5\n    ORDER BY distance ASC\n    LIMIT ?\n  `, &#91;queryEmbedding, ...dimensions, queryEmbedding, limit]);\n\n  const grouped = groupByDecision(rows);\n  return NextResponse.json({ results: grouped });\n}<\/code><\/pre>\n\n\n\n<p><strong>Example queries users can ask:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&#8220;What decisions affected my relationships?&#8221;<\/li>\n\n\n\n<li>&#8220;Show me choices where I prioritized career over health&#8221;<\/li>\n\n\n\n<li>&#8220;Which scenarios involved financial stress?&#8221;<\/li>\n\n\n\n<li>&#8220;What happened when I took risks?&#8221;<\/li>\n<\/ul>\n\n\n\n<p>The system searches the relevant dimensions across all past decision nodes and returns contextual results. It&#8217;s like having a conversation with your decision history.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Comparing_Alternative_Futures_Side-by-Side\"><\/span>Comparing Alternative Futures Side-by-Side<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Sometimes you don&#8217;t need more exploration\u2014you need clarity on two specific paths. &#8220;What&#8217;s actually the difference between buying and renting for my situation?&#8221;<\/p>\n\n\n\n<p>The comparison feature uses GPT-4o mini with structured output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const response = await openai.chat.completions.create({\n  model: \"gpt-4o-mini\",\n  response_format: { type: \"json_object\" },\n  messages: &#91;{\n    role: \"system\",\n    content: `Compare these two life paths. Return JSON with:\n      - recommendation: \"A\" | \"B\" | \"depends\"\n      - path_a_strengths: string&#91;]\n      - path_a_weaknesses: string&#91;]\n      - path_b_strengths: string&#91;]\n      - path_b_weaknesses: string&#91;]\n      - future_voice: \"A message from your future self about this choice\"\n      - key_questions: \"Questions to ask yourself before deciding\"`\n  }, {\n    role: \"user\",\n    content: `Path A: ${pathA.description}\\n\\nPath B: ${pathB.description}`\n  }]\n});<\/code><\/pre>\n\n\n\n<p>The <code>future_voice<\/code> field generates a first-person message from a hypothetical future version of yourself who made that choice. It sounds corny, but users consistently mention it as their favorite feature. There&#8217;s something powerful about reading: <em>&#8220;Hey, it&#8217;s you from 2 years in the future. I took the startup job. The equity never materialized, but I learned more in 18 months than I did in 5 years at BigCo. No regrets.&#8221;<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AI-Powered_Life_Simulator_Ongoing_Improvements_and_Known_Limitations\"><\/span>AI-Powered Life Simulator: Ongoing Improvements and Known Limitations<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>No software is perfect, and Parallel Lives has some rough edges I&#8217;m actively working on:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Calibration Challenge: Optimism vs. Realism<\/h3>\n\n\n\n<p>How pessimistic should the predictions be? Too optimistic and the tool is useless. Too pessimistic and it creates decision paralysis.<\/p>\n\n\n\n<p>Right now I lean toward realistic downsides because most people&#8217;s mental models are too optimistic. But some users report the app made them anxious about decisions they were excited about. That feedback is making me reconsider the balance.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fact Preservation Issues<\/h3>\n\n\n\n<p>If a user says &#8220;I got a $150k offer with 0.5% equity,&#8221; those specific numbers need to stay consistent throughout the tree. Claude sometimes rounds (&#8220;about $150k&#8221;) or paraphrases (&#8220;a strong equity package&#8221;). I&#8217;ve added explicit preservation instructions, but it&#8217;s not 100% reliable yet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Timeline Standardization<\/h3>\n\n\n\n<p>Currently, all scenarios use fixed timeframes: 6 months, 1 year, 2 years. But &#8220;2 years&#8221; means different things for different decisions. A startup might pivot three times in 2 years. A mortgage is a 30-year commitment.<\/p>\n\n\n\n<p>I&#8217;m working on scenario-specific timeline generation that adjusts to the decision&#8217;s natural rhythm.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Handling Uncertainty<\/h3>\n\n\n\n<p>Some decisions have genuinely unpredictable variables (will the startup get funding? will the housing market crash?). Right now, the app shows multiple scenarios but doesn&#8217;t quantify probability. Adding probabilistic modeling would help, but risks creating false precision.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_This_AI-Powered_Life_Simulator_Taught_Me_About_AI_Decision_Tools\"><\/span>What This AI-Powered Life Simulator Taught Me About AI Decision Tools<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Building Parallel Lives clarified what makes AI useful for decision-making versus what&#8217;s just theater:<\/p>\n\n\n\n<p><strong>What works:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Emotional honesty over optimism.<\/li>\n\n\n\n<li>Multi-dimensional analysis instead of single-axis thinking.<\/li>\n\n\n\n<li>Short-term scenarios (6-24 months) over long-term fantasy.<\/li>\n\n\n\n<li>Domain-specific context (housing vs. job vs. relocation).<\/li>\n\n\n\n<li>Streaming UX that shows thinking process.<\/li>\n\n\n\n<li>Semantic search to learn from past decisions.<\/li>\n<\/ul>\n\n\n\n<p><strong>What doesn&#8217;t work:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>One-size-fits-all prompts.<\/li>\n\n\n\n<li>Pure numerical analysis without lived experience.<\/li>\n\n\n\n<li>Long-term projections (3+ years).<\/li>\n\n\n\n<li>Single embedding per decision.<\/li>\n\n\n\n<li>Optimistic bias that ignores downsides.<\/li>\n<\/ul>\n\n\n\n<p><strong>The core insight: Decisions aren&#8217;t spreadsheets. They&#8217;re stories.<\/strong> A good decision tool should show you lived experiences, not just cells in a table.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"AI-Powered_Life_Simulator_Check_Out_Parallel_Lives\"><\/span>AI-Powered Life Simulator: Check Out Parallel Lives<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Parallel Lives is built on TiDB Cloud Starter for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Branching decision trees with database-level isolation.<\/li>\n\n\n\n<li>Multi-dimensional vector embeddings (six per node).<\/li>\n\n\n\n<li>Semantic search across all past decisions.<\/li>\n\n\n\n<li>Relational joins combined with vector similarity.<\/li>\n\n\n\n<li>Scale-to-zero economics for unpredictable usage patterns.<\/li>\n<\/ul>\n\n\n\n<p>All of this in one MySQL-compatible database.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Next Steps<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/app.parallellives.ai\">Try the app<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/RealChrisSean\/DecisionTree\">Download the code on GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/auth.tidbcloud.com\/login?state=hKFo2SB6eHRXUV9XNEtUSW1tZUhDWEo5VFgyd3R2Vi1QeV95QaFupWxvZ2luo3RpZNkgNTI1SUZwQ09OYXowRzEwZTF6UkY3X1lkeHNEc0NUSUGjY2lk2SA2SVp0aENmbVJLSVBFblFTVDhhRGJ0TTdTR2RNbmlSbA&amp;client=6IZthCfmRKIPEnQST8aDbtM7SGdMniRl&amp;protocol=oauth2&amp;response_type=token%20id_token&amp;redirect_uri=https%3A%2F%2Ftidbcloud.com%2Fauth_redirect%3Fprev%3D%252F&amp;scope=openid%20email&amp;nonce=3YL-Oey6UO9tg3B5oIQKC-z5hrpJijUu&amp;auth0Client=eyJuYW1lIjoiYXV0aDAuanMiLCJ2ZXJzaW9uIjoiOS4xOS4xIn0%3D\">Get started with TiDB Cloud Starter<\/a> (for free)<\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>For most of 2025, I found myself trapped in an exhausting loop. Every few days, I&#8217;d open ChatGPT, Claude, or Gemini and ask the same question in slightly different ways: &#8220;Should I buy a house or keep renting?&#8221; The numbers seemed simple on the surface. My rent was $2,000 monthly. The mortgage would run around [&hellip;]<\/p>\n","protected":false},"author":324,"featured_media":32222,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ub_ctt_via":"","footnotes":""},"categories":[436],"tags":[138,147,474,111,297],"class_list":["post-32188","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial","tag-ai","tag-distributed-sql","tag-life-simulation","tag-tidb","tag-vector-search"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png","author_info":{"display_name":"Chris Dabatos","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/chris-dabatos\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AI-Powered Life Simulator: A Technical Deep Dive<\/title>\n<meta name=\"description\" content=\"Learn how to build an AI-powered life simulator using Claude Opus 4.5 and TiDB to visualize branching decision outcomes in 6-24 months.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AI-Powered Life Simulator: A Technical Deep Dive\" \/>\n<meta property=\"og:description\" content=\"Learn how to build an AI-powered life simulator using Claude Opus 4.5 and TiDB to visualize branching decision outcomes in 6-24 months.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-04T20:42:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-05T20:43:48+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/03\/05122940\/tidb_1200x627-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Chris Dabatos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/03\/05121304\/tidb_twitter_1600x900-5.png\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Chris Dabatos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\"},\"author\":{\"name\":\"Chris Dabatos\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0\"},\"headline\":\"How to Build an AI App That Simulates Life Decisions\",\"datePublished\":\"2026-03-04T20:42:31+00:00\",\"dateModified\":\"2026-03-05T20:43:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\"},\"wordCount\":2170,\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png\",\"keywords\":[\"AI\",\"Distributed SQL\",\"Life Simulation\",\"TiDB\",\"Vector Search\"],\"articleSection\":[\"Tutorial\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\",\"url\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\",\"name\":\"AI-Powered Life Simulator: A Technical Deep Dive\",\"isPartOf\":{\"@id\":\"https:\/\/www.pingcap.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png\",\"datePublished\":\"2026-03-04T20:42:31+00:00\",\"dateModified\":\"2026-03-05T20:43:48+00:00\",\"description\":\"Learn how to build an AI-powered life simulator using Claude Opus 4.5 and TiDB to visualize branching decision outcomes in 6-24 months.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage\",\"url\":\"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png\",\"width\":3600,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.pingcap.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Build an AI App That Simulates Life Decisions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.pingcap.com\/#website\",\"url\":\"https:\/\/www.pingcap.com\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\/\/www.pingcap.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.pingcap.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.pingcap.com\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\/\/www.pingcap.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/pingcap2015\",\"https:\/\/x.com\/PingCAP\",\"https:\/\/linkedin.com\/company\/pingcap\",\"https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0\",\"name\":\"Chris Dabatos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"contentUrl\":\"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg\",\"caption\":\"Chris Dabatos\"},\"description\":\"Developer Advocate\",\"url\":\"https:\/\/www.pingcap.com\/ko\/blog\/author\/chris-dabatos\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AI-Powered Life Simulator: A Technical Deep Dive","description":"Learn how to build an AI-powered life simulator using Claude Opus 4.5 and TiDB to visualize branching decision outcomes in 6-24 months.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/","og_locale":"ko_KR","og_type":"article","og_title":"AI-Powered Life Simulator: A Technical Deep Dive","og_description":"Learn how to build an AI-powered life simulator using Claude Opus 4.5 and TiDB to visualize branching decision outcomes in 6-24 months.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2026-03-04T20:42:31+00:00","article_modified_time":"2026-03-05T20:43:48+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/static.pingcap.com\/files\/2026\/03\/05122940\/tidb_1200x627-2.png","type":"image\/png"}],"author":"Chris Dabatos","twitter_card":"summary_large_image","twitter_image":"https:\/\/static.pingcap.com\/files\/2026\/03\/05121304\/tidb_twitter_1600x900-5.png","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"Written by":"Chris Dabatos","Est. reading time":"15\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/"},"author":{"name":"Chris Dabatos","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0"},"headline":"How to Build an AI App That Simulates Life Decisions","datePublished":"2026-03-04T20:42:31+00:00","dateModified":"2026-03-05T20:43:48+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/"},"wordCount":2170,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png","keywords":["AI","Distributed SQL","Life Simulation","TiDB","Vector Search"],"articleSection":["Tutorial"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/","url":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/","name":"AI-Powered Life Simulator: A Technical Deep Dive","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png","datePublished":"2026-03-04T20:42:31+00:00","dateModified":"2026-03-05T20:43:48+00:00","description":"Learn how to build an AI-powered life simulator using Claude Opus 4.5 and TiDB to visualize branching decision outcomes in 6-24 months.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png","width":3600,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"How to Build an AI App That Simulates Life Decisions"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/4d7ecdb90868256414855723f838c9e0","name":"Chris Dabatos","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/image\/","url":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","contentUrl":"https:\/\/static.pingcap.com\/files\/2022\/10\/17234942\/avatar.jpg","caption":"Chris Dabatos"},"description":"Developer Advocate","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/chris-dabatos\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/build-ai-powered-life-simulator-embeddings-branching-tidb\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"tidb_feature_1800x600 (1)\" src=\"https:\/\/static.pingcap.com\/files\/2026\/03\/05121157\/tidb_feature_1800x600-1.png\" loading=\"lazy\" width=3600 height=1200 \/><\/div><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Tutorial<\/div><\/div><h5 class=\"card-resource__title\">How to Build an AI App That Simulates Life Decisions<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/32188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/324"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=32188"}],"version-history":[{"count":42,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/32188\/revisions"}],"predecessor-version":[{"id":32242,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/32188\/revisions\/32242"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/32222"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=32188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=32188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=32188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}