一个前后端分离的全栈项目。用户输入其 Steam ID 后,后端从 Steam Web API 获取公开的游戏列表,将数据存储在 Cloudflare D1 数据库中,并利用 AI 大语言模型(当前配置为 DeepSeek)生成一份关于用户游戏品味和习惯的“毒舌”锐评。前端使用 Nuxt 3 构建,负责用户交互和展示结果;后端 API 使用 Hono 构建,部署在 Cloudflare Workers 上,负责数据获取、存储和 AI 分析。
关联仓库:
- 获取 Steam 游戏库: 输入 64 位 Steam ID,通过 Steam Web API 获取用户公开的游戏列表和游玩时长。
- D1 数据存储: 将获取到的 Steam 游戏数据存储在 Cloudflare D1 数据库中,用于后续分析,并设置有效期以定期更新,避免频繁请求 Steam API。
- AI 驱动的玩家画像: 调用 AI 大模型(通过 OpenAI 兼容接口),基于用户的游戏数据生成一份幽默、讽刺且富有洞察力的“锐评”。
- 流式响应: AI 生成的评价内容通过 Server-Sent Events (SSE) 流式传输到前端,提供即时反馈。
- 模型信息查询: 提供 API 端点以查询当前后端正在使用的 AI 模型名称和版本。
- 用户 Steam 信息查询: 提供 API 端点根据 Steam ID 查询用户的公开 Steam 个人资料信息(昵称、头像等)。
- 全栈 Cloudflare 部署: 前后端均设计为可便捷地部署在 Cloudflare 平台上(Pages + Workers + D1)。
- 前端: Nuxt 3
- 后端 API: Hono
- 部署平台: Cloudflare Workers (后端), Cloudflare Pages (前端)
- 数据库: Cloudflare D1
- AI 模型: DeepSeek API (或其他 OpenAI 兼容模型,通过 OpenAI SDK 调用)
- 数据源: Steam Web API
在开始之前,请确保你已安装以下工具和拥有必要的账户/密钥:
- Node.js (建议使用 LTS 版本)
- pnpm (或 npm/yarn)
- Cloudflare Account
- Wrangler CLI (已登录并授权,用于部署 Cloudflare Worker 和管理 D1)
- 有效的 Steam Web API Key
- 有效的 DeepSeek API Key (或其他 OpenAI 兼容模型的 API Key)
- 一个 Cloudflare D1 数据库实例(可在 Cloudflare Dashboard 创建)
- 一个拥有公开游戏库的 Steam 账户(用于测试)
-
克隆仓库: 项目包含前端和后端两个独立部分。
# 克隆前端仓库 (Nuxt) git clone https://github.com/kutius/steam-judger.git steam-judger-frontend # 克隆后端仓库 (Hono on Workers) git clone https://github.com/kutius/steam-judger-backend.git steam-judger-backend
-
安装依赖: 分别进入前后端项目目录安装依赖。
cd steam-judger-frontend pnpm install cd ../steam-judger-backend pnpm install
-
配置后端 (
steam-judger-backend):-
wrangler.toml配置: 编辑wrangler.toml文件,配置 D1 数据库绑定。你需要先在 Cloudflare Dashboard 创建一个 D1 数据库,获取其database_name和database_id。# backend/wrangler.toml (示例片段) name = "steam-judger-backend" # Worker 名称 main = "src/index.ts" compatibility_date = "2024-03-18" # 使用适合你项目的日期 # D1 数据库绑定 [[d1_databases]] binding = "DB" # 在代码中访问数据库时使用的绑定名称 (例如 c.env.DB) database_name = "your-d1-database-name" # 你在 Cloudflare 上创建的 D1 数据库名称 database_id = "your_d1_database_uuid_from_cloudflare" # D1 数据库的 UUID # preview_database_id = "your_preview_d1_database_uuid" # 可选,用于本地预览环境
-
环境变量配置:
- 本地开发: 在
steam-judger-backend目录下创建一个.dev.vars文件,并填入以下内容:STEAM_API_KEY="YOUR_STEAM_API_KEY" OPENAI_API_KEY="YOUR_DEEPSEEK_API_KEY" # D1 绑定在 wrangler dev 运行时会根据 wrangler.toml 自动模拟或连接 # OPENAI_BASE_URL="OPTIONAL_CUSTOM_OPENAI_COMPATIBLE_ENDPOINT" # 如果使用非官方 DeepSeek 或 OpenAI 端点
- Cloudflare 部署:
- 登录 Cloudflare Dashboard。
- 导航到 Workers & Pages -> 你的 Worker (
steam-judger-backend) -> Settings -> Variables。 - 在 "Secret variables" 下添加
STEAM_API_KEY和OPENAI_API_KEY,并填入你的密钥值。如果需要自定义 OpenAI 端点,也在此处添加OPENAI_BASE_URL。 - D1 数据库绑定已在
wrangler.toml中配置,部署时会自动关联。
- 本地开发: 在
-
-
启动后端 Worker (Hono): 在
steam-judger-backend项目目录下运行:# 首次运行或 D1 schema 变更后,需要迁移数据库结构 # npx wrangler d1 execute your-d1-database-name --local --file=./schema.sql # 启动本地开发服务器 pnpm run dev
Wrangler 会启动一个本地服务器(通常监听
http://localhost:8787),并模拟 D1 数据库环境。 -
启动前端应用 (Nuxt): 在
steam-judger-frontend项目目录下运行:pnpm run dev
Nuxt 会启动一个开发服务器(通常监听
http://localhost:3000)。在浏览器中打开此地址即可访问前端页面。
-
部署后端 Worker: 确保
wrangler.toml配置正确,并且你已经在 Cloudflare 创建了对应的 D1 数据库。 在steam-judger-backend目录下运行:# 部署前,确保生产环境的 D1 数据库结构是最新的 # npx wrangler d1 execute your-d1-database-name --file=./schema.sql # 部署 Worker pnpm run deploy
Wrangler 会将你的 Hono 应用部署到 Cloudflare Workers。记下部署后的 Worker URL(例如
https://steam-judger-backend.your-account.workers.dev)。 -
部署前端 Nuxt 应用:
- 将你的
steam-judger-frontend代码推送到 Git 仓库 (GitHub, GitLab 等)。 - 登录 Cloudflare Dashboard,导航到 Workers & Pages -> Create application -> Pages -> Connect to Git。
- 选择你的前端仓库和分支。
- 配置构建设置:
- Framework preset: Nuxt
- Build command:
pnpm build(或npm run build) - Build output directory:
.output/public
- (可选) 配置环境变量:
- 添加
NUXT_PUBLIC_API_BASE_URL并将其值设置为你部署的后端 Worker URL(如果前端需要显式指定)。
- 添加
- 点击 "Save and Deploy"。
- 将你的
- 访问部署好的前端应用 URL(Cloudflare Pages 的 URL)。
- 在输入框中输入一个有效的 64 位 Steam ID。
- 点击提交按钮。
- 前端调用后端
/api/analyze/:steamid接口。 - 后端首先检查 D1 数据库中是否有该 Steam ID 的有效游戏数据记录。
- 如果记录不存在或已过期,后端调用 Steam API 获取最新数据,并存入 D1。
- 后端使用 D1 中的数据调用 AI 大模型生成分析评价。
- AI 生成的锐评通过 SSE 流式传输回前端并显示在页面上。
- 页面同时会尝试调用
/api/user/:steamid获取并展示用户的 Steam 昵称和头像。
所有 API 路径建议以 /api 开头,方便前端代理或区分。
-
GET /api/analyze/:steamid- 接收 64 位 Steam ID 作为路径参数。
- 检查 D1 数据库中是否有该 Steam ID 的有效游戏数据记录 (
dataId)。 - 如果不存在或已过期,调用 Steam API 获取最新数据,存入 D1(设置 TTL),并获取
dataId。 - 从 D1 中获取
dataId对应的游戏数据。 - 如果数据不存在(异常情况),返回错误。
- 调用配置的 AI 大模型生成分析评价。
- 通过
text/event-stream流式返回 AI 生成的内容。
-
GET /api/user/:steamid- 接收 64 位 Steam ID 作为路径参数。
- 调用 Steam Web API 获取用户的公开个人资料信息(昵称、头像 URL 等)。
- 返回用户信息 JSON 对象。
-
GET /api/model- 返回当前后端配置用于分析的 AI 模型名称和版本信息。
- 响应示例:
{ "modelName": "deepseek-chat", "version": "v1.0" }(版本信息可根据实际情况添加)
欢迎通过提交 Pull Requests 或创建 Issues 来改进项目!无论是功能建议、代码优化还是 Bug 修复,都非常感谢。
特别致谢 小黑盒的朋友对本项目的支持!
特别感谢所有为本项目提供灵感、帮助和反馈的朋友们!
如果你觉得这个项目对你有帮助或启发,并且希望支持我继续开发和维护类似的项目,欢迎考虑:
- 给我一个 Star ⭐!
- Buy Me a Coffee
你的支持是我前进的最大动力!
本项目采用 MIT License。