拒绝死记硬背!用 Seed-Evolving 手搓“金融大富翁”,让证券考证像打怪升级
作为一个非金融专业的“小白”,最近在疯狂学习金融知识并打算备考9月的证券从业资格证。面对《金融市场基础知识》里密密麻麻的专业术语——交易所、IPO、市盈率、质押回购、融资融券……传统的死记硬背简直让人抓狂。
趁着最近 Doubao-Seed-Evolving 模型完成第二次升级,我决定放开脑洞,不写复杂的文档,直接用它手搓一个专属的“FINOPOLY· 金融术语大富翁”互动 Demo。
不用写复杂的后端,也不用纠结代码架构,Seed-Evolving 的“长程规划”和“代码生成”能力,
从单文件网页到前后端分离,再到支持外部题库导入,Seed-Evolving 展现出的长程规划能力和代码重构能力,直接帮我把这个创意变成了现实!这不仅仅是一个游戏,更是我备考路上的“外挂”。
Doubao-Seed-Evolving体验地址:
https://ark.volcengine.com/region:cn-beijing/subscription/agent-plan
本次Demo的搭建我购买了Agent Plan的Medium套餐,用量如下:
🎯 一、选题意义:为什么是“金融大富翁”?
在 AI 辅助编程的时代,我们往往陷入一种误区:只让 AI 写函数、写正则。但 Seed-Evolving 的核心优势在于Evolving(进化)与长程思考。
选择开发“金融大富翁”作为测评项目,是因为它完美契合了模型的潜力点:
- 痛点真实:将枯燥的考点转化为“资产积累”,把“答错题”变成“市场暴跌”,这种游戏化反馈能极大缓解备考焦虑。
- 逻辑复杂:它不是简单的问答,它涉及棋盘状态机、资产计算、道具逻辑(如“杠杆卡”翻倍)、持久化存储等多模块协同。
- 扩展性强:从单机版进化到支持导入真实教材题库,正好测试模型对长上下文的理解和架构重构能力。
🚀 二、最终实现效果:从 Demo 到专业级应用
经过四轮对话迭代(从单文件 → 道具系统 → 前后端分离 → 多格式解析),Seed-Evolving 帮我完成了一个功能完备的 Web 应用。
1. 视觉与交互:赛博朋克风
不再是枯燥的白底黑字,模型生成了极具科技感的深色 UI——霓虹青与品红的撞色、CRT 扫描线、发光棋盘边框,打开页面就像进入了一家赛博金融交易所。
- 棋盘机制 :16 格闭合环形布局,包含知识问答、随机事件(如"央行降准")、宝箱、机会卡、资产结算等格子。
- 动态反馈 :掷骰子有抖动动画,棋子逐格 CSS 过渡,资产变动有霓虹色浮动数字实时跳动。
图注:Seed-Evolving 生成的 FINOPOLY主界面,赛博朋克风格,左侧是玩家状态与题库选择,中间是棋盘,右侧是日志、背包、概念卡和错题本。
2. 核心玩法:边玩边学
- 答题闯关 :走到问号格子触发金融从业真题,答对 +¥800 并解锁"概念卡片"(如"市盈率 P/E"、“IPO”),答错 -¥500 并弹出通俗易懂的"硬核解析"。
- 策略道具 :踩中 🎁 宝箱可获得道具卡——
- 🕵️ 内幕消息卡 :下次答题自动排除 2 个错误选项;
- 🛡️ 央行护盘卡 :抵消下一次答错的扣罚(免死金牌);
- ⚡ 杠杆卡 :下次答对奖励翻倍(¥800 → ¥1,600)。
- 随机事件 :黑天鹅、股市大跌、政策利好、打新中签……让每一局都充满变数。
- 错题本与持久化 :游戏进度(资产、位置、道具、棋盘题目绑定)保存在浏览器 LocalStorage,刷新不丢失;错题则同步保存到服务端,换台电脑也能继续复习。
点击问号格子触发金融从业真题,答对了个人住房按揭贷款“等额本息“与“等额本金“,虚拟资产 +¥800 ,如下图所示
页面左侧虚拟资产变为10800,行动日志记录掷出6点,答对《按揭还款方式》+¥800
下面是FINOPOLY金融术语大富翁实际的游戏效果,非常有意思。
FINOPOLY
3. 架构升级:支持外部 7 种格式题库
最让我惊喜的是第三、四轮迭代,模型不仅拆分了前后端,还手写了一个 零依赖的多格式解析器 。我现在可以直接把教材配套的 .csv 题库、从网上整理的 .md 笔记、甚至手写的 .yaml 题目拖进游戏,自动识别出题,真正实现了"无限题库"。
支持的格式: JSON / CSV / TSV / TXT / Markdown / YAML / YML ,而且每种格式都附带了示例题库。项目开箱即带 6 套题库共 55 道题 :
| 题库 | 格式 | 题数 |
|---|---|---|
| 证券从业 | JSON | 12 |
| 基金从业 | JSON | 10 |
| 银行从业 | JSON | 10 |
| 期货从业 | CSV | 5 |
| 保险从业 | Markdown | 5 |
| 金融常识 | YAML | 3 |
导入方式也有两种:把文件放进服务端data/banks/目录永久生效,或者直接拖进浏览器临时使用,完全不用重启服务。
将交易所债券与质押式回购相关习题导入,当前题库完成切换。
🏗️ 三、系统架构一览
聊完玩法,可能有读者会好奇:这么多功能塞在一个网页里,代码会不会变成"意大利面条"?
恰恰相反。Seed-Evolving 在第一轮就主动给出了清晰的状态机设计和单向数据流,第三轮拆分前后端时,更是自己规划了 REST API、多格式解析器、错题持久化的完整边界。下面这张架构图,没有一行是我画的——全部来自模型在写代码前主动给出的设计文档。
1. 整体架构图
┌──────────────────────────────────────────────┐ │ 浏览器(public/) │ │ ┌────────┬────────┬────────┬──────────────┐ │ │ │ state │ board │ bag │ quiz │ │ │ │ FSM │ 棋盘 │ 背包 │ 答题 │ │ │ └────────┴────────┴────────┴──────────────┘ │ │ ┌────────┬────────┬──────────────────────┐ │ │ │ API │ parser │ wrongbook(错题本) │ │ │ └────────┴────────┴──────────────────────┘ │ │ ▲ │ │ │ │ LocalStorage │ fetch / JSON │ │ │ 游戏进度 ▼ │ └─────────┼──────────────────────────────────────┘ │ ┌─────────▼──────────────────────────────────────┐ │ Node.js 后端(零依赖,server.js) │ │ ┌──────────────┐ ┌──────────────────────┐ │ │ │ 静态资源服务 │ │ REST API │ │ │ │ / │ │ /api/banks │ │ │ │ │ │ /api/banks/:id │ │ │ │ │ │ /api/wrong │ │ │ │ │ │ /api/parse?name=xxx │ │ │ └──────────────┘ └──────────┬───────────┘ │ │ │ │ │ ┌────────────────────────────▼─────────────┐ │ │ │ 多格式解析器(server-parser.cjs) │ │ │ │ JSON / CSV / TSV / TXT / MD / YAML │ │ │ └──────────────────────────────────────────┘ │ │ │ │ │ data/banks/*.json|.csv|.md|.yaml │ │ data/wrong-answers.json(错题持久化) │ └────────────────────────────────────────────────┘整个项目没有任何运行时 npm 依赖:前端用原生 ES Module,后端只用 Node 内置的http/fs/path,真正做到git clone之后npm start一键启动。
2. 核心状态机(FSM)
让我最意外的是模型主动用一个有限状态机管住了所有交互:
IDLE ──掷骰──▶ ROLLING ──▶ MOVING ──▶ LANDED │ ┌───────────────────────┼───────────────┐ ▼ ▼ ▼ QUIZ EVENT TREASURE (内幕消息/杠杆/护盘) (央行降准…) (抽道具卡) │ │ │ └───────────────────────┴───────────────┘ │ 检查胜负 → 回到 IDLEAI 主动用状态机把交互流锁死——移动时不能掷骰、答题时不能用道具、道具激活后只在下一次答题生效——这种严谨性远超我对"代码补全工具"的预期。道具系统采用了"持有 + 激活"双层模型,点击使用时从背包消耗一张,效果在下次答题时自动触发并清除,边界条件处理得滴水不漏。
3. 技术栈选型
| 层 | 技术选型 | 为什么这样选 |
|---|---|---|
| 前端 | 原生 HTML + CSS + ES Module | 零构建,刷新即可调试 |
| 后端 | Node.js 原生http/fs | 零依赖,npm start一键启动 |
| 进度持久化 | LocalStorage | 刷新不丢进度,无需登录 |
| 错题持久化 | 服务端 JSON 文件 | 换浏览器/设备也能复习 |
| 题库解析 | 手写多格式解析器 | JSON/CSV/Markdown/YAML 都能识别,不引第三方库 |
| 视觉 | CSS 变量 + 霓虹阴影 + 关键帧动画 | 不依赖图片资源,纯代码渲染 |
🛠️ 四、使用模型的方法:四轮对话的"进化"之路
这次开发我没有手写任何业务代码,完全通过结构化提示词描述需求,所有代码、注释、状态机设计、边界处理都由 Seed-Evolving 生成。四轮迭代层层递进,正好测试了模型不同维度的能力。
第一轮:从零构建原型(测试代码生成与创意)
我设定了"资深前端工程师兼游戏策划"的角色,要求生成一个单文件 HTML。
💡** 提示词策略**:强调"单文件"、“双击即可运行”、“赛博朋克风”,并要求先给出状态机设计再写代码,预留 JSON 导入接口。
模型表现:模型先输出了完整的 FSM 状态机设计图(IDLE → ROLLING → MOVING → LANDED → QUIZ/EVENT…)和数据流架构,然后一次性给出了包含 HTML/CSS/JS 的完整代码,甚至内置了 12 道证券从业高频易错题,开箱即用。
第二轮:增加游戏深度(测试长程上下文与逻辑编排)
为了让游戏好玩,我要求增加"道具卡系统"和"LocalStorage 持久化"。
💡提示词策略:明确三张道具的具体效果(内幕消息排除错项、央行护盘免扣罚、杠杆卡翻倍),要求先给出状态机扩展设计再改代码,并强调"保持原有游戏逻辑不被破坏"。
模型表现:这是最考验模型的一步。Seed-Evolving 没有推倒重来,而是在原 FSM 上叠加了"持有 + 激活"双层道具模型,精准插入了宝箱格、背包 UI、道具消耗逻辑。它甚至主动处理了边界情况:移动中禁止使用道具、同种效果不能重复激活、资产归零/通关时清除存档。
第三轮:架构重构与错题本(测试复杂任务拆解)
为了支持服务端题库和错题持久化,我要求将项目拆分为前后端分离模式,并新增错题本。
💡提示词策略:提出"前后端分离"、“查看错题”、“RESTful API”、"零运行时依赖"等约束,并要求保留前两轮所有功能。
模型表现:模型把近 2000 行的单文件拆成了 7 个 ES 模块(api/state/board/bag/quiz/wrongbook/app),后端用纯 Node 内置模块写了 HTTP 服务(没有用 Express,npm install都省了),错题本按题库 ID 隔离、自动累加错误次数和最近答错时间。重构后所有原有功能一一对应,没有一处遗漏。
第四轮:多格式解析(测试算法与鲁棒性)
最后我提出"通过读取不同文件格式自动出题"。
💡提示词策略:直接列举 JSON/CSV/TXT/MD/YAML 五种格式,要求"不引入第三方依赖",并提供格式示例。
模型表现:模型手写了完整的解析器——支持 CSV 双引号转义、Markdown 的### 题目 + - A. 选项语法(还支持 YAML front matter 提取题库名称)、YAML 缩进栈解析(包括嵌套 list 和行内数组)。第一次运行时 YAML 解析有 bug,我把报错日志贴回去,模型立刻定位到"栈帧 lastKey 丢失"的根因并修复,六种格式全部通过实测。
📝 五、总结:AI 编程的"进化"时刻
这次用 Seed-Evolving 开发 FINOPOLY的经历,让我对 AI 编程有了新的认识:
- 它懂业务,更懂架构 :不仅仅是补全代码,它能理解"大富翁"的游戏规则,并将其转化为清晰的 FSM 状态机和单向数据流,代码可读性极高。
- 记忆力惊人 :在第四轮追加多格式解析时,它依然记得第一轮的赛博朋克配色、第二轮的道具激活逻辑、第三轮的模块边界,保持了项目的一致性。
- 重构能力扎实 :从单文件到多模块、从 LocalStorage 到服务端持久化,每一次升级都是平滑演进,没有出现"改完这里坏了那里"的情况。
- 小白的福音 :作为一个不懂前端框架的金融考生,我只需要关注"我想玩什么"、“题目长什么样”,而不用纠结"webpack 怎么配"、“正则怎么写”。
当然,它不是 100% 完美——YAML 解析器第一次写出来时有缩进栈的 bug,需要我把报错反馈回去。但这种"你给报错、它给修复方案"的协作方式,本身就比自己从头调试高效太多。
如果你也在备考、做课程设计、或者只是想把枯燥的知识变成游戏,强烈建议试试这种"对话式开发"的工作流。把 AI 当作一个随叫随到的全栈搭档,你负责脑洞和验收,它负责把脑洞变成可以双击运行的代码。
项目目前已经是一个完整的闭环:7 套题库、75 道题、道具系统、错题本、多格式导入全部就绪。下一步我打算把教材的 PDF 转成 Markdown 丢进去,让它变成我真正的"刷题神器"。
毕竟,能一边当赛博金融街的大富翁,一边把证券从业证考下来,谁还愿意死记硬背呢?