内容
# 社交技能 AI 教练
**与多智能体 AI 教练练习真实社交场景 — 分析、获取建议、角色扮演和反思 — 随时,随地,仅需 2~6 美元/月。**
[](https://social-skill-ai-coach.vercel.app)
[](https://www.npmjs.com/package/social-skills-coach-mcp)
[](https://github.com/john-data-chen/social-skill-ai-coach/actions/workflows/ci.yml)
[](https://codecov.io/gh/john-data-chen/social-skill-ai-coach)
[](https://sonarcloud.io/summary/new_code?id=john-data-chen_social-skill-ai-coach)
[](https://opensource.org/licenses/MIT)
🔗 **[Live Demo](https://social-skill-ai-coach.vercel.app)** · 🎬 **视频讲解(进行中)** · 📦 **[npm: `social-skills-coach-mcp`](https://www.npmjs.com/package/social-skills-coach-mcp)** · 🇹🇼 **[繁体中文](./README-cht.md)**
> ⚠️ [Kaggle AI Agents Capstone](https://www.kaggle.com/competitions/vibecoding-agents-capstone-project) 的概念验证(MVP),仅供评审和研究使用。**它不能取代持牌心理学家或治疗师。** 完整的免责声明在底部。
<p align="center">
<img src="./public/images/cover.png" alt="社交技能 AI 教练 — 一个口袋里的社交教练" width="360" />
</p>
---
## 问题
对于高功能自闭症或阿斯伯格综合征患者,社交技能主要通过**实践**学习 — 然而结构化的实践机会稀少且昂贵:
- **成本。** 像 [PEERS](https://www.semel.ucla.edu/peers/) 这样的循证计划运行 **$2,800–$3,600**,为期 14-16 周,课程内容累计 — 缺席一节课会影响后续课程。许多家庭无法承受这样的费用,或者由于自尊心而不愿尝试。
- **没有即时反馈。** 即使在课程结束后,也没有教练在您身边指导真实的对话。人们很少告诉您您做错了什么 — 他们只是默默地疏远您。突然的干扰(噪音、惊讶)可能会让您大脑空白,无法回忆任何技巧。
- **开始得太晚的代价。** 一旦社交习惯形成,成年后就会被排除在外 — 而很少有成年人愿意坐在年轻学生的课堂上重新学习基础知识。
该项目尽可能地降低了开始的门槛:一个私人、无偏见的地方,随时都可以练习。
## 为什么使用智能体?
单个聊天机器人会模糊四个非常不同的工作。辅导自然是一个**专业流水线**,因此应用程序运行一个智能体执行每个工作 — 通过确定性阶段路由器推进到流水线中,具有 RAG 的 LLM 协调员使教练基于课程:
| 阶段 | 智能体 | 工作 |
| :---- | :------------- | :--------------------------------------------------------------------------------------------------------- |
| 1 | **分析器** | 构建情境(谁/什么/在哪里,渠道,场景类型,目标) — 尚未提供建议。 |
| 2 | **教练** | 提供具体的、基于情境的建议 — 仅基于为此案例选择的课程内容。 |
| 3 | **角色扮演** | 扮演对方角色,以便您可以练习,根据您的社交技能水平做出现实的反应。 |
| 4 | **反思** | 根据评分标准审查角色扮演记录,并返回结构化的、分维度评估。 |
<p align="center">
<img src="./public/images/analyzer.png" alt="分析器将模糊的情况转化为清晰的结构" width="320" />
<br />
<em>阶段 1 — 分析器将模糊、焦虑的情况转化为清晰的结构。</em>
</p>
**协调器** 执行检索增强接地:对于教练阶段,LLM 选择与您的情况最相关的课程主题,然后仅加载这些知识切片 — 因此建议始终严格绑定在课程中,而不是凭空捏造。
**使用斜杠命令驱动它。** 在对话过程中跳转到任何阶段 — `/analyzer`、`/coach`、`/role-play`、`/reflection`:
<p align="center">
<img src="./public/images/commands.png" alt="快速命令 — 斜杠命令在阶段之间跳转" width="320" />
</p>
---
## 全过程
继续使用相同的例子 — 礼貌地与同学交朋友 — 从上面的分析器到 **教练 → 角色扮演 → 反思**:
**教练** — 基于课程的建议,并附有您可以实际使用的开场白。
<p align="center">
<img src="./public/images/coach.png" alt="教练阶段 — 基于课程的开场白建议" width="320" />
</p>
**角色扮演** — AI 保持角色,作为对方,以便您可以练习,真实地回应您的社交技能水平。<sub>(单击任意回合以放大)</sub>
<table>
<tr>
<td align="center"><a href="./public/images/role-play-1.png"><img src="./public/images/role-play-1.png" width="150" alt="角色扮演回合 1" /></a></td>
<td align="center"><a href="./public/images/role-play-2.png"><img src="./public/images/role-play-2.png" width="150" alt="角色扮演回合 2" /></a></td>
<td align="center"><a href="./public/images/role-play-3.png"><img src="./public/images/role-play-3.png" width="150" alt="角色扮演回合 3" /></a></td>
<td align="center"><a href="./public/images/role-play-4.png"><img src="./public/images/role-play-4.png" width="150" alt="角色扮演回合 4" /></a></td>
<td align="center"><a href="./public/images/role-play-5.png"><img src="./public/images/role-play-5.png" width="150" alt="角色扮演回合 5" /></a></td>
</tr>
<tr>
<td align="center"><strong>场景</strong></td>
<td align="center"><strong>您的开场白</strong></td>
<td align="center"><strong>她回应</strong></td>
<td align="center"><strong>继续下去</strong></td>
<td align="center"><strong>低压力邀请</strong></td>
</tr>
</table>
**反思** — 基于评分标准的每维度评估,评估您做得如何。
<p align="center">
<img src="./public/images/reflect.png" alt="反思阶段 — 每维度评估" width="320" />
</p>
---
## 架构

**关键思想:** 课程被一次性编写为**智能体技能**,并以两种方式使用 — 内部由辅导智能体(为了速度)使用,外部由任何 MCP 客户端通过**模型上下文协议**(为了重用和互操作性)使用。一个真实的来源,没有漂移。
### 演示的课程概念
| 概念 | 位置 | 如何演示 |
| :----------------------------- | :----------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **智能体 / 多智能体系统** | 代码 | 具有确定性阶段路由的四个专业智能体组成的分阶段管道,以及一个执行知识路由(RAG)的 LLM 协调器来确定教练。 |
| **MCP 服务器** | 代码 | `/api/mcp` 通过 MCP 为任何外部客户端公开 `list_social_topics` + `get_social_knowledge`(工具)和四个智能体(提示)。 |
| **智能体技能** | 代码 | `skills/social-skills-coach/` 将课程打包为可加载的技能 — 所有知识的单一真实来源。 |
| **安全功能** | 代码 | BYOK(您的 API 密钥保留在浏览器会话中,绝不存储在服务器端)+ 每个请求在 API 信任边界处使用 zod 验证。 |
| **可部署性** | 文档/视频 | 部署在 Vercel 上;请复制下面的步骤。 |
| **抗重力** | 视频 | 使用 Antigravity IDE + CLI 构建;在提交视频中显示。 |
---
## 功能
- **4 阶段辅导循环** — 分析器 → 教练 → 角色扮演 → 反思。
- **基于课程的建议** — 教练仅根据为您的情况检索的课程内容(RAG)提供建议,而不是通用提示。
- **智能体技能课程** — 社交技能知识一次性编写为可重用的技能,即唯一的真实来源。
- **MCP 服务器(自带模型)** — 四个智能体作为 MCP **提示**公开 + 知识工具,以便任何 MCP 客户端都可以运行整个教练并使用其自己的模型。作为一个 npm stdio 包发布,[`social-skills-coach-mcp`](https://www.npmjs.com/package/social-skills-coach-mcp)。
- **多模型** — 在 Xiaomi MiMo 和 DeepSeek 之间切换;演示密钥过期时自动故障转移。
- **附件** — 上传图像和文本文件(`.md`、`.txt`、`.csv`)供 AI 分析。
- **移动优先** — 设计用于在现场使用:有连接和演示页面,教练随时在您的口袋里。
- **暗色/亮色主题** — 减少眼部疲劳,对于光敏感非常重要。
---
## 安全
在每个信任边界处强制执行 — 浏览器、API 和 MCP 服务器:
<p align="center">
<img src="./public/images/settings-byok.png" alt="BYOK 设置 — 您的 API 密钥仅存在于此选项卡的会话内存中" width="320" />
</p>
- **BYOK,绝不持久。** 您的 API 密钥通过 `Authorization: Bearer` 头部发送,并在内存中使用 — 绝不记录,绝不写入数据库。
- **仅限会话存储。** 浏览器将密钥 + 聊天记录保存在 `sessionStorage`(而非 `localStorage`)中,因此它们在选项卡关闭时被清除。
- **信任边界处的 zod 验证。** 每个 `/api/chat` 和 MCP 请求都使用 zod 解析;如果 JSON 或形状格式不正确,则拒绝(`400`)在任何模型到达之前,如果缺少密钥,则禁止(`401`)。
- **没有内部泄漏。** 错误仅在服务器端记录;客户端收到通用消息(`内部服务器错误`),从不包含堆栈跟踪或机密信息。
- **设计无状态。** 没有数据库,没有服务器端用户数据。
- **SonarQube 代码质量验证。** 所有评级:A(安全、可靠性、可维护性)。
---
## 作为 MCP 服务器使用(自带模型)
整个辅导功能也是一个**独立的 MCP 服务器**,因此任何人都可以运行它并使用他们自己的模型。四个智能体作为 MCP **提示**公开 — 它们在**连接客户端的**模型上执行,因此服务器不需要 API 密钥并且自己不运行推理。这就是您可以插入比演示(廉价)的 MiMo/DeepSeek 更强大的模型的原因。
- **提示**(在您的模型上运行):`analyze_situation` · `coach` · `roleplay` · `reflect`
- **工具**(知识基础):`list_social_topics` · `get_social_knowledge({ topics })`
### 选项 1 — stdio 上的 npm 包(推荐用于本地客户端)
发布为 [`social-skills-coach-mcp`](https://www.npmjs.com/package/social-skills-coach-mcp)。将其添加到客户端的 `mcp.json`(Claude Desktop、Cursor、Antigravity 等):
```json
{
"mcpServers": {
"social-skills-coach": { "command": "npx", "args": ["-y", "social-skills-coach-mcp"] }
}
}
```
或交互式检查:
```bash
npx @modelcontextprotocol/inspector npx -y social-skills-coach-mcp
```
### 选项 2 —托管 HTTP(部署的应用)
相同的功能在 `POST <your-host>/api/mcp` 处提供(Streamable HTTP 传输)。针对正在运行的服务器进行快速烟雾测试:
```bash
curl -s -X POST http://localhost:3000/api/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_social_knowledge","arguments":{"topics":["opening"]}}}'
```
两种形式共享一个核心(`registerSocialSkillsMcp`)和一个课程源(智能体技能),因此它们永远不会漂移。
---
## 存储库结构
```text
├── skills/social-skills-coach/ # 智能体技能:课程(运行时产品知识,单一真实来源)
├── .agents/skills/ # Antigravity 智能体技能(开发时 AI 助手,如 karpathy/vercel)
├── packages/
│ └── social-skills-coach-mcp/ # 发布 npm stdio MCP 服务器(提示 + 工具)
├── .github/workflows/ # CI/CD(测试和 Vercel 部署)
├── __tests__/
│ ├── e2e/ # Playwright 端到端测试
│ └── units/ # Vitest 单元测试
├── src/
│ ├── app/
│ │ ├── api/
│ │ │ ├── chat/route.ts # 辅导聊天:路由 + RAG 接地 + 流式传输
│ │ │ └── [transport]/route.ts # MCP 服务器(解析为 /api/mcp)
│ │ ├── layout.tsx
│ │ └── page.tsx # 主 UI 和聊天界面
│ ├── components/ # React 组件(ui/ from Base UI / shadcn)
│ └── lib/
│ ├── agents/ # 阶段智能体 + 知识适配器
│ ├── knowledge/ # 加载器,读取智能体技能切片
│ ├── mcp/server-setup.ts # 共享 MCP 注册(工具 + 智能体提示)
│ ├── orchestrator.ts # LLM 主题选择 + 接地(仅限服务器)
│ ├── router.ts # 确定性阶段路由(客户端安全)
│ ├── ai.ts # 提供者初始化(MiMo / DeepSeek)
│ └── store.ts # Zustand 状态(历史记录,配置)
├── public/
│ └── images/ # 架构 PNG、封面、截图(README / 媒体库)
├── next.config.mjs # outputFileTracingIncludes 将技能 markdown 捆绑到 Vercel
└── env.example # 环境变量模板
```
---
## 本地开发和测试
### 1. 先决条件
- [Node.js](https://nodejs.org/)(v24 或最新 LTS)
- [pnpm](https://pnpm.io/installation)(最新)
### 2. 安装
```bash
pnpm install
```
### 3. 环境变量(可选 — 仅限“演示”模式)
应用默认为 **BYOK**:在设置对话框中粘贴您自己的 API 密钥,无需服务器配置。要使用内置的“演示(服务器密钥)”模式:
```bash
cp env.example .env
# 然后填写 MIMO_API_KEY + MIMO_API_BASE_URL 和/或 DEEPSEEK_API_KEY
```
### 4. 运行
```bash
pnpm dev # 在 http://localhost:3000 启动开发服务器
pnpm test # 单元测试(Vitest)
pnpm test:e2e # 端到端测试(Playwright)
pnpm build # 生产构建(类型检查 + Next 构建)
```
---
## 部署(Vercel)
应用部署到 Vercel,无需特殊配置:
1. 将 GitHub 仓库导入 Vercel。
2. (可选)在项目的环境变量中设置 `MIMO_API_KEY` + `MIMO_API_BASE_URL` / `DEEPSEEK_API_KEY` 以启用演示模式的生产环境。 BYOK 无需任何服务器密钥。
3. 部署。 `outputFileTracingIncludes` 设置在 `next.config.mjs` 中将 Agent Skill markdown 捆绑到服务器less 函数,因此 `/api/chat` 和 `/api/mcp` 都可以在运行时读取课程。
> **永远不要提交 API 密钥或密码。** 使用环境变量。
---
## 技术栈
Next.js(App Router)· React · TypeScript(严格)· TailwindCSS · Vercel AI SDK · Zustand · Vitest + Playwright · pnpm · 部署到 Vercel。
---
## 路线图
- 更多提供商:Anthropic、OpenAI、Google Gemini。
---
## 免责声明
该项目是 [Kaggle AI Agents: Intensive Vibe Coding Capstone Project](https://www.kaggle.com/competitions/vibecoding-agents-capstone-project) 的概念验证(MVP),由 **Agents for Good** 团队参与,仅供感兴趣的方评审和研究使用。所有功能(包括但不限于演示、AI 智能体、技能和 MCP)**不能取代专业的持牌心理学家或帮助专业人士**,不能提供任何医疗治疗或咨询。
演示网站目前使用假名。 避免提及个人信息,如真实姓名、电话号码或地址; AI 可能出错并产生幻觉 — 所有建议仅供参考。
---
## 许可证
[MIT](https://opensource.org/licenses/MIT)
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器