【攻略】游戏中接入大语言模型:从乱说话到演戏,踩过的 5 个坑

05/1266 浏览开发心得
前言
我做了一款 AI 驱动的游戏——《审讯室》。
核心玩法很简单:玩家和 AI 驱动的嫌疑人/NPC 自由对话,AI 根据人设实时生成回复,玩家的每一句话都影响剧情走向。
听起来很酷对吧?做起来全是坑。
这篇攻略总结了我在项目中接入大语言模型的实战经验,从单模型崩溃到双模型协作,从对话前言不搭后语到剧本驱动叙事,以及如何用免费模型额度支撑上万次游戏体验。
---
一、痛点篇:LLM 在游戏中的三大难题
痛点 1:LLM 不是演员,是公务员
最初的设想很美好——给 LLM 一个角色设定,它就能演活了。
现实是:你把一份长达 800 字的角色档案喂给它(性格、弱点、背景故事),它确实会照着演。但演出来的是“逐条遵守员工手册的公务员”,而不是“有血有肉的演员”。
症状:
· 每句话都像在填空:“根据我的懦弱性格,我应该说我什么都不知道。”
· 出示证物后,它不会惊讶,而是机械地跳到下一条规则。
· 对话没有连贯性,前面还在害怕,下一句突然变平静。
痛点 2:视角混淆——它到底是谁?
审讯游戏需要给玩家提供“推荐话术”选项。我让 LLM 同时做两件事:
1. 扮演嫌疑人,生成对话
2. 站在警官角度,生成 3 个推荐话术
结果 LLM 经常搞混自己是谁。推荐话术以嫌疑人的口吻输出:“我只是听命行事……”。玩家看到选项直接出戏。
痛点 3:对话像跳针唱片,不连贯
数值驱动的对话系统有个先天缺陷:对话走向完全由隐藏数值(恐惧、信任)决定。数值变了,话题就跳了。前面还在聊账本,出示了一个证物后,嫌疑人突然跳到另一条完全不相关的内容。
症状:
· 出示证物 → 嫌疑人应该先对证物做反应 → 但 LLM 可能直接跳到“你想怎样?”
· 玩家刚威胁完 → 下一轮嫌疑人可能突然变得很配合(因为 trust 数值变化了)
---
二、解决方案篇:从 V1 到 V5 的架构演进
V1(失败版):单一 LLM 全包
一个 LLM 同时承担:角色扮演 + 生成建议 + 判定数值变化。
问题:视角混淆、对话机械、数值占用 LLM 太多“注意力”。
V2(补丁版):加格式约束
在 System Prompt 里加各种格式约束,正反面示例,服务端兜底过滤。
效果:有改善,但治标不治本。同一个模型在两个角色之间反复横跳,天然会混淆。
V3(减负版):LLM 只演戏,数值服务端算
核心改动:
· LLM 不再返回数值(删除 hidden_changes 字段)
· 数值完全由服务端根据规则计算
· 把数值替换为“当前感觉”注入 Prompt(如“你感到胸有成竹,警方拿你没办法”)
效果:角色扮演质量明显提升。但推荐话术视角问题仍然存在。
V4(双模型架构):雇两个 AI,各干各的事
这是最关键的架构升级。
模型 A(嫌疑人):只负责扮演嫌疑人。System Prompt 纯角色设定,不生成任何建议。
模型 B(警官参谋):只负责生成推荐话术。System Prompt 是审讯策略顾问,完全从警官视角出建议。
通信流程:
1. 玩家输入 → 服务端先调模型 A,拿到嫌疑人回应
2. 用 A 的回应调模型 B,拿到推荐话术
3. 组合发给客户端
效果:推荐话术视角问题彻底解决。嫌疑人扮演质量进一步提升(卸掉了“出谋划策”的负担)。
V5(模型池优化):免费模型怎么用
百炼平台有大量模型提供免费额度(一次性/每个模型100 万 Token/注册起3 个月有效)。我把它们全部接入,实现自动切换:
· 所有模型共享一个 model_list
· 共用同一个 current_model_index
· 遇到 403(免费额度用完)→ 自动跳到下一个
· 遇到 400(多模态模型不支持纯文本)→ 初始化时自动过滤
· 新模型直接追加到列表末尾,无需改代码
关键经验:不要区分“嫌疑人专用”和“参谋专用”的模型列表。共用一个池子、共用一个索引,维护成本最低。
---
三、Prompt 工程篇:怎么写才能让 LLM 演好角色
1. 用“终极动机”替代“性格列表”
错误写法:列出大段性格特征(胆小、狡猾、自私、爱女儿……)
正确写法:只给一个终极动机 + 一个演绎铁律
【你的终极动机】
活下来,保护女儿,为自己谋取最大利益。你可以在懦弱、狡猾、自私之间反复横跳。
【你的演绎铁律】
1. 你无权判定自己是否在说谎,你只知道说出这句话对你是否有利。
2. 你的性格不是固定的标签,而是你达成终极动机的工具。
原理:性格列表是“紧箍咒”,LLM 会逐条遵守。终极动机是“驱动引擎”,LLM 会自己想办法达到目的。
2. 用“感觉”替代“数值”
错误写法:把 fear=85、trust=15 注入 Prompt
正确写法:服务端根据数值区间,转换成“当前感觉”:
```
fear < 40 → “你感觉胸有成竹,认为警方拿你没办法”
fear 40-70 → “你开始心虚,但还想再狡辩一下”
fear > 70 → “你惊慌失措,感觉快要瞒不住了”
```
原理:给 LLM 看数字 = 给它看体检报告。给它讲故事 = 给它讲戏。
3. 推荐话术的生成规则
模型 B(警官参谋)的 System Prompt 中加保底规则:
```
第 1 条:直接回应当前对话的话术(关联性最强)
第 2 条:可推进案情的替代问法(关联性强)
第 3 条:保底推进话术(确保总是可用)
```
同时给正反面示例——正面示例全是警官视角的纯对话文本,反面示例全是嫌疑人视角的句子(标注“绝对禁止”)。
---
四、成本控制篇:如何用免费额度支撑上万次游戏
消耗测算
单次 LLM 调用约 1000 Token。一次完整游戏约 20个回合,80 轮对话(双模型各 40 次调用),约 50000 Token。
策略
· 目前百炼平台上约 150 个纯文本模型各有 100 万免费额度
· 共享一个模型列表,自动切换
· 总免费额度约 1.5 亿 Token,可支撑约 5000 次完整游戏
· 加上新的模型刷新,token优惠政策,长期运营基本无压力
双模型成本
模型 B(参谋)的输出很短(只有 3 条建议),整体成本只增加约 30%,不是翻倍。
---
五、总结:做 LLM 游戏的核心经验
1. 不要让一个 LLM 做太多事。角色扮演和策略建议必须分开,双模型架构是最低配置。
2. LLM 是演员,不是计算器。数值判定交给服务端,LLM 只负责根据“当前感觉”演戏。
3. Prompt 要写“动机”不要写“规则”。性格是工具,动机是引擎。
4. 免费额度是宝藏。共用模型池 + 自动切换能让你几乎零成本运营。
5. 证物是叙事的路标。用证物引导剧情线,用节拍表控制叙事节奏,数值只用来判定结局。
---
附:我用的技术栈
· AI API:阿里云百炼(Qwen 系列 + DeepSeek 系列)
· 架构:双模型协作(A 嫌疑人 / B 参谋)
· 通信:RemoteEvent + 服务端 HTTP
· 叙事:剧本驱动(15 条故事线 × 9 节拍)
· 模型池:179 个免费模型,共用索引自动切换
猜你想搜
taptap 制造llm游戏避坑
10
2
1