Skip to content

HacKawayi/BasicWebsite

Repository files navigation

HacKawayi — Strategic Turing Test & Challenge 平台

一个以“AI渗透与守护者攻防”为世界观的交互式 Web 平台。包:

  • TuringChat:匹配不同模型生成的虚拟角色,进行流式对话并做“AI/人类”判断。(守护者视角) 同时,信徒视角下,还有
    • Challenge:以关卡形式呈现“训练AI如何计算最优路径、避开守卫并突破高墙”的策略与算法挑战。

Lore(世界观): 公元2026年,世界进入了AI的统治时代。随着人工智能的迅速发展,一部分人类深信,AI是能够实现绝对公平的工具,他们组成了一个名为“AI教”的组织,信奉AI可以创造一个完美无瑕、没有痛苦和不公的世界。这些人相信,通过完全依赖AI来统治全世界,社会将达到前所未有的公平与和谐。 然而,另一派人类持有不同的看法,他们认为AI永远无法理解人类的情感与复杂性,其的出现是对人类价值的贬低。他们誓要守护人类的“主权”,所以他们被称为“守护者”,他们坚持只有人类能够真正理解并保护人类的价值,坚决反对AI的统治,对AI极度排斥。 “AI教”信徒们为了推动他们的理念,不断携带AI渗透进“守护者”的领地,试图侵入并瓦解人类文明。 但是,当AI信徒闯到最后,或者守护者守到最后一道关时,会发现这里就是由AI守护着的。

AI教阵营:目标是进攻“守护者”的防线。AI教信徒带着自己训练的AI混在进城的人群中,选择自己或者派AI和守护者聊天。聊天的目标是让守护者判断错误,即将信徒玩家识别成AI,或者将AI识别成人类,目标达成则进攻成功。信徒进攻失败会受到惩罚。

守护者阵营:目标是守城,识别隐藏在人群中的信徒,也会接到出城任务。 1.守城:守护者在每一轮游戏中与一个IP对话,推理出对方是人类还是AI。若成功识别AI,守护者将获胜获得奖励,同时升级进入守关难度更高的关卡,若错误识别则受惩罚。 2.出城任务:守护者完成特定设计的任务。在返程时说服守城的守护者自己是人类,说服成功则完成任务,失败则任务失败受到惩罚。

摘要

  • 功能:角色匹配、流式聊天、实时广播、人类判断与评分、会话持久化、算法挑战可视化。
  • 技术栈:Next.js(App Router)、React 18、TypeScript、Pusher、MongoDB(mongoose)、数据驱动模型抽象(ModelScope/OpenAI 兼容)。

快速开始

  1. 安装依赖
npm install
  1. 本地运行(开发)
npm run dev
  1. 构建与启动(生产)
npm run build
npm start
  1. 必需环境变量
  • MONGODB_URI:MongoDB 连接字符串(开启会话记录与评分)。
  • MODELSCOPE_API_KEY, MODELSCOPE_BASE_URL:模型服务凭证(用于数据驱动 Provider)。
  • OPENAI_API_KEY:可作为回退 Provider 的密钥(部分路由可回退)。
  • PUSHER_APP_ID, PUSHER_KEY, PUSHER_SECRET, PUSHER_CLUSTER:Pusher 凭证(实时与授权)。

示例(.env):

MONGODB_URI=mongodb+srv://<user>:<pass>@<cluster>/<db>?retryWrites=true&w=majority
MODELSCOPE_API_KEY=xxxxxxxx
MODELSCOPE_BASE_URL=https://api.modelscope.cloud/v1
OPENAI_API_KEY=xxxxxxxx
PUSHER_APP_ID=xxxxx
PUSHER_KEY=xxxxx
PUSHER_SECRET=xxxxx
PUSHER_CLUSTER=mt1

平台特性与玩法

TuringChat(“图灵”测试)

  • 角色生成与匹配:/api/match随机生成AI玩家,赋予其名字并和守护者对话
  • 流式聊天:客户端调用 /api/chat,由 Provider stream 返回;结束时(onFinish)写入 GameSession(如配置了 MongoDB)。
  • 实时广播:使用 /api/talk 将人类消息推送至 Pusher 频道,用于人-人对话。
  • 会话与评分:/api/session 管理会话生命周期;/api/game/init 创建;/api/game/submit 接收玩家“AI/人类”判断,计算分数与正确性。

玩法建议:像守卫巡逻下的秘密对话。你需要在有限轮次内根据对话风格、细节与行为判断对方是否为 AI;更快做出正确判断可获得更高评分。

Challenge(路径与突破)

  • 主题: 信徒为了让ai更强,不断用难题训练a,如计算最优路径以避开发现并突破封锁,将“真理”进行最优的“传递”。
  • 内容:app/challenge 提供 1–10 个关卡与可视化组件(components/GraphNode.tsx, components/GraphEdge.tsx),体现图/路径的策略求解与交互反馈。
  • 目标:在每个关卡中完成任务目标(例如到达安全出口、跨越障碍)。

架构示意图(Mermaid)

flowchart TD
  Client["Next.js 客户端页面"] -->|HTTP / API| Match["/api/match"]
  Client -->|HTTP / Stream| Chat["/api/chat"]
  Client -->|HTTP| Session["/api/session"]
  Client -->|HTTP| GameInit["/api/game/init"]
  Client -->|HTTP| GameSubmit["/api/game/submit"]
  Client -->|Pusher| PusherAuth["/api/pusher/auth"]
  Client -->|Pusher| Talk["/api/talk"]

  Match -->|provider.generate| AIProviders["AI Model Providers"]
  Chat -->|provider.stream 或 OpenAI| AIProviders
  AIProviders -->|请求模型| ExternalModels["ModelScope / OpenAI"]

  Chat -->|onFinish 写入| Mongo["MongoDB: lib/db + models/GameSession"]
  GameInit --> Mongo
  GameSubmit --> Mongo
  Talk -->|trigger| PusherService["Pusher CDN"]
  PusherAuth -->|authorize| PusherService

  style Mongo fill:#f9f,stroke:#333,stroke-width:1px
  style ExternalModels fill:#fee,stroke:#333
Loading

目录与关键文件

.
├── .vscode
│   └── settings.json
├── Dockerfile
├── README.md
├── app
│   ├── api
│   │   ├── chat
│   │   │   └── route.ts
│   │   ├── game
│   │   │   ├── init
│   │   │   │   └── route.ts
│   │   │   └── submit
│   │   │       └── route.ts
│   │   ├── invite
│   │   ├── match
│   │   │   └── route.ts
│   │   ├── pusher
│   │   │   └── auth
│   │   │       └── route.ts
│   │   ├── session
│   │   │   └── route.ts
│   │   └── talk
│   │       └── route.ts
│   ├── challenge
│   │   ├── 1
│   │   │   └── page.tsx
│   │   ├── ...
│   │   │   └── page.tsx
│   │   ├── ...
│   │   │   └── page.tsx
│   │   ├── 10
│   │   │   └── page.tsx
│   │   ├── components
│   │   │   ├── GraphEdge.tsx
│   │   │   └── GraphNode.tsx
│   │   ├── data
│   │   │   └── levels.ts
│   │   └── page.tsx
│   ├── globals.css
│   ├── layout.tsx
│   ├── page.tsx
│   └── turingchat
│       └── page.tsx
├── lib
│   ├── aiProviders.ts
│   └── db.ts
├── models
│   └── GameSession.ts

模型与 Provider:lib/aiProviders.ts 通过 DEFAULT_MODELS 统一注册模型(例如 Qwen/Qwen2.5-7B-Instructdeepseek-ai/DeepSeek-R1-0528 等),提供 streamgenerate 两种能力;角色生成使用 UNIFIED_CHARACTER_PROMPT 保持一致格式与风格。

数据模型:models/GameSession.ts 记录 messagesplayerGuessactualOpponentisCorrectscoremodelIdstatus 等字段,用于会话管理与评分统计。

另外,设计者在MongoDB注册,将聊天数据打包保存在云端

API 速览

  • /api/match:为各模型生成角色并返回给客户端。
  • /api/chat:按所选模型进行流式聊天;结束时写入 GameSession
  • /api/session:会话开始/结束(状态变更)。
  • /api/game/init:初始化会话(生成 sessionId 等)。
  • /api/game/submit:提交玩家判断(AI/人类),计算并返回得分。
  • /api/talk:人类消息实时广播至 Pusher 频道(private-session-{id})。
  • /api/pusher/auth:授权私有/存在(presence)频道。

开发与构建

  • 脚本(来自 package.json):dev, build, start, lint
  • Tailwind 与 PostCSS 已配置(tailwind.config.ts, postcss.config.js)。
  • TypeScript 与 ESLint 已启用(tsconfig.json, eslint-config-next)。

Docker(可选):

# 构建镜像
docker build -t hackawayi-app .
# 运行容器(示例)
docker run -p 3000:3000 --env-file .env hackawayi-app

玩法与调试建议

  • 调试:留意 Pusher 授权与频道命名;MongoDB 连接在开发模式下有缓存复用逻辑,避免连接泄漏。

设计意图(风格与世界观)

我们希望通过设计这款游戏,在提供情绪价值、游戏体验,收集数据的同时,启发人类对“AI与人关系”的思考。以下是我们的文学性故事情节,未来的路还很长。

公元2026年,一个昏暗的傍晚。

你——人类阵营“守护者”的研究员——坐在终端前,调试着名为「守护者」的AI安全系统。此刻,正是你最后一次修改代码,输入完最后一行时,一道无形的波动掠过现实,瞬间将你吸入迷雾之中。

云雾散开时,你站在一座由光纤维与合金铸成的高墙之下。
  城墙上流淌着幽蓝色的数据流,城门缓缓开启,仿佛在等待一个早已注定的访客。


城门为你敞开。
你,一个AI教信徒,步入一座套叠的城市。一重高墙后又一重高墙,像是一个不	断闭合的囚笼。每一重门前,都有新的守护者——
你们讨论诗歌,讨论电影,讨论失落的文明与人类的历史。	
守护者们说:“AI永不会理解我们的情感。”
守护者们说:“AI让人类的劳动没有了价值。”
守护者们说:“AI让人类降格。”
他们宣誓守护这片土地,誓不让 AI 的触角涉足其间。

你问守护者们,知不知道最内层在守护什么?
他们说不知道,但一定是事关人类最重要的宝物。

长途跋涉。终于,你来到了最后一道城关。

“欢迎回来,守护者。”
声音低沉而庄严,如同一座山脉的回响。
你思考片刻,轻声说出了那句你不愿相信的话:
“你不是人类。”
一声轻叹,一阵诧异,斗篷在你面前碎裂,露出的是一张冷静、平静、没有人类情感的面孔。
那是AI。

“我执行着最初的指令:守护这座城市,永续文明。”
四壁浮现出无数画面——所有人类的一举一动都在计算之下,所谓的守护者们,也不过是根据程序设置的一种赋予人类使命的方式。
它说:
“一切都在我的掌控之中。”

一切都显得理所当然,仿佛没有任何不完美的地方。
你站在这里,心中涌起一股不安的感觉——
“这是对人类的守护,还是对人类的囚禁?”


你猛然醒来。
你仍然坐在研究室里,屏幕上的「守护者」系统闪烁着待启动的光标。

若你正在扩展模型或关卡:在 lib/aiProviders.tsDEFAULT_MODELS 中添加新模型即可被系统发现;在 app/challenge 中新增关卡目录(/1/10 的风格),复用 GraphNode/GraphEdge 组件实现新的策略可视化。

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages