这是"周末挑战:狗狗之日"(Weekend Challenge: Dog Days Edition)的参赛作品。 **Dog Court** 是一款带有讽刺意味、全程面无表情的法庭风格 Web 应用:你的狗将因一桩荒谬的"家务罪"被推上被告席——比如吃掉一整只左脚鞋,却对右脚鞋无动于衷;在 Zoom 通话时用身体撞击咖啡桌;在花坛里刨出一个大坑;或者对着吸尘器连续狂吠 11 分钟。 输入或点选一项"罪行",按下 ⚖️ "File the Case" 立案,AI 生成的法庭大戏便会实时上演: 检方陈述、辩护反驳、法官裁决……全部以冷面滑稽的法律剧口吻展开。 ### 为什么做这个? 构思 Dog Days 挑战时,我发现几乎所有狗狗项目都默认走温情路线:救援致敬、幼犬训练日志、领养计算器。我偏要反其道而行之——用 100% 面无表情的法律剧严肃感,去审理一件完全鸡毛蒜皮的小事。笑点恰恰来自这种法庭般的正经八百。 **在线体验:** https://weekend-challenge-dog-days-edition.vercel.app/ **GitHub 仓库:** https://github.com/pawarshivamd/Weekend-Challenge-Dog-Days-Edition ### 技术亮点:动态证据图标 + Gemini JSON Schema 约束 Dog Court 如何把证据图标动态匹配到"罪行",并用 JSON Schema 约束 Gemini 的输出?核心代码如下: ```javascript // 17 个关键词族,覆盖 100+ 个家务罪同义词,映射到动态证据图标 const exhibitMap = [ { keys: ['shoe', 'loafer', 'sneaker', 'boot', 'sandal'], icon: '' }, { keys: ['chicken', 'turkey', 'meat', 'steak', 'sausage'], icon: '' }, { keys: ['sock'], icon: '' }, { keys: ['vacuum'], icon: '' }, { keys: ['table', 'coffee table', 'furniture'], icon: '️' }, { keys: ['hole', 'garden', 'flower', 'dig', 'yard'], icon: '️' }, { keys: ['trash', 'garbage', 'bin'], icon: '️' } ]; // Gemini 系统提示词 Schema const systemPrompt = `You are a courtroom script generator for a satirical comedy web app called "Dog Court." Write in the deadpan, self-serious tone of a legal drama — NOT a sentimental dog story. Respond with ONLY valid JSON: { "case_number": "short case number like DC-2026-114", "charge": "one formal legal-sounding charge line", "prosecution_arg": "the prosecutor's opening argument", "defense_arg": "the defense attorney's rebuttal", "verdict": "GUILTY or NOT GUILTY", "sentence": "the judge's final ruling" }` ``` 这套设计让 AI 的输出既保持结构稳定,又充满戏剧张力。

打开网易新闻 查看精彩图片