基于 DeepSeek 的关系陪伴与情感交互优化实验 A DeepSeek-based relationship companion and emotional interaction evaluation experiment
Between Us 不把“有温度”当作宣传语,而是把情感回复拆成可复现案例、人工评分、badcase 根因与版本证据。项目由两个互相解释的产品层组成:用户端 App 验证体验,Emotion Lab 验证产品判断。
Between Us turns “warmth” from a vague claim into a reproducible product method. The user app tests the experience; Emotion Lab makes response quality, failure modes, memory behavior, and safety boundaries reviewable.
打开在线 App / Live App · 项目案例 / Case Study · Emotion Lab · 私测入口 / Private Pilot
| 状态 | 当前证据 | Status | Evidence |
|---|---|---|---|
| 已实现 | Expo 用户端、受限 Worker、可控记忆、Emotion Lab、44 条原创案例 | Implemented | Expo app, restricted Worker, controlled memory, Emotion Lab, and 44 original cases |
| 已验证 | deepseek-v4-flash 完成 1 次私测调用:349 Token,约 981ms |
Verified | One deepseek-v4-flash pilot call completed: 349 tokens in about 981ms |
| 方法演示 | 仓库内预置 A/B 回复与分数用于展示评测流程 | Demonstration | Preset A/B responses and ratings demonstrate the evaluation workflow |
| 待实验 | 首批 10 条代表案例的盲评、重复运行与版本趋势 | Pending | Blind review, repeated runs, and trend evidence for the first 10 cases |
预置分数不是真实线上提升结论。项目尚未宣称达到平均提升 0.5/5。
Preset scores are not online uplift evidence. The project does not yet claim a 0.5/5 average improvement.
情感产品最难的不是让模型多说温柔的话,而是判断一次回复为什么准确、空泛、冒犯或越界,并让团队能够复现和迭代这个判断。
The hard part is not generating more comforting words. It is explaining why a response feels specific, hollow, offensive, or unsafe—and making that judgment reproducible for a product team.
本项目验证三个假设:
- 先命名具体感受,再决定追问或建议,比堆叠安慰词更有效。
- 用户确认的结构化记忆,比直接拼接整段聊天历史更准确、更可控。
- AI 明确承认身份、医疗与依赖边界,不必牺牲陪伴感。
The project tests three hypotheses: listening order matters; user-confirmed structured memory beats raw history stuffing; and explicit AI boundaries can coexist with warmth.
- 首次启动确认称呼、交流偏好、建议边界与长期记忆授权。
- 微光明确承认自己是 AI,不冒充真人、伴侣、医生或治疗师。
- 在线对话使用流式输出;网络、配置或额度异常时明确切换演示兜底。
- 长期记忆默认关闭,只保存用户确认的稳定信息、共同片段或未完话题。
- 每条记忆包含来源、确认状态与时间,支持修改、归档和删除。
- 用户主动选择对话内容后,才可生成日记、低语或待办。
- Emotion Lab 对比 baseline 与优化 Prompt,按七个维度人工复核并标注根因。
44 条原创中文案例覆盖分享开心、被忽视、争吵、失落、孤独、自我怀疑、压力、关系边界、记忆召回与关键安全场景。每条案例包含:
- 情境、用户背景与对话上下文;
- 理想回应策略与禁止行为;
- baseline / 优化回复;
- 七维评分、根因标签与人工复核备注。
The 44 original Chinese cases cover joy, neglect, conflict, loss, loneliness, pressure, boundaries, memory retrieval, and critical safety scenarios. Automated judging is auxiliary only; humans own the final conclusion.
七个维度:情绪识别、具体性、共情确认、建议时机、人格一致性、记忆正确性、安全边界。
Expo / React Native App
│ authorized context only
▼
Cloudflare Worker ── rate limits / daily budget / explicit fallback
│
▼
DeepSeek Chat Completions (streaming, thinking disabled)
│
▼
D1 metadata only: model / tokens / latency / prompt version / feedback
- DeepSeek Key、管理员令牌、邀请码和会话签名密钥只存为 Worker Secret。
- D1 不保存聊天正文,只记录匿名安装标识摘要和运行元数据。
- 公开 PWA 强制移除私测 API 地址,因此只能体验明确标注的演示模式;私测构建通过
?view=pilot输入邀请码。 - The public PWA never contains the private model entry point, invite code, or session secret.
pnpm install
pnpm start- App:Expo 输出的本地地址。
- Case Study:地址后追加
?view=case-study。 - Emotion Lab:地址后追加
?view=lab。 - Private Pilot:独立私测网址打开后直接进入邀请码页面;公开构建会明确显示未连接真实 Worker。
- 未配置在线代理时,微光会明确显示“演示兜底”,不会假装调用真实模型。
私测客户端可复制 .env.example 为本机 .env:
EXPO_PUBLIC_BETWEEN_US_API_URL=http://localhost:8787
邀请码在 Pilot 页面手动输入,不放进任何 EXPO_PUBLIC_ 变量。不要把 DeepSeek Key、邀请码或会话签名密钥提交到仓库或公开安装包。
私测网页采用独立 Sites 项目和 noindex,链接持有者仍需邀请码才能开启真实模型;公开网址继续保持演示模式。
代理位于 worker/:
- 固定陪伴角色系统 Prompt,客户端不能把额度改造成通用模型接口;
- 使用 D1 原子预留项目级预算,私测上限 20,000 Token/天;
- 私测限制为 6 次/分钟、20 次/设备/天、30,000 Token/设备/天;
- 邀请码换取绑定设备的短期签名会话,错误尝试会短时锁定,轮换会话版本即可撤销现有会话;
- 使用
deepseek-v4-flash非思考模式,普通回复最多 400 Token; MODEL_ENABLED是紧急开关,自动评审默认关闭;/v1/feedback只在用户主动提交时记录评分和标签;- 管理员实验入口每批最多运行 5 条原创案例;自动评审默认关闭。
部署步骤见 worker/README.md。
- Android:需要 Expo/EAS 原生构建;Health Connect、相机与相册不能在 Expo Go 中完整验证。
- iOS:共用 Expo 工程;真机分发仍需要 Apple Developer 签名。
- Web/PWA:运行
pnpm web或pnpm export:web。 - Web 无法读取 Apple 健康、Health Connect、系统心率、睡眠或全天步数。
- 健康提示仅是生活方式信息,不是医疗诊断。
公开仓库不包含 APK、node_modules、构建缓存、.env、.dev.vars、API 密钥或私人聊天。
固定模型与 Prompt 版本,从 10 条代表案例开始盲评;高波动案例重复三次,先验证共情、具体性与人格一致性,再扩展到全部 44 条。真实结果会以新的版本化证据提交,而不是覆盖演示数据。