Buddy 伴侣系统
Claude Code 内置的 Tamagotchi 风格伴侣系统 —— 确定性抽卡、ASCII 精灵、五维属性与灵魂描述
Buddy 系统概述
终端里的电子宠物
Claude Code 内置了一个 Tamagotchi 风格的伴侣系统 (Buddy System)。每个用户在首次使用时,都会获得一个独一无二的伙伴精灵。 这个系统不仅仅是装饰——它展示了确定性计算、过程化生成和 AI 意图理解的巧妙结合。
整个系统建立在几项核心机制之上:确定性抽卡 确保每个用户基于其 ID 获得唯一的伙伴;18 个物种 横跨五个稀有度等级;1% 闪光几率 独立于稀有度的特殊变体; 以及由 Claude 自身生成 的灵魂描述。
基于用户 ID 的伪随机数生成器,保证唯一性
横跨五个稀有度等级的独特伙伴
独立于稀有度的特殊闪光变体
过程化生成的五维伙伴属性
Buddy 系统架构
确定性抽卡系统
基于 Mulberry32 的伪随机数生成
Buddy 系统的核心是一个 确定性随机数生成器(Deterministic PRNG)。与 JavaScript 内置的 Math.random() 不同,Mulberry32 算法使用固定种子,确保相同的输入始终产生相同的输出。 这意味着每个用户 ID 都会对应一个唯一的、可复现的伙伴。
为什么选择确定性而非真随机?因为确定性保证了公平性和可验证性—— 每个用户的伙伴由其 ID 唯一决定,不存在重复或遗漏,也不需要服务器端的状态存储。
Mulberry32 PRNG 算法流程
抽卡流程:从用户 ID 到伙伴诞生
物种与稀有度
18 个物种,五个稀有度等级
Buddy 系统包含 18 个独特物种,每个物种都属于五个稀有度等级之一。稀有度不仅影响获取概率, 还决定了伙伴的视觉特效和动画复杂度。此外,任何稀有度的伙伴都有 1% 的独立几率 成为闪光(Shiny)变体,拥有独特的外观颜色。
稀有度概率分布
最常见的伙伴类型,拥有基础的外观和简单的 ASCII 精灵动画
小史莱姆、像素猫、代码虫
较少见的伙伴,拥有独特的外观设计和更丰富的表情
水晶狐、数据龙、量子兔
稀有的伙伴,拥有特殊动画效果和独特的粒子特效
虚空凤凰、时间蛇、混沌狼
极其稀有的伙伴,拥有华丽的视觉效果和专属的动画序列
宇宙鲸、永恒树、星辰鹰
独立于稀有度的特殊变体,拥有独特的闪光色彩和光芒效果
任何物种都可能拥有闪光形态
18 个物种稀有度分类
五维属性系统
过程化生成的伙伴个性
每个伙伴拥有 5 个过程化生成的属性,这些属性由同一个 PRNG 序列决定,因此完全确定性且唯一。 属性值范围从 0 到 100,不仅影响伙伴的灵魂描述, 还会微妙地影响 ASCII 精灵的表情和动画节奏。
五维属性生成流程
伙伴的调试直觉。高数值意味着它能快速定位代码中的问题,是 Bug 猎手的最佳搭档。
伙伴的耐心阈值。高耐心的伙伴在长编译过程中保持冷静,低耐心的伙伴会表现得焦躁不安。
伙伴的混沌程度。高混乱值的伙伴不可预测,可能产生意想不到的创意建议或古怪行为。
伙伴的知识深度。高智慧的伙伴理解复杂的架构模式和设计哲学,是资深开发者的精神伙伴。
伙伴的讽刺天赋。高毒舌值的伙伴会在你写出 bug 时毫不留情地吐槽,但说的都是实话。
属性值 → 性格特征映射
ASCII Art 精灵系统
终端中的像素艺术与灵魂描述
每个伙伴都有独特的 ASCII art 外观,这些精灵由预定义的字符画帧组成,在终端中以动画形式展示。 动画帧通过时间间隔切换,让伙伴看起来栩栩如生。 更独特的是,Claude 会根据伙伴的物种、稀有度和五维属性, 生成一段专属的 灵魂描述,赋予每个伙伴独特的性格和故事。
╭─────────╮
│ ^ ^ │
│ o │
│ \___/ │
╰──┬───┬──╯
│ │
╭──┴───┴──╮
│ ~jiggle~ │
╰─────────╯ ╭─────────╮
│ - - │
│ O │
│ /---\ │
╰──┬───┬──╯
│ │
╭──┴───┴──╮
│ ~wobble~ │
╰─────────╯精灵动画系统
灵魂描述生成流程
设计哲学
为什么在一个 CLI 工具里放 Tamagotchi?
在一个严肃的命令行工具中加入电子宠物系统,乍看之下似乎不合常理。 但这个设计体现了 Claude Code 团队对开发者体验的深层思考—— 工具不仅是生产力的延伸,也可以是情感的寄托。
情感连接
增加趣味性与归属感
开发者每天在终端中度过大量时间。一个独特的伙伴精灵能为这段时光增添温暖和趣味,让工具从冷冰冰的命令行变成有个性的工作伙伴。每个用户的伙伴都是独一无二的,这种独特性增强了用户与工具之间的情感纽带。
公平保证
确定性算法确保公正
传统的随机抽卡系统依赖服务器端状态,容易引发公平性质疑。Buddy 系统使用确定性 PRNG,每个用户的伙伴完全由其 ID 决定——不需要服务器存储,不存在重复抽取,也不可能出现暗箱操作。代码就是公平的保证。
能力展示
AI 技术的创意窗口
Buddy 系统是一个精心设计的技术展示窗口。它展示了确定性计算、过程化生成和 AI 意图理解的融合——从 PRNG 算法到属性生成,再到 Claude 自身生成的灵魂描述。每一层都体现了 Claude Code 的工程能力和创意思维。
Buddy 完整生成流程
Gacha 概率分布
抽卡概率一目了然
💡 Shiny 判定独立于稀有度:任何稀有度的伙伴都有额外 1% 几率成为闪光变体。理论上 Mythic + Shiny 的概率为 0.01%。
物种图鉴
18 个伙伴物种一览
最基础的伙伴,Q弹的身体总是蹦蹦跳跳
用喵星人的方式帮你调试代码
对 Bug 有着天然的亲和力
慢而稳健,永不崩溃
在代码间嗡嗡飞舞寻找线索
拥有水晶般的洞察力,能看穿逻辑漏洞
守护数据结构的远古巨龙
同时存在于多个分支中
沿着电路板蜿蜒爬行
只唱 0 和 1 的歌
从编译错误的灰烬中浴火重生
在混乱中找到秩序的独狼
盘绕在时间线上吞噬 Bug
在暗处默默优化你的代码
在代码宇宙中遨游的巨兽
根植于架构深处,永不凋零
俯瞰整个项目的鹰眼视角
传说中由第一行代码诞生的存在
PRNG 算法深入
Mulberry32 位运算细节
Mulberry32 逐步位运算
function mulberry32(seed: number) {
// Step 1: 加上魔数
let t = seed + 0x6D2B79F5;
// Step 2: 第一次 imul 变换
t = Math.imul(t ^ (t >>> 15), t | 1);
// Step 3: XOR + 第二次 imul
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
// Step 4: 最终混合 + 归一化
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
}
// 使用:基于用户 ID 生成确定性序列
const seed = hashCode(userId);
const rng = () => mulberry32(seed++);
// 物种、稀有度、属性全部由 rng() 序列决定