{"id":28138528,"url":"https://github.com/iammm0/turing-test","last_synced_at":"2025-06-10T23:07:39.536Z","repository":{"id":289835346,"uuid":"972222917","full_name":"iammm0/turing-test","owner":"iammm0","description":"在一场由两名人类和一名机器所组成的模仿游戏对局中，人类审讯者需要在五分钟的文字交谈中分辨出与自己所交流的哪一名证人才是真正的人类，机器人在对局中会表现得让人难以分辨，反之，则人类失败。","archived":false,"fork":false,"pushed_at":"2025-06-03T23:51:16.000Z","size":2960,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-04T07:17:35.388Z","etag":null,"topics":["fastapi","mui-material","nextjs15","postgresql","python3","redis","typescript"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iammm0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-24T18:18:12.000Z","updated_at":"2025-05-29T14:05:35.000Z","dependencies_parsed_at":"2025-04-25T10:31:38.114Z","dependency_job_id":"b29a3478-9d63-4530-ba09-66bd867409cf","html_url":"https://github.com/iammm0/turing-test","commit_stats":null,"previous_names":["iammm0/turing-test"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iammm0%2Fturing-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iammm0%2Fturing-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iammm0%2Fturing-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iammm0%2Fturing-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iammm0","download_url":"https://codeload.github.com/iammm0/turing-test/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iammm0%2Fturing-test/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259166973,"owners_count":22815592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fastapi","mui-material","nextjs15","postgresql","python3","redis","typescript"],"created_at":"2025-05-14T17:14:26.757Z","updated_at":"2025-06-10T23:07:39.494Z","avatar_url":"https://github.com/iammm0.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# turing_test 开发文档\n\n## 一、项目简介\n- 背景与动机  \n\n- 核心功能概览  \n\n- 应用场景  \n\n  \n\n## 二、技术栈\n- 后端：FastAPI / SQLAlchemy / asyncpg / Redis / OAuth2 / WebSocket  \n- 前端：Next.js / React / MUI / React Query / WebSocket  \n- 数据库：PostgreSQL  \n- 缓存与消息：Redis  \n- 部署：Uvicorn / Docker / Nginx  \n\n\n\n## 三、项目结构\n\n```bash\n.\n├── README.md\n├── apps\n│   ├── __init__.py\n│   ├── api\n│   │   ├── __init__.py\n│   │   ├── alembic.ini\n│   │   ├── core\n│   │   ├── dto\n│   │   ├── main.py\n│   │   ├── migrations\n│   │   ├── dao\n│   │   ├── routers\n│   │   ├── service\n│   │   └── utils\n│   └── web\n│       ├── README.md\n│       ├── components.json\n│       ├── eslint.config.mjs\n│       ├── next-env.d.ts\n│       ├── next.config.ts\n│       ├── package-lock.json\n│       ├── package.json\n│       ├── postcss.config.mjs\n│       ├── public\n│       ├── src\n│       └── tsconfig.json\n   └── prompts\n        ├── system.json\n├── docker\n│   ├── api.Dockerfile\n│   └── web.Dockerfile\n├── docker-compose.yml\n├── nginx\n│   └── turingtest.conf\n└── requirements.txt\n```\n\n\n\n## 四、本地数据库环境准备\n\n启动 PostgreSQL 使用自定义端口：\n\n```cmd\n:: 启动 PostgreSQL（端口改为 15432）\ndocker run -d --name turing_postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=iammm -e POSTGRES_DB=turing_test -p 15432:5432 postgres\n```\n\n启动 Redis 容器 使用自定义端口：\n\n```cmd\n:: 启动 Redis（端口改为 16379）\ndocker run -d --name turing_redis -p 16379:6379 redis\n```\n\nPostgreSQL 容器内登录：\n\n```bash\ndocker exec -it turing_postgres bash\n```\n\n然后在容器里执行：\n\n```bash\npsql -U postgres -d turing_test\n```\n\n进入 Redis 容器内：\n\n```cmd\ndocker exec -it turing_redis redis-cli\n```\n\n\n\n## 五、快速开始\n\n1.克隆代码：\n\n```bash\ngit clone https://.../turing-test.git\ncd turing-test\n```\n\n2.环境变量：\n\n在项目根目录创建 `.env`（或 `.env.local`），填写：\n\n```bash\nPOSTGRES_HOST=…\nPOSTGRES_PORT=5432\nPOSTGRES_USER=…\nPOSTGRES_PASSWORD=…\nPOSTGRES_DB=…\nREDIS_URL=redis://localhost:6379/0\nNEXT_PUBLIC_WS_BASE=ws://localhost:8000/api\n```\n\n3. 后端依赖 \u0026 启动\n\n```bash\ncd apps/api\npip install -r requirements.txt\nalembic upgrade head\nuvicorn main:app --reload\n```\n\n4.  前端依赖 \u0026 启动\n\n```bash\ncd frontend\nnpm install\nnpm run dev\n```\n\n\n\n## 六、核心功能\n\n1.  用户认证\n\n- 注册 `/api/auth/register`\n\n- 登录 `/api/auth/login`\n\n- JWT 令牌管理 (有效期 30 天)\n\n\n\n2. 匹配系统\n\n- 握手：`ws://…/api/ws/match?token=…`\n\n```bash\n`join`→`match_found`→`accept/decline`→`matched\n```\n\n\n\n3. 游戏流程\n\n- 玩家确认后创建 `Game`\n\n- 不同状态：`WAITING`→`ACTIVE`→`CHAT`→`JUDGED`→`ENDED`\n\n\n\n## 七、API 文档\n\n1. ### HTTP Endpoints\n\n| 方法 |        路径        |   描述   |           字段准备            |\n| :--: | :----------------: | :------: | :---------------------------: |\n| POST | /api/auth/register | 用户注册 | email, display_name, password |\n| POST |  /api/auth/login   | 用户登录 |        email, password        |\n\n2. ### WebSocket 消息格式\n\n进入匹配队列 WebSocket 连接：\n\n```\nws://127.0.0.1:8000/api/ws/match?token=\u003caccess_token\u003e\n```\n\n进入测试房间 WebSocket 连接\n\n```\n# 审讯者进入游戏\nws://127.0.0.1:8000/api/ws/rooms/\u003cgame_id\u003e/I?token=\u003caccess_token\u003e\n# 人类证人进入游戏\nws://127.0.0.1:8000/api/ws/rooms/\u003cgame_id\u003e/H?token=\u003caccess_token\u003e\n# AI证人进入游戏\nws://127.0.0.1:8000/api/ws/rooms/\u003cgame_id\u003e/I\n```\n\n#### 客户端→服务端\n\n- 加入匹配队列\n\n```json\n{ \n  \"action\": \"join\"\n}\n```\n\n- 接受进入对局\n\n```json\n{ \n  \"action\": \"accept\",\n  \"match_id\": \"...\"\n}\n```\n\n- 拒绝进入对局\n\n```json\n{ \n  \"action\": \"decline\", \n  \"match_id\": \"...\"\n}\n```\n\n- 向目标角色发送消息帧\n```json\n{\n  \"sender\": \"H | I\",\n  \"recipient\": \"H | I | A\",\n  \"body\": \"...\",\n  \"ts\": \"datatime.now(UTC)\"\n}\n```\n\n#### 服务端→客户端\n\n- 对局匹配成功，系统分配对局与游戏\n\n```json\n{ \n  \"action\": \"match_found\",\n  \"match_id\": \"...\",\n  \"role\": \"I|W\",\n  \"window\": 60\n}\n```\n\n- 系统已经为玩家匹配到对局，等待玩家确认后开始\n\n```json\n{ \n  \"action\": \"matched\",\n  \"game_id\": \"...\"\n}\n```\n\n- 对局等待玩家响应超时，玩家从匹配队列长链接中断开\n\n```json\n{ \n  \"action\": \"error\",\n  \"detail\": \"...\"\n}\n```\n\n- 对局双方同意接受对局，系统发出游戏准备状态中的提示\n```json\n{\n  \"action\": \"game_starting\",\n  \"game_id\": \"...\",\n  \"detail\": \"匹配成功，正在进入对局…\"\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiammm0%2Fturing-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiammm0%2Fturing-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiammm0%2Fturing-test/lists"}