一款基于大语言模型驱动的沉浸式职场生存与晋升模拟游戏
从初级专员到 CEO —— 玩一场真实的中国职场。
CareerForge 是一款把 LLM 接入到"游戏循环"里的 Web 模拟器:玩家创建角色、领取项目、与 NPC 真实对话、完成晋升答辩,所有 NPC 对话都走文心一言流式推理,好感度会动态影响 NPC 是否愿意分享真实信息。
这不是一个聊天机器人 demo,而是一个有完整游戏循环的 AI 原生应用:AI 既是对话伙伴、也是游戏机制的一部分(动态任务生成、晋升评判、突发事件处理)。
"如果《星露谷物语》的画风 + 《Do Not Feed the Monkeys》的策略深度 + ChatGPT 的对话能力,会做出什么?—— 就是 CareerForge。"
- AI 驱动 NPC 对话:基于文心一言 ERNIE 4.5 Turbo 的 SSE 流式对话,NPC 拥有独立性格与好感度,好感度低时会故意误导你,高时愿意分享内部情报
- 动态任务系统:根据职级 / 行业 / 职能自动生成差异化任务,每日推荐以游戏天数为种子静态锁定(确定性可复现)
- 晋升答辩机制:卡牌对战式会议系统 —— 理性 / 感性 / 权力三类卡牌互相克制,AI 评委根据对战历史与角色背景生成评判理由
- 职位压制对话动态:NPC 对玩家的称呼、敬语、态度会根据职级差动态变化,还原中国职场层级文化
- 突发事件处理:随机触发职场危机事件,影响任务列表和 NPC 关系
- 多行业 × 多职能覆盖:8 大行业 × 8 大职能,合计 64 种角色组合
- 星露谷物语风格 UI:温馨像素配色 + Tone.js 程序化生成的 Lo-fi BGM
📐 详细的架构图位于 docs/architecture/,共 5 张:系统总体架构、AI 调用链路、数据库架构、数据流、部署架构。
| 层级 | 技术 | 说明 |
|---|---|---|
| 前端框架 | React 19 + TypeScript | 函数式组件 + Hooks |
| 构建工具 | Vite 8 | 极速 HMR,秒级冷启动 |
| 状态管理 | Zustand | 轻量、零模板代码 |
| 路由 | React Router DOM 7 | 客户端路由 |
| 样式 | Tailwind CSS 3 + CSS Variables | 像素风主题色板 |
| 动效 | Framer Motion + Tone.js | 页面过渡 + 程序化 BGM |
| HTTP | ky + eventsource-parser | 友好的 SSE 流式请求 |
| BaaS | Supabase | Auth + PostgreSQL + Edge Functions |
| 大语言模型 | 百度文心一言 ERNIE 4.5 Turbo | SSE 流式接口 |
┌─────────────────────────────────────────────────────┐
│ Browser (React SPA) │
│ ├─ Pages: Login / MainGame / Dialog / Meeting ... │
│ ├─ Store: Zustand character state │
│ └─ lib/sse.ts ── SSE stream consumer │
└────────────┬───────────────────────────┬────────────┘
│ HTTPS │ HTTPS
▼ ▼
┌──────────────────┐ ┌────────────────────┐
│ Supabase │ │ Supabase Edge │
│ PostgreSQL + Auth│ │ Function (Deno) │
│ ├ characters │ │ wenxin-text-gen │
│ ├ tasks/... │ │ └─> 平台网关 │
└──────────────────┘ │ └─> 文心一言 │
└────────────────────┘
- Node.js ≥ 18
- pnpm ≥ 8(推荐)或 npm ≥ 9
- 一个 Supabase 项目(免费版即可,参见 supabase.com)
git clone https://github.com/yandy1234/logic-scale.git
cd logic-scale
pnpm installcp .env.example .env编辑 .env:
VITE_SUPABASE_URL=https://<your-project>.supabase.co
VITE_SUPABASE_ANON_KEY=<your-anon-key>
VITE_APP_ID=careerforge-demo进入 Supabase Dashboard → SQL Editor,依次执行 supabase/migrations/ 下的 6 个 SQL 文件(按文件名编号顺序):
00001_initial_schema_v2.sql
00002_add_active_event_and_unlocked_npcs.sql
00003_add_project_and_tasks.sql
00004_add_v5_features.sql
00005_add_projects_since_promotion.sql
00006_add_meeting_and_roles.sql
# 安装 Supabase CLI
brew install supabase/tap/supabase # macOS
# 或从 https://github.com/supabase/cli/releases 下载
# 部署 AI 对话代理
supabase functions deploy wenxin-text-generation --no-verify-jwt
# 在 Edge Function 环境变量中配置 LLM 网关密钥
supabase secrets set INTEGRATIONS_API_KEY=<your-key>pnpm dev打开 http://localhost:5173 即可游玩。
logic-scale/
├── public/ # 静态资源(favicon 等)
├── src/
│ ├── components/ # 公共组件
│ │ ├── AudioPlayer.tsx
│ │ └── TutorialModal.tsx
│ ├── db/
│ │ └── supabase.ts # Supabase 客户端
│ ├── lib/
│ │ ├── projects.ts # 项目与任务生成(8 行业 × 8 职能)
│ │ ├── events.ts # 突发事件 + NPC 模板
│ │ ├── sse.ts # SSE 流式请求封装
│ │ └── audio.ts # Tone.js BGM 系统
│ ├── pages/ # 页面级组件
│ │ ├── Login.tsx
│ │ ├── CharacterCreation.tsx
│ │ ├── MainGame.tsx # 主循环(任务 / 日程 / 属性)
│ │ ├── Dialog.tsx # NPC 对话(AI 流式)
│ │ ├── Meeting.tsx # 晋升答辩(卡牌 + AI 评判)
│ │ ├── Network.tsx # 同事关系网
│ │ └── Skills.tsx # 技能树
│ ├── store/
│ │ └── index.ts # Zustand 全局状态
│ ├── App.tsx # 路由 + 认证守卫 + BGM 切换
│ └── main.tsx # 入口
├── supabase/
│ ├── functions/
│ │ └── wenxin-text-generation/ # Edge Function: 文心一言代理
│ └── migrations/ # PostgreSQL schema 演进
├── docs/
│ ├── architecture/ # 技术架构图(5 张)
│ ├── 代码说明文档.md # 模块详解
│ └── 作品说明文档.pdf # 产品 PRD + 商业化思考
├── tasks/ # 原始项目说明
├── index.html
├── package.json
└── README.md
创建角色 → 选行业 / 职能 / 职级
↓
接取项目(系统生成 14 天周期)
↓
找导师拆解(AI 对话)→ 任务列表
↓
每日决策:消耗 AP 执行任务
├─ 任务完成 → 经验值 + 奖励
├─ 社交博弈 → NPC 好感度变化
└─ 突发事件 → 考验应变
↓
经验值满 → 触发晋升答辩
↓
卡牌对战(理 / 感 / 权三系克制)
↓
AI 评委生成结果(JSON: pass/reason/feedback)
↓
通过 → 职级 +1 / 失败 → 进度扣 50%
↓
……循环到 CEO
src/pages/Dialog.tsx 中根据 npc_affinities 动态调整 system prompt:
- 好感度 < 60:注入"你可能给出不准确甚至故意误导的信息"
- 好感度 ≥ 80:注入"你非常信任玩家,愿意分享内部信息"
- NPC 职级 > 玩家职级:增加职位压制语气
好感度本身由独立 LLM 调用解析(parseAffinity),返回 -10 到 +10 的整数,clamp 到 0-100 范围。
supabase/functions/wenxin-text-generation/index.ts 中,直接 return new Response(upstream.body),不做任何缓冲,保证 AI 输出的低延迟首字到达(TTFB)。
src/lib/projects.ts 以 game_date 为种子生成任务推荐,保证同一游戏日重玩时推荐任务一致 —— 既避免"刷分",又让玩家有"今天就该做这个"的策略感。
项目包含一份完整的评估报告(专家评审 / 用户测试结果),位于 careerforge/评估报告.docx。
注:评估报告未发布到本仓库,请参考 docs/作品说明文档.pdf 中的"评估"章节。
| 方式 | 命令 | 适用场景 |
|---|---|---|
| 本地开发 | pnpm dev |
调试 |
| 静态构建 | pnpm build → 部署 dist/ |
生产 |
| Vercel | 一键导入 GitHub 仓库 | 推荐 |
| Netlify | pnpm build && netlify deploy --prod |
备选 |
| Cloudflare Pages | 导入仓库,build cmd: pnpm build |
国内访问 |
⚠️ 本项目需要后端 Supabase 服务,纯静态托管无法独立运行。
- 多人联机:同公司内 2-4 人协作项目
- 移动端适配:响应式布局 + 触屏操作
- 数据可视化:玩家晋升轨迹回放
- NPC 关系网图谱:基于 affinity 的实时力导向图
- 国际化:英文 / 日文版(多 LLM 后端切换)
欢迎提交 Issue 和 PR!
# 开发流程
git checkout -b feat/your-feature
pnpm install
pnpm dev
# 提交前
pnpm lint
git commit -m "feat: add your feature"
git push origin feat/your-feature本项目为产品 Demo / MVP 版本,仅供学习与作品集展示使用。 商业使用请联系作者获得授权。
- 灵感来源:《星露谷物语》UI 风格、《Do Not Feed the Monkeys》策略深度
- 平台支持:Supabase · 百度智能云千帆 · Vercel
- 像素字体:Press Start 2P · VT323
Built with ❤️ for AI × Game intersections
如果这个项目对你有启发,欢迎 Star ⭐