〖Code With SOLO〗我是如何用 SOLO 开发《天台十句》的

本帖是介绍我利用SOLO开发《天台十句》的详细过程,以便于大家参考,原参赛贴在> https://forum.trae.cn/t/topic/12970?u=fs_sdust

1. 开始:我没有让 SOLO 先写代码,而是先帮我拆问题

《天台十句》最初不是一个明确的技术需求,而是一个很模糊的想法:

玩家在天台上遇见一个站在栏杆边缘绝望的女孩,只能说十句话。每一句话都应该有后果。

这个想法听起来像文字游戏,也像 AI 聊天角色,但真正难点在于:

  • 玩家是自由输入,不是固定选项
  • AI 回复要自然,不能像系统判定
  • 游戏规则又必须稳定,不能完全靠模型自由发挥
  • 最后还要真实上线,而不是停留在 demo

所以我一开始给 SOLO 的任务不是“写一个聊天页面”,而是让它帮我拆:

做一款 AI 原生叙事游戏。
玩家只有十句话。
每句话都会影响角色状态、情绪、剩余机会、好感和结局。
请先帮我拆解前端、后端、状态机制、LLM Prompt 和部署方案。

SOLO 把项目拆成了几个部分:

  • 前端体验:标题页、开场序章、主游戏界面、结局页、后日谈
  • 游戏状态:剩余机会、好感、情绪、角色状态、结局、存档
  • 后端接口:聊天、提示、后日谈、结局摘要、健康检查
  • LLM 机制:主对话 Prompt、机制判断、结局总结
  • 资源工程:图片、音频、移动端资源、预加载
  • 部署验证:Nginx、systemd、HTTPS、线上健康检查

这一步很关键。它让一个“我想做个 AI 游戏”的想法,变成了一个能逐步实现的工程项目。


2. 第一版:先让游戏跑起来

SOLO 先帮我做了最小可玩的版本。

第一版主流程是:

  1. 玩家输入一句话
  2. 前端记录玩家消息
  3. 剩余机会减少 1
  4. 调用后端 /api/chat
  5. 后端调用 LLM
  6. 返回艾的回复
  7. 前端显示打字机效果
  8. 回合继续或进入结局

这个版本已经能玩,但更像一个“带倒计时的 AI 聊天框”。

它解决了“能不能跑起来”的问题,但还没有解决“规则是否稳定”的问题。

很快我发现一个核心矛盾:

AI 很适合写自然回复,但不适合在同一次回复里稳定完成所有机制判断。


3. 最大的一次重构:把“表达层”和“裁判层”拆开

早期版本里,我让主 LLM 同时做很多事:

  • 写艾的自然回复
  • 判断情绪
  • 判断好感
  • 判断角色状态
  • 判断结局
  • 在回复里输出机制标签

比如:

[情绪:柔软][状态:观察][好感度+5]
……你这句话,倒是没那么吵。

前端再从正文里解析这些标签。

这个方案开发很快,但真实测试后问题很多:

  • LLM 有时忘记输出标签
  • 标签和正文偶尔不一致
  • 情绪 CG 很难稳定触发
  • 死亡结局不容易达成
  • 前端解析正文很脆弱
  • 测试也不好写

于是我让 SOLO 重新阅读前后端代码,并提出重构要求:

情绪 CG 难以触发。
应当单独加一层中间件判断 LLM 输出的是什么情绪或 normal。
主对话不要同时负责所有机制判断。
把各种判断机制拆开。

SOLO 给出的方案是:

主对话 LLM 只写自然回复;后端新增结构化裁判层,专门输出机制结果。

重构后,/api/chat 对前端仍然是一次请求,但后端内部变成两步:

  1. 主对话 LLM:生成艾的自然回复
  2. 机制裁判 LLM:根据玩家输入、艾的回复和历史状态,返回结构化 JSON

前端不再从正文里解析标签,而是直接消费 evaluation

这个改动之后,项目稳定了很多。

我后来总结成一句话:

AI 产品不要只让 LLM 生成内容,要把 LLM 拆成表达层和裁判层。

表达层负责自然体验。
裁判层负责结构化规则。


4. 我如何让 SOLO 把 Token 成本变成玩法

《天台十句》的核心机制是“十句话”。

这不仅是剧情设定,也是 LLM 产品设计。

如果做无限聊天,上下文会越来越长,成本和延迟都会上涨。SOLO 帮我把这个限制转化成玩法:

  • 玩家每说一句话,基础扣 1 次机会
  • 如果玩家说教、命令、否定、物化、放弃她,额外扣 1 或 2
  • 如果玩家真正具体地看见她、尊重边界,好感增加,并返还 1 次机会

也就是说,玩家不是机械消耗回合,而是在承担表达的后果。

一句话可能是:

基础 -1
刺伤 -2
好感 +1
最终净变化 -2

这个机制让“说话”变成了资源管理,也让玩家更认真地思考每一次输入。

这就是我觉得 AI 原生游戏有意思的地方:

技术限制本身可以成为玩法。


5. SOLO 如何帮我处理视觉体验

这个项目不是一个纯聊天页面。为了让玩家真正进入天台场景,我让 SOLO 一起做了完整视觉流程。

开场序章

SOLO调用生图skill 帮我做了多张 CG 的开场序章:

  • 走上楼梯
  • 推开天台门
  • 看见栏杆边的身影
  • 靠近她
  • 第一次开口前的停顿

玩家不是直接进入聊天框,而是先进入一个电影式场景。

情绪 CG

后来我又让 SOLO 拆出情绪 CG:

  • 刺痛
  • 惊讶
  • 柔软
  • 好奇

