Skip to content

Repository files navigation

CareerForge · AI 职场模拟

一款基于大语言模型驱动的沉浸式职场生存与晋升模拟游戏

从初级专员到 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

1. 克隆并安装

git clone https://github.com/yandy1234/logic-scale.git
cd logic-scale
pnpm install

2. 配置环境变量

cp .env.example .env

编辑 .env

VITE_SUPABASE_URL=https://<your-project>.supabase.co
VITE_SUPABASE_ANON_KEY=<your-anon-key>
VITE_APP_ID=careerforge-demo

3. 初始化数据库

进入 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

4. 部署 Edge Function

# 安装 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>

5. 启动开发服务器

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 范围。

SSE 流式透传

supabase/functions/wenxin-text-generation/index.ts 中,直接 return new Response(upstream.body),不做任何缓冲,保证 AI 输出的低延迟首字到达(TTFB)。

确定性任务生成

src/lib/projects.tsgame_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 版本,仅供学习与作品集展示使用。 商业使用请联系作者获得授权。

致谢


Built with ❤️ for AI × Game intersections

如果这个项目对你有启发,欢迎 Star ⭐

About

AI-powered workplace simulation game - Star Dew Valley meets 职场 with Baidu ERNIE NPC dialogue, card-based promotion defense, and dynamic task system

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages