---
title: lingxi-ai-roleplay
canonical_url: "https://www.modelscope.cn/studios/Mryuzhe/lingxi-ai-roleplay"
md_url: "https://www.modelscope.cn/studios/Mryuzhe/lingxi-ai-roleplay.md"
repository: Mryuzhe/lingxi-ai-roleplay
chinese_name: "灵犀对练 · AI情景特训舱"
last_updated: 2026-09-29
sdk_type: docker
downloads: 0
stars: 0
---

# lingxi-ai-roleplay

> lingxi-ai-roleplay - Mryuzhe 在 ModelScope 创建的在线 Demo。和大模型智能体演对手戏：情景对练 + 可观测智能体面板 + 多维评分复盘。LayaAir × ModelScope。

Mryuzhe/lingxi-ai-roleplay 是 ModelScope 魔搭社区上的在线可交互 Demo（创空间），基于 docker 构建，中文名为「灵犀对练 · AI情景特训舱」。

- **Repository**: Mryuzhe/lingxi-ai-roleplay
- **SDK**: docker
- **Downloads**: 0
- **Stars**: 0
- **Last updated**: 2026-09-29

Source: https://www.modelscope.cn/studios/Mryuzhe/lingxi-ai-roleplay

---

# 灵犀对练 · AI 情景特训舱

> 和大模型智能体「演对手戏」，把关键对话练成本能。
> **2026 iCAN 大学生创新创业大赛 · AI应用创新挑战赛** 参赛作品

**评委入口**：[在线体验（含一键测试账户）与本地部署指南](docs/评委指南-部署与体验.md)，
一键登录链接：`/judge?key=ican2026-judge`（详见指南）。

用 **Laya System-1 决策引擎** 驱动对手的每一步决策，用大模型只负责把决策翻译成人话，
在 **LayaAir 2.12.1** 构建的 2D 情景舞台上完成多轮自由对话、实时决策可视化与结构化复盘。

## 🧠 双系统架构：我们把 Laya 用在了它真正做对的地方

市面上的 AI 对练产品，几乎都是「把一段提示词丢给大模型，等它返回 JSON」。
决策过程是个黑盒，每轮要等 1~2 秒，还随时可能跑偏。

我们原本想让 Laya 承担全部决策，但**先做了一轮能力边界评测**，结果改变了设计：

| 判断任务 | 粒度 | 实测准确率 | 随机基线 | 结论 |
|---|---|---|---|---|
| 消息情绪正负 | 粗 | 72.2% | 33.3% | ✅ 可用 |
| 官方 guard / moderation 工作流 | 粗 | **77.8%** | 50.0% | ✅ 可用 |
| 场景分类（6 类） | 细 | 38.9% | 16.7% | ❌ 接近随机 |
| 意图识别（5 类） | 细 | 33.3% | 20.0% | ❌ 接近随机 |
| 语气自信 / 退缩 | 细 | 35.0% | 33.3% | ❌ 接近随机 |

（评测脚本 `test/daily_eval.py`、`test/eval_coarse_questions.py` 随仓库交付，可复现）

**所以最终分工是按实测结果定的：**

| | System 1 · Laya | System 2 · 大模型 |
|---|---|---|
| 职责 | **实时安全护栏**（越权诱导 / 指令注入 / 隐私泄露 / 内容风险 / 人身攻击 / 威胁信号） | 对手策略决策 · 情绪判断 · 台词表达 · 本轮评分 |
| 依据 | Laya 官方训练过的工作流，实测 77.8% | 需要深度理解，Laya 零样本做不了 |
| 延迟 | **约 280–400ms**（纯 CPU，本地） | 1~2s |
| 成本 | **¥0**（自托管，不消耗任何 API 额度） | 按 token 计费 |

护栏每轮都在跑，命中时会把约束写进表达层提示词——这是一个真正在工作的安全层，
而不是事后补一句免责声明。

**决策层的价值，一句话说清**：它把「用户这轮想干什么、说得安不安全」从大模型的黑盒里拿出来，
变成一次 **283ms（中位，本机 CPU）** 的本地前向——比把判断也交给生成式 agent core（每轮等 1–2s
的完整生成）快一个数量级，输出的是**校准概率**而不是一次采样。真实、可复现的判断喂给大模型，
大模型只需要干它擅长的表达；用户意图判断更快、更稳、更便宜。

> **词表兜底层（`server/lexicon_guard.py`）**：能力边界评测发现 multilingual checkpoint
> 对中文俚语脏话存在盲区（「我操你马」→ 0.001，英文脏话同批 → 0.84）。我们在 Laya
> 之上叠加一层确定性正则词表：命中已知盲区时把对应护栏项
> 强制抬到 ≥0.9，面板同步显示「词表兜底×N」。基于 102 条样本的评测：六项宏平均
> 一致率 86.3% → **90.4%**（指令注入漏检 80%→20%），36 条干净内容误报保持 0；
> 单测 54 项全绿，评测复现：`test/eval_guard_v2.py`——模型主判 + 规则兜底，各干各擅长的事。

> **实测踩坑**：给 Laya 传额外上下文（对手角色 / 上一句 / 轮次）会让护栏误报暴涨
> （指令注入 0.92、隐私泄露 0.94），且 token 超过模型 1024 上限被静默截断。
> 因此 state **只传 `prompt` / `post` 两个字段**（官方工作流约定的字段名），
> 上下文用量稳定在 500–650 token。

## ✨ 其它特性

- **🔑 魔搭账号登录**：OAuth 一键授权 / 访问令牌直登；访客也有少量免费额度
- **🧠 可观测的智能体运行面板**：「接收请求 → Laya 安全护栏 → 反馈结果」全链路可视化，
  含 6 项护栏概率、路由模型、护栏与表达各自的延迟、上下文 token 数
- **🎭 2D 角色立绘**：表情、口型、眨眼、呼吸动画随决策结果实时变化（纯代码绘制，零外部资源），
  三个场景的角色发型与着装各不相同
- **📊 多维评分复盘报告**：雷达图 + 五维评分 + 用户原话引用 + 可执行改进建议，
  且报告会参考护栏的逐轮记录（尤其是告警轮次），不是让大模型凭空编
- **📈 用户与对练数据后台**（`/admin`）
- **🔊 半双工语音对练（已上线）**：AI 回复本地 TTS 朗读；按住说话录音上传，
  SenseVoice 服务端转写后进入决策链路（首次使用引擎懒加载约 1–2 分钟）
- **😊 摄像头表情参考（已上线，可选）**：face-api.js 全程本地识别，你此刻的表情作为
  **情绪上下文注入表达层提示词**——对手不只听你说什么，还参考你的表情状态回应；
  同时进复盘报告「应变抗压」维度（标注科学关联有限）。可一键关闭，拒绝授权静默降级
- **🎙️ 真·全双工语音（已上线，实验）**：服务端 WebSocket 中转接入百炼
  qwen3.8-omni-flash-realtime（云端推理，无需 GPU）——麦克风实时对答、可打断；
  护栏约束写进会话指令、确定性词表在服务端复核语音转写，命中即取消接招回应并
  注入约束重新生成（本地端到端实测拦截通过）。创空间 Secrets 配置
  `DASHSCOPE_API_KEY` 后启用，未配置时开关置灰、主链路不受影响，详见
  [docs/qwen3.8-omni-接入方案.md](docs/qwen3.8-omni-接入方案.md)

## ⚔️ 和主流方案比：不是更好的聊天机器人，是不同的架构

| 方案类型 | 意图 / 安全判断 | 语音 | 场景 | 成本 |
|---|---|---|---|---|
| 通用大模型直出（豆包 / Kimi 角色扮演） | 意图判断靠生成，秒级、不可解释，**无内容安全层** | 延迟高、多为单向 | 单一人设靠提示词换场景 | 按 token 计费 |
| 题库型 AI 面试（牛客AI / 面试猫等） | 预设题库追问浅（第三方横评平均 ≤1 层），无安全护栏 | 以文字为主 | 多为技术面试单场景 | 免费额度 + 付费 |
| 海外训练工具（Huru / Yoodli） | 微表情分析是特色，意图判断仍是生成式 | 语音分析强、**无中文** | 面试单场景、偏美国文化 | $9.99/月 量级 |
| **灵犀对练（本作品）** | **本地护栏 283ms** 校准概率；词表兜底后宏平均 **90.4%**、注入漏检 **20%**、干净内容零误报；**命中拦当前轮** | 全双工（可打断）+ 半双工兜底 + 表情情绪上下文 | 三场景共用一套决策引擎 | CPU 免费实例，护栏 **¥0** |

> 口径说明：竞品行取自 2026 年第三方横评的**定性结论**（可信度 B/C 级，只作定性引用、不引用其打分）；
> 本作品行全部为自测数据，评测脚本（`test/eval_guard_v2.py`、`test/laya_tune.py`）随仓库可复现。

## 🔁 四级降级：任何环境都能演示

| 模式 | 触发条件 | 行为 |
|---|---|---|
| `laya+llm` | 护栏与大模型都可用 | 主力模式 |
| `laya+template` | 护栏在、大模型不可用 | 护栏照常工作，台词改用场景内置模板——**完全本地** |
| `llm` | 护栏不可用 | 退回「大模型一次输出 JSON」链路 |
| `offline` | 两者都不可用 | 内置剧本兜底，保证可完整演示 |

## 🎯 三个内置情景

| 情景 | 你扮演 | 对手 | 评估维度 |
|---|---|---|---|
| 校招终面 · 后端工程师 | 候选人 | 技术VP 陈总监 | 表达逻辑 / 专业深度 / 应变抗压 / 岗位匹配 / 职业素养 |
| 心理咨询 · 初次会谈 | 咨询师 | 来访者 小雨 | 共情回应 / 倾听提问 / 关系建立 / 风险评估 / 专业边界 |
| 商务谈判 · 采购议价 | SaaS销售 | 采购总监 王总 | 目标坚持 / 价值呈现 / 让步策略 / 异议处理 / 促成推进 |

**为什么是这三个场景**：面试几乎是每个人的必经关，却几乎没有低成本的陪练；
心理困扰日益普遍、专业服务供给缺口大，咨询师实训与公众练习场景随之扩大；
销售新手第一次面对强势采购，往往就是真实订单——学费应该在模拟里交。
三个都是「高频、高压、真人陪练贵且不可控」的典型对话。

## 🚀 使用方式

1. **打开即玩**：进入应用 → 首页「🔑 魔搭账号登录」一键授权，或粘贴访问令牌登录（[获取令牌](https://www.modelscope.cn/my/myaccesstoken)）。
2. **免登录试玩**：不登录也可开始对练（服务端提供少量免费额度）。
3. **录制自动演示**：URL 参数 `#scenario=interview&auto=4` 可自动完成一场对练并生成报告。

## 🔧 技术栈

- **决策引擎**：Laya `0.3.20`（`pip install laya`，Apache-2.0），`multilingual` checkpoint，CPU 推理
- **表达模型**：魔搭 ModelScope API-Inference（OpenAI 兼容，服务端代理）
- **渲染**：LayaAir 2.12.1（代码化 2D 场景 + 程序化纹理，无外部资源文件）
- **后端**：FastAPI + SQLite（用户 / 对练记录 / 限额 / 管理看板），机密全部来自创空间 Secrets

## 📁 目录结构

```
├── index.html              # 入口（引擎与脚本加载顺序在此声明）
├── libs/                   # LayaAir 2.12.1 官方引擎库
├── js/
│   ├── config.js           # 应用配置 / 情绪系统 / 对练情景库 / Laya 决策问题集
│   ├── ai.js               # 决策链路：Laya 决策 → 大模型表达 + 四级降级
│   ├── scene2d.js          # 2D 情景舞台 + 角色立绘（按场景换发型与着装）
│   ├── ui.js               # 全部 2D 界面 + 决策概率面板
│   └── main.js             # 启动与状态机 + 记录上报
├── server/
│   ├── app.py              # FastAPI（登录 / OAuth / 决策 / 模型代理 / 记录 / 管理）
│   ├── laya_engine.py      # Laya 护栏封装（单例 Router / 预热 / 校验 / 降级）
│   ├── lexicon_guard.py    # 词表兜底层：确定性正则补中文俚语盲区（精度优先，33 项单测）
│   ├── prefetch_laya.py    # 构建期预取权重
│   ├── db.py               # SQLite 存储层
│   └── admin.html          # 管理后台（/admin）
├── test/
│   ├── laya_probe.py       # 决策模型可用性探针
│   └── laya_tune.py        # 问法调优探针（问题数 × state 长度 → 延迟/置信度）
├── Dockerfile / requirements.txt
└── data/                   # 运行时自动创建（SQLite）
```

## ⚠️ 已知限制（如实说明）

- **上下文仅 1024 token**：`laya-multilingual` 的默认上限，超出会被**静默截断**。
  因此每轮只把「对手上一句 + 用户本轮发言 + 轮次」送进决策层，不送完整对话历史。
- **零样本精度有限**：Laya 官方文档明确说明其基座模型在 typed-decisions 上是
  「快速可专用的基座，而非零样本决策引擎」，且 `score` 是最弱的原语。
  本项目实测也确认了这一点，因此：
  - 面板**如实展示置信度**，低置信时标注「偏低，仅供参考」；
  - 好感度变化按置信度**压缩幅度**——拿不准的判断不该大幅改动仪表盘；
  - 复盘报告以决策层的逐轮记录作为**证据**，而不是唯一依据。
- **CPU 推理约 280–400ms（中位 283ms）/ 轮**：足以支撑对话节奏，但明显慢于 GPU 上的 33ms。

## ⚠️ 声明

本产品为 AI 模拟训练环境，角色反馈由大模型生成，不构成任何专业建议（医疗、心理、法律、投资等）。

---

*Powered by Laya × LayaAir × ModelScope · 灵犀对练 v2.1*