这些不是长期状态,而是玩家某一句话造成的瞬时反馈。

状态 CG

状态 CG 则表现艾当前的长期位置:

  • 防备
  • 观察
  • 动摇
  • 回身
  • 临界

这样,游戏画面既能表现“这一句话带来的情绪波动”,也能表现“整个局势正在走向哪里”。


6. SOLO 如何根据真实反馈继续迭代

项目上线后,我没有停在“能玩”阶段,而是继续让 SOLO 帮我根据真实环境反馈迭代。

问题 1:死亡结局难达成

有用户反馈死亡结局比较难打出来。

我让 SOLO 在真实环境访问网站做模拟测试,并阅读前后端逻辑。最后发现问题是:原来的回合机制太固定,玩家说了刺伤她的话,也只是普通扣 1。

于是 SOLO 帮我加入了 pressure_delta

  • 轻度刺伤:额外扣 1
  • 严重刺伤:额外扣 2
  • 普通回复:不额外扣
  • 解析失败:保守处理,不误扣

这样死亡结局不再只是“回合耗尽兜底”,而会被玩家的具体表达动态推近。

问题 2:情绪 CG 不稳定

这个问题也通过“结构化裁判层”解决。

现在情绪不再依赖自然回复里的标签,而是由裁判明确返回:

normal / sting / surprise / soft / curiosity

前端拿到 normal 就清空瞬时情绪 CG;拿到其他情绪就直接切换对应 CG。

问题 3:默认 API 没生效

本地测试时,页面出现模拟回复:

此为模拟回复,请在设置中配置 API Key

SOLO 帮我排查后发现:后端 .env 没有启用默认 API 配置。

后来我配置了本地默认 API,并重启后端验证:

  • 前端不填 Key
  • /api/chat 仍然能走服务器默认 API
  • 返回真实 LLM 回复和结构化 evaluation

同步到服务器后,也验证了线上默认 API 正常。

问题 4:资源太大

早期人物 PNG 有 8MB 以上,BGM 也超过 5MB。

SOLO 给出生产级优化建议,并帮我实施:

  • PNG 转 WebP
  • 人物和结局图拆 1600 / 900 两档
  • BGM 转低码率 OGG / MP3
  • 前端用 <picture> 做移动端资源切换
  • 增加预加载清单

这个优化让线上加载更稳定,移动端体验也更好。


7. SOLO 如何帮我部署上线

这个项目最终不是本地 demo,而是真实上线。

SOLO 帮我完成了:

  • 前端 npm run build
  • 后端 Go 编译
  • Nginx 静态资源部署
  • systemd 后端服务
  • HTTPS 证书
  • /api/health 健康检查
  • 线上 /api/chat 验证

部署过程中还发现一个很真实的问题:

本地 .env.local 里有:

VITE_BACKEND_URL=http://localhost:8080

如果直接构建生产包,线上用户会请求他们自己电脑的 localhost:8080

SOLO 在部署前帮我检查到了这个问题,重新用生产同源 /api 构建,并确认前端包里不再包含 localhost:8080

这类问题只有走完整部署链路才容易暴露。


8. 最终结果

目前《天台十句》已经可以完整体验。

在线地址:

已完成能力:

  • 开场电影式序章
  • AI 自由输入对话
  • 结构化机制裁判
  • 动态剩余机会
  • 好感系统
  • 情绪 CG
  • 角色状态 CG
  • 三种结局
  • 相识结局后日谈
  • 存档系统
  • 成就系统
  • 提示系统
  • 结局摘要
  • 图片与音频资源优化
  • HTTPS 线上部署
  • 服务器默认 API

工程验证:

npm test -- --run
65 passed
go test ./...
passed
npm run build
passed

线上健康检查:

https://tiantaishiju.top/api/health
{"status":"ok"}

线上 /api/chat 不带前端 Key 也能返回真实 LLM 回复和结构化裁判结果。


9. 我觉得 SOLO 最大的价值

这次使用 SOLO,我最大的感受是:

SOLO 不只是帮我补代码,而是帮我完成了从想法到线上产品的闭环。

它参与了:

  • 需求拆解
  • 前端实现
  • 后端实现
  • Prompt 设计
  • 机制重构
  • 资源优化
  • 测试补齐
  • 浏览器验证
  • 服务器部署
  • 线上问题排查
  • 根据用户反馈继续迭代

尤其是“读完整代码 → 发现问题 → 给生产级建议 → 修改 → 测试 → 部署 → 再验证”这条链路,让我感觉它更像一个工程协作者,而不是简单的代码生成器。


10. 这次实践沉淀的方法

我从《天台十句》里沉淀出一个可复用方法:

对 AI 互动产品,不要让一个 LLM 同时负责所有事情。

更稳的做法是拆层:

  • 主 LLM:负责表达,保证自然、角色感、语气
  • 裁判 LLM:负责结构化判断,保证规则稳定
  • 前端状态机:负责执行结果,保证体验一致

这个方法不仅适用于 AI 叙事游戏,也适用于:

  • AI 角色陪伴
  • 教育对话训练
  • 面试模拟
  • 客服质检
  • 心理支持类产品
  • 互动剧本系统

12. 最后

《天台十句》对我来说,不只是一个小游戏。

它是一次完整的 AI 原生产品实践:

从一个想法,到工程拆解,到前后端开发,到 Prompt 迭代,到机制重构,到资源优化,到测试,到部署,到真实反馈后的继续改进。

而 SOLO 在这个过程中,不只是写代码的工具,而是帮我一起完成了整个产品闭环。

在线体验: