【外滩大会2026】拉香了打卡:拍一张💩,测出你的 DBTI,再隔空扔给朋友
每个人每天都会产生一份最诚实的健康报告,然后按下冲水键。
拉香了想做的,是在它被冲走之前,让百炼读懂它,再让用户愿意记住它。
参赛项目名称
拉香了(LaXiangLe)· 便便人格 DBTI
每个人都有MBTI,但你的便便,也有自己的性格。
基于 阿里云百炼 Qwen-VL 的多模态生活健康观察与社交化表达微信小程序。
拍照 → 百炼视觉分析 → Bristol 参考 → DBTI 人格 → 卡通形象 → 隔空扔💩 → 长期记录
团队 / 作者
个人开发者:@TabbyYu
产品设计 / 微信小程序 / 后端 / AI Pipeline / Prompt Engineering 独立完成。
我做了什么
30 秒看懂拉香了
用户拍一张便便照片,阿里云百炼 Qwen-VL 识别其中可观察到的形态、颜色、表面状态和图像质量。
但最终展示给用户的,不只是:
Bristol Type 4
而是:
💩 你的 DBTI:黄金守序者
SRBG · 稳定 / 规律 / 平衡
Bristol 参考:Type 3–4
便便观察:……
状态分析:……
今日建议:……
随后,这只专属卡通便便可以被:
🚀 隔空扔给朋友
好友在微信里打开后,便便会真的从屏幕外飞进来 → 旋转 → 撞击 → 爆开粒子 → 揭晓 DBTI 人格卡。
最后,每次分析自动沉淀到记录日历里,形成长期观察。
它既是一个 AI 多模态应用,也是一个人格测试、记录工具和社交玩具。
为什么我要做它?
便便形态本身是一个很日常的身体观察线索,但传统健康工具面临两个非常现实的问题:
第一,不好意思。
人们愿意记录睡眠、步数和心率,却很少主动记录排便状态。
第二,不好玩。
即使告诉用户:
今天是 Bristol Type 4。
大多数人也很难产生持续记录和分享的动力。
所以我没有继续做一个“更严肃的健康 App”。
我反过来问:
能不能把一个难以启齿、很难坚持的健康观察行为,变成一个用户愿意主动打开、甚至愿意分享给朋友的体验?
于是有了 DBTI。
DBTI:把 Bristol 留在科学底层,把人格放在娱乐层
DBTI 不是医学分类,也不会替代 Bristol。
它采用的是:
百炼视觉识别
↓
Bristol 1–7 型等可观察特征
+
生活状态 / 排便节奏
↓
DBTI 人格映射
↓
原创名字 + 卡通形象 + 中文观察 + 中文分析 + 中文建议
真实便便:16 个 DBTI 人格
通过 4 个二元维度构成 16 型人格:
| 维度 |
两种倾向 |
| 形态 |
S · Solid / F · Fluid |
| 节奏 |
R · Regular / A · Active |
| 状态 |
B · Balanced / C · Casual |
| 风格 |
G · Guardian / E · Explorer |
例如:
- 👑 SRBG · 黄金守序者 —— 稳定 / 规律 / 平衡
- 🧭 SRBE · 黄金探索者 —— 稳定 / 好奇 / 成长
- 🎨 FRBG · 流畅艺术家 —— 柔和 / 协调 / 平衡
- ⚡ FACG · 极速行动者 —— 效率 / 速度 / 变化
- 🌪️ FACE · 风暴冒险家 —— 自由 / 变化 / 探索
拍错了,也不是“报错”
这是我很喜欢的一个产品设计。
如果用户拍到的根本不是便便,系统不会粗暴地返回:
识别失败。
它仍然会得到一个完全独立、与真实便便 16 型绝不重合的彩蛋 DBTI。
例如:
真实便便人格与非便便人格使用两套完全不同的类型空间。
错误路径本身也是体验。
百炼在这个项目里做了什么?
百炼不仅是开发阶段用来“帮我写代码”的辅助工具。
它更是产品每一次核心分析都必须经过的线上推理层。
微信小程序
↓
私有临时图片
↓
CloudBase analyze-stool
↓
阿里云百炼 qwen-vl-plus
↓
结构化 JSON
↓
安全规则 + DBTI Engine
↓
结果页 / 记录 / 分享
模型配置
| 项目 |
实现 |
| 模型 |
qwen-vl-plus |
| 能力 |
通义千问视觉理解 |
| 接入 |
DashScope OpenAI Compatible API |
| temperature |
0,优先稳定与可复现 |
| 输出 |
response_format: json_object |
| 图片 |
base64 data URL 内联 |
| 校验 |
Zod Schema + 跨字段规则 |
| 超时 |
30 秒 |
| 重试 |
仅网络 / 429 / 5xx 重试 1 次 |
| 版本追踪 |
Prompt / Schema / DBTI Version 全部随记录落库 |
我刻意让:
Qwen-VL 负责“看”,确定性程序负责“演”。
AI 判断可观察特征,但 DBTI、卡通形象、人格名称和分享动画都有稳定规则。
因此同一条记录今天打开、明天打开、分享给朋友再打开:
永远是同一个人格、同一只便便。
我认为最难的不是“识别”,而是下面四件事
1. 健康场景里,模型必须学会“少说”
最大风险不是模型不会回答,而是它太愿意回答。
所以我做了三层串联安全约束:
① System Prompt
禁止疾病诊断 / 患病概率 / 处方 / 治疗方案
↓
② Zod Schema + superRefine
12 个字段强校验 + 跨字段业务约束
↓
③ 危险措辞兜底
诊断性内容直接判定 Schema Invalid
例如检测到清晰人脸时:
containsHumanFace = true
→ bristolType 必须为 null
→ 健康分析链路终止
原则非常简单:
宁可这一次 AI 不回答,也不要让一句不该出现的诊断到达用户。
2. AI 输出必须可复现
我没有让模型直接生成卡通图片。
Qwen-VL 只负责视觉理解。
之后通过:
recordId
↓
稳定哈希
↓
CartoonConfig
↓
微信 Canvas 绘制
代码中禁止用 Math.random() 决定持久化人格。
因此娱乐化不会牺牲一致性。
3. “隔空扔💩”能传播,但健康数据绝不能一起传播
用户可以把自己的 DBTI 扔给朋友。
但分享内容只有:
原创卡通形象
+
人格名字
+
安全预设文案
+
投掷动画参数
不会分享:
- 原始照片
- Bristol 类型
- 健康观察
- 风险信息
- 手机号
- OpenID
- 用户身份
分享 Token:
- 32 字节安全随机源
- SHA-256 Hash 落库
- 明文 Token 不落库
- 可主动撤回
- 源记录删除后自动失效
这让我可以同时拥有:
健康数据的私密性 + 娱乐内容的传播性。
4. AI 挂了,产品也不能完全挂
大模型是核心能力,但不是整个产品。
因此模型请求失败时:
- 不伪造分析结果;
- 已有记录仍然可查看;
- 静态人格目录和页面可以正常运行;
- 空文案使用安全静态文案降级;
- 原始图片仍会进入删除/补偿清理流程。
AI 是能力,不应该成为单点产品体验。
使用的工具
OpenWork / 百炼 CLI
本项目没有使用 OpenWork 托管运行时。
采用的是百炼CLI接入vibe coding,且应用运行时直接接入阿里云百炼 DashScope API。
换句话说:
百炼不仅仅是“开发辅助”,也是拉香了线上核心业务链路的一部分。
百炼能力 / 模型
**阿里云百炼 **qwen-vl-plus
负责:
- 图片是否可分析;
- 便便可观察视觉特征;
- Bristol 参考信息;
- 颜色 / 表面 / 形态特征;
- 图像质量;
- 中文观察;
- 中文分析;
- 中文生活方式建议。
总用时一周,全AI编程,0人工代码
由于只有一个星期时间,以及token限制,用到了多个平台的多款基础大模型包括Qwen,GPT,Hy。
其他
- 前端:微信原生小程序 + TypeScript + Canvas 2D
- 后端:TypeScript + CloudBase Serverless
- 数据库:CloudBase MySQL
- 验证:Zod + Vitest
- 部署:5 个 CloudBase 云函数
- 隐私:私有临时对象存储 + 分析后删原图
- 账号:微信登录 + 手机验证码绑定
- 安全:HMAC-SHA256、路径全匹配校验、Token Hash、限流、幂等
效果展示
① 首页:这是什么💩?
一键拍照或从相册选择。
② 百炼分析中
真实调用 Qwen-VL,不使用预制分析结果。
③ DBTI 人格揭晓
👑 黄金守序者
SRBG
稳定 · 规律 · 平衡
同时展示:
- Bristol 参考
- 便便观察;
- 状态分析;
- 3 条中文建议;
- 原创 Canvas 卡通角色。
④ 拍错了也有彩蛋人格
例如:
边界守护者
真实便便人格与非便便人格完全不重合。
⑤ 核心传播玩法:隔空扔💩
点击“隔空扔💩”
↓
微信分享
↓
朋友打开
↓
💩 从屏幕外以不同方式飞入
↓
旋转 / 粒子 / 撞击 / 降落伞
↓
砰!
↓
DBTI 人格卡揭晓
好友可以继续点击:
我也要测一个
形成完整传播闭环。
⑥ 记录与日期打卡
每次成功分析自动进入:
娱乐入口最终沉淀为长期记录。
现在,它已经不只是一个原型
| 指标 |
当前结果 |
| 代码量 |
约 14,100 行 |
| 自动化测试 |
82 个 |
| 云函数 |
5 个 |
| MySQL 数据表 |
10 张 |
| 微信小程序页面 |
14 个 |
| 自研组件 |
8 个 |
| DBTI |
32 型:16 真实便便 + 16 非便便彩蛋型 |
| 小程序包体 |
757.8 KB |
当前部署状态
✅ 后端已经真实部署到 CloudBase
5 个云函数已经上线。
🟡 微信小程序为开发版
已经完成上传与代码审核,正在微信备案阶段;可提供联系方式加入体验版体验或现场真机演示。
项目链接
- 演示录屏: 使用录屏
- 微信小程序: 拉香了打卡。
微信小程序在备案阶段,通过后会立刻上线;可提供联系方式加入体验版体验或现场真机演示。
推荐评审体验路径
扫码
→ 登录
→ “这是什么💩?”
→ 选择测试图片
→ 查看 DBTI
→ 隔空扔💩
踩坑记录
我只挑 4 个真正改变了系统设计的问题。
1. 同一个请求差点让百炼调用两遍
网络抖动时,同一 clientRequestId 可能并发进入两个请求。
如果只做数据库幂等:
数据最终只有一条,但 Qwen-VL 已经被真实调用两次了。
这不仅浪费 Token,也可能触发 429。
最后加入:
inFlight:
Map<userId:clientRequestId, Promise>
同一实例中的并发请求共享同一个 Promise。
教训:AI 应用的幂等不只是“数据库不能重复写”,还包括“昂贵模型不能重复调用”。
2. 我一开始用错了 CloudBase 数据库的心智模型
第一版按传统 SQL / 事务模式设计并发控制。
真实部署后发现 CloudBase RDB Builder 的运行时能力与原本假设不同。
于是把关键流程重新设计为:
原子条件更新 + 乐观锁 + 幂等 + 可补偿
例如浏览量更新:
UPDATE
WHERE id = ?
AND view_count = currentValue
没抢到就重试。
教训:类型能编译,不代表线上能力就真的存在。
3. 分享限流曾经可以被客户端 Session 绕过
匿名访问拿不到 IP 时,第一版会退化使用客户端提供的 Session ID。
问题是:
Session ID 是攻击者自己能改的。
轮换 Session 就能绕过限流。
最后改成:
- 能得到可信服务端标识 → 正常分桶;
- 得不到 → 进入统一 anonymous 桶,并采用更严格上限。
教训:限流 Key 只要包含客户端完全可控字段,限流基本就不存在。
4. Schema 越严,不一定体验越好
第一版非便便图片也要求完整视觉字段。
结果用户随手拍盆栽:
ANALYSIS_SCHEMA_INVALID
这在工程上很“严格”,在产品上却很糟。
最后规则变成:
安全字段必须严,描述字段可以降级。
所以:
必须严格阻断。
但:
允许 unknown。
于是“识别失败”最终变成了:
🌱 宇宙误入者
我刻意没有做的事
为了让边界比功能更可信:
- 不做医疗诊断
- 不给疾病概率
- 不推荐药物
- 不永久保留原始便便照片
- 不把健康分析分享给朋友
- 不让 AI 每次随机改变用户人格
- 暂不做支付,会员功能先显示“敬请期待”
我希望这个产品先证明一件事情:
用户愿不愿意开始记录。
再讨论后面的商业化。
最后
很多 AI 产品都在解决:
“怎么让 AI 做更多?”
拉香了开发过程中,我花更多时间解决的却是:
“怎么让 AI 只做它该做的事情?”
百炼负责看懂图片。
结构化规则负责守住边界。
DBTI 负责让结果变得愿意被记住。
隔空扔💩负责让它愿意被分享。
记录系统负责让一次玩笑最终留下长期价值。
健康管理最难的往往不是分析,而是让人愿意开始第一次。
如果一个玩笑能让人多看自己一眼,
那它就不只是个玩笑。
—— 拉香了 · 便便人格 DBTI
【外滩大会2026】拉香了打卡:拍一张💩,测出你的 DBTI,再隔空扔给朋友
参赛项目名称
拉香了(LaXiangLe)· 便便人格 DBTI
基于 阿里云百炼 Qwen-VL 的多模态生活健康观察与社交化表达微信小程序。
拍照 → 百炼视觉分析 → Bristol 参考 → DBTI 人格 → 卡通形象 → 隔空扔💩 → 长期记录
团队 / 作者
个人开发者:@TabbyYu
产品设计 / 微信小程序 / 后端 / AI Pipeline / Prompt Engineering 独立完成。
我做了什么
30 秒看懂拉香了
用户拍一张便便照片,阿里云百炼 Qwen-VL 识别其中可观察到的形态、颜色、表面状态和图像质量。
但最终展示给用户的,不只是:
而是:
随后,这只专属卡通便便可以被:
好友在微信里打开后,便便会真的从屏幕外飞进来 → 旋转 → 撞击 → 爆开粒子 → 揭晓 DBTI 人格卡。
最后,每次分析自动沉淀到记录日历里,形成长期观察。
它既是一个 AI 多模态应用,也是一个人格测试、记录工具和社交玩具。
为什么我要做它?
便便形态本身是一个很日常的身体观察线索,但传统健康工具面临两个非常现实的问题:
第一,不好意思。
人们愿意记录睡眠、步数和心率,却很少主动记录排便状态。
第二,不好玩。
即使告诉用户:
大多数人也很难产生持续记录和分享的动力。
所以我没有继续做一个“更严肃的健康 App”。
我反过来问:
于是有了 DBTI。
DBTI:把 Bristol 留在科学底层,把人格放在娱乐层
DBTI 不是医学分类,也不会替代 Bristol。
它采用的是:
真实便便:16 个 DBTI 人格
通过 4 个二元维度构成 16 型人格:
例如:
拍错了,也不是“报错”
这是我很喜欢的一个产品设计。
如果用户拍到的根本不是便便,系统不会粗暴地返回:
它仍然会得到一个完全独立、与真实便便 16 型绝不重合的彩蛋 DBTI。
例如:
真实便便人格与非便便人格使用两套完全不同的类型空间。
错误路径本身也是体验。
百炼在这个项目里做了什么?
百炼不仅是开发阶段用来“帮我写代码”的辅助工具。
它更是产品每一次核心分析都必须经过的线上推理层。
模型配置
response_format: json_object我刻意让:
AI 判断可观察特征,但 DBTI、卡通形象、人格名称和分享动画都有稳定规则。
因此同一条记录今天打开、明天打开、分享给朋友再打开:
永远是同一个人格、同一只便便。
我认为最难的不是“识别”,而是下面四件事
1. 健康场景里,模型必须学会“少说”
最大风险不是模型不会回答,而是它太愿意回答。
所以我做了三层串联安全约束:
例如检测到清晰人脸时:
原则非常简单:
2. AI 输出必须可复现
我没有让模型直接生成卡通图片。
Qwen-VL 只负责视觉理解。
之后通过:
代码中禁止用
Math.random()决定持久化人格。因此娱乐化不会牺牲一致性。
3. “隔空扔💩”能传播,但健康数据绝不能一起传播
用户可以把自己的 DBTI 扔给朋友。
但分享内容只有:
不会分享:
分享 Token:
这让我可以同时拥有:
4. AI 挂了,产品也不能完全挂
大模型是核心能力,但不是整个产品。
因此模型请求失败时:
AI 是能力,不应该成为单点产品体验。
使用的工具
OpenWork / 百炼 CLI
本项目没有使用 OpenWork 托管运行时。
采用的是百炼CLI接入vibe coding,且应用运行时直接接入阿里云百炼 DashScope API。
换句话说:
百炼能力 / 模型
**阿里云百炼 **
qwen-vl-plus负责:
总用时一周,全AI编程,0人工代码
由于只有一个星期时间,以及token限制,用到了多个平台的多款基础大模型包括Qwen,GPT,Hy。
其他
效果展示
① 首页:这是什么💩?
一键拍照或从相册选择。
② 百炼分析中
真实调用 Qwen-VL,不使用预制分析结果。
③ DBTI 人格揭晓
同时展示:
④ 拍错了也有彩蛋人格
例如:
真实便便人格与非便便人格完全不重合。
⑤ 核心传播玩法:隔空扔💩
好友可以继续点击:
形成完整传播闭环。
⑥ 记录与日期打卡
每次成功分析自动进入:
娱乐入口最终沉淀为长期记录。
现在,它已经不只是一个原型
当前部署状态
✅ 后端已经真实部署到 CloudBase
5 个云函数已经上线。
🟡 微信小程序为开发版
已经完成上传与代码审核,正在微信备案阶段;可提供联系方式加入体验版体验或现场真机演示。
项目链接
微信小程序在备案阶段,通过后会立刻上线;可提供联系方式加入体验版体验或现场真机演示。
推荐评审体验路径
踩坑记录
我只挑 4 个真正改变了系统设计的问题。
1. 同一个请求差点让百炼调用两遍
网络抖动时,同一
clientRequestId可能并发进入两个请求。如果只做数据库幂等:
这不仅浪费 Token,也可能触发 429。
最后加入:
同一实例中的并发请求共享同一个 Promise。
教训:AI 应用的幂等不只是“数据库不能重复写”,还包括“昂贵模型不能重复调用”。
2. 我一开始用错了 CloudBase 数据库的心智模型
第一版按传统 SQL / 事务模式设计并发控制。
真实部署后发现 CloudBase RDB Builder 的运行时能力与原本假设不同。
于是把关键流程重新设计为:
例如浏览量更新:
没抢到就重试。
教训:类型能编译,不代表线上能力就真的存在。
3. 分享限流曾经可以被客户端 Session 绕过
匿名访问拿不到 IP 时,第一版会退化使用客户端提供的 Session ID。
问题是:
轮换 Session 就能绕过限流。
最后改成:
教训:限流 Key 只要包含客户端完全可控字段,限流基本就不存在。
4. Schema 越严,不一定体验越好
第一版非便便图片也要求完整视觉字段。
结果用户随手拍盆栽:
这在工程上很“严格”,在产品上却很糟。
最后规则变成:
所以:
必须严格阻断。
但:
允许
unknown。于是“识别失败”最终变成了:
我刻意没有做的事
为了让边界比功能更可信:
我希望这个产品先证明一件事情:
再讨论后面的商业化。
最后
很多 AI 产品都在解决:
拉香了开发过程中,我花更多时间解决的却是:
百炼负责看懂图片。
结构化规则负责守住边界。
DBTI 负责让结果变得愿意被记住。
隔空扔💩负责让它愿意被分享。
记录系统负责让一次玩笑最终留下长期价值。
—— 拉香了 · 便便人格 DBTI