linux.do
21.5K subscribers
124K photos
201 videos
122 files
261K links
linux.do最新话题和热议话题
Download Telegram
可以不仅仅是主持人:我如何用一些AI技巧打造一个有灵魂的海龟汤平台


当我们谈论 AI 应用时,往往陷入 RAG (检索增强生成) 或 Prompt Engineering (提示词工程) 的单一维度。但在构建 出前一汤 —— 一个多人即时海龟汤推理游戏时,我发现单纯依靠实时推理是远远不够的。

这一次,我想聊聊我做AI主持海龟汤的心路历程。

----------------------

什么是海龟汤

在海龟汤中,展现给玩家的是汤面,真相被称作汤底,这个游戏至少 2 个人才能玩:有一个人是主持人,他在知晓汤底的情况下,对玩家的猜测作出判定,给出是/不是/是或不是/无关的回答。
一位船长下船后,去餐厅喝了一碗海龟汤。 喝完之后,他痛哭流涕,随后自杀了。 请问:为什么?
你可以提问或给出猜测,然后基于得到的反馈,继续猜测,直到找到真相。

正确答案是:

船长多年前曾遭遇海难,和船员在荒岛漂流,即将饿死。 当时,一位同伴端来一碗肉汤,说是 “海龟汤” ,船长喝了之后活了下来,但同伴死了。
多年后,他在餐厅喝到了真正的海龟汤,发现味道和当年那碗完全不一样。 他瞬间明白了:当年同伴给他吃的根本不是海龟,而是那位死去的同伴自己的肉。 出于巨大的愧疚和绝望,他选择了自杀。

从半个小时5美刀到可持续的支出

原本做这个网站,就是为了和女朋友一起玩海龟汤。于是用了谷歌的Gemini免费api,基本能应对几个人玩的需求,后来这个网站被抖音的博主发现后宣传了一波,带来了几百人进入网站。

很显然,这时候免费api无法满足需求。首先我做的是接入到之前搭建好的Gemini key池,但是仍然经不住用户的大量提问。

为了不让第一批用户流失,我果断接入了openrouter取代key池,结果不到半小时立马花了5美元。

这对我这个用爱发电的个人开发者来说,简直是破产倒计时。

痛定思痛,我开始寻找更具性价比的方案。经历了一番漫长的模型“迁徙”——从最初还在实验阶段的 Gemini Thinking Mode,转向了速度极快的 Gemini 2.0 Flash,最后锁定了 DeepSeek V3.2

最关键的一步是,我利用了 DeepSeek 官方支持的 Context Caching(上下文缓存) 技术。海龟汤的规则、汤面设定动辄几千 token,如果每次对话都重复传输,不仅慢,而且都是冤枉钱。通过缓存技术,只需要支付一次“记忆成本”,后续的对话都能复用这段缓存,直接命中了“降本增效”的靶心。

这一套组合拳下来,成本直接降低了 90% 以上,终于让这个网站能够可持续地运转下去了。

从“人工智障”到“全知全能”的困境

海龟汤(Lateral Thinking Puzzle)的魅力在于信息差。作为主持人,你必须全知全能(知道真相),但又要守口如瓶(只能回答“是/不是”)。

最初,我直接通过 Prompt 把汤面和汤底塞给 AI:
“你是一个主持人,汤面是… 汤底是… 请回答玩家的问题。”
结果是:

1. 如果开启思考模式,主持人反应很慢,而且token消耗翻倍
2. 如果不开思考模式,AI回答的逻辑性很差,很多海龟汤的汤面充满了叙述性诡计。汤底一般都有着复杂的逻辑和人物关系,AI很难在500ms内构建出严谨的逻辑防线

在几十轮的测试后,我意识到:让一个 AI 既要理解复杂的谋杀诡计,又要构建严谨的逻辑防线,还要扮演生动的角色,这太强机所难了。

我们需要把“思考”和“表达”拆开。

----------------------

走过的弯路:向量检索 (RAG) 的“智障时刻”

在设计双层架构之前,我其实先尝试了 RAG (检索增强生成) 方案。

我的设想很完美:做一个“智能缓存层”。

1. 把每一次玩家的提问和 AI 的回答存入向量数据库
2. 通过用户反馈和人工干预,标记出正确的回答
3. 当前 10 次打向LLM的提问积累了足够的数据后,后续玩家如果问了类似的问题,就直接从数据库捞出AI回答最多的答案,或者是人工标记的正确答案,不再消耗 AI Token,还能提高准确度。

但在海龟汤里,这个方案完败。

核心原因在于,向量检索看重的是“语义相似度”,而不是“逻辑精确度”。

在海龟汤中,玩家经常会进行极为细微的试探:

玩家 A 问:“他是自杀吗?”
玩家 B 问:“他是被杀吗?”

在向量数据库眼中,这两句话的 Embedding(语义向量)极度相似,甚至可能被判定为同一个意图。
如果有一次 AI 回答了“是自杀”,缓存记录了下来。下次有人问“他是被杀吗”,RAG 很可能因为高相似度,直接自信地甩出缓存里的“是”——瞬间导致游戏逻辑崩塌。

海龟汤需要的是字斟句酌的逻辑判定,而不是模棱两可的语义搜索。这次失败让我意识到:不能依赖概率,必须依赖结构化的逻辑。

----------------------

核心技术:双层 AI 架构与 Logic Profile

为了解决这个问题,我设计了一套 双层 AI 架构

Layer 1: The Architect (架构师) —— 离线深思

这是系统的核心。每当一道新题库入库时(也可以是按需触发),后台会触发一个高算力模型,我们称之为 Architect

它的任务不是陪玩家聊天,而是进行深度逻辑拆解,生成一份结构化的 Logic Profile (逻辑档案)

这个过程不需要实时,可以花 30 秒甚至更久。Architect 会思考:

这个故事的核心诡计是什么?
到底有哪些物理证据?
更多我需要的元数据

最终,它会生成一份包含游戏所有元数据的 JSON 存入数据库

Layer 2: The Host (主持人) —— 实时响应

当玩家开始游戏时,面对他们的其实是 Host

Host 不需要消耗大量算力去推理真相,它只需要读取 Architect 预先生成的 Logic Profile。因为最难的逻辑判断已经被“预缓存”了,Host 运行在响应速度极快的模型上,专注处理玩家的自然语言交互。

这就像游戏开发中的“预渲染”:把最复杂的计算留在离线阶段,把最流畅的体验留给实时阶段。

----------------------

✨️ 预缓存带来的产品质变

这种架构不仅仅是为了省钱/加速/提高准确度,它直接方便了我开发后续的核心功能:

1. 通灵召唤与“认知盲区”技术

出前一汤 中,玩家可以进行通灵召唤,抽卡召唤故事里的人物或物品来对话。

但这有一个巨大的逻辑陷阱:死者知道自己怎么死的吗?

如果是被背后偷袭,死者就不应该知道凶手是谁。如果实时让 AI 判断这一点,很容易露馅。
但在 Logic Profile 中,Architect 已经预先定义好了每个角色的 认知盲区

基于这份档案,Host 在扮演角色时就有了完美的“剧本”。玩家会发现,召唤的角色只会描述自己视角的事情,像是在上演罗生门。

这种基于视角的叙事碎片,正是推理游戏的精髓。

2. 现场搜证:有序的随机

我们还做了一个类似“刮刮乐”的现场搜证功能。玩家面对 6 个档案袋,需要消耗积分刮开线索。

这 6 个线索不是随机生成的,而是 Architect 精心设计的:

● 1 个核心物证(直接指向凶手)
● 3 个侧面线索(辅助推理)
● 2 个干扰项(专门用来误导玩家)

如果完全依赖实时 AI 生成,它往往编不出高质量的干扰项。只有通过预生成的 Logic Profile,我们才能保证每一局游戏的体验都是经过“设计”的。

----------------------

不仅仅是文字:沉浸式体验的打磨

除了后端的硬核逻辑,作为独立开发者,我也在前端体验上下足了功夫。

调查卷宗与工作台

推理游戏最大的乐趣在于整理线索。我不希望玩家还要拿纸笔记录,所以在游戏里内置了一个完整的“侦探工作台”:

● 案卷 Tab:自动收集解锁的文字/图片线索
● 物证 Tab:通过网格视图管理搜证结果,支持打上「关键」「存疑」「排除」的印章
● 可视化笔记:将关键问答像便利贴一样钉在案情白板上

动态立绘系统

利用 Architect 生成的角色描述(Prompt),我们对接了图像生成模型,为每个召唤角色生成专属立绘。
为了防止剧透(比如死者不能画得太血腥导致直接看出死法),Architect 的生图 Prompt 遵循一套严格的美学与防剧透原则

----------------------

结语:技术服务于沉浸感

出前一汤 的开发过程让我明白,AI 原生应用如果不做逻辑分层,很容易变成一个单纯的 Chatbot 壳子。

通过引入 Architect (离线深思)Host (在线快响) 的双层架构,利用 Logic Profile 将非结构化的故事转化为结构化的游戏数据,我们实际上是在用 AI 模拟人类游戏设计师的工作流。

这让 AI 能够驾驭海龟汤这种这种极度依赖逻辑闭环和信息差的游戏。

当然,技术只是手段。当你深夜和朋友在房间里,看着屏幕上“死者”发来的那句充满了遗憾与未知的证词时,那一刻的沉浸感,才是我想带给每一位玩家的礼物。

----------------------

One More Thing

作为一个不需要下载、打开即玩的时候 PWA 应用,出前一汤 完美适配了移动端。

欢迎来试玩:出前一汤

同时也欢迎大家在评论区交流 AI 应用开发的心得!
3 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: 有希 长门)

Invalid media:
image
image
image
image
有什么AI修图app推荐吗?比如把照片搞成徕卡风味的

要是能在app里对风格化的程度进行微调就更好了

免费或者付费额度不太高(10r/月)这样

2 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: ck yin)
Anthropic 又收紧了

这个
anthropic.com

Consumer Terms of Service

Anthropic is an AI safety and research company that's working to build reliable, interpretable, and steerable AI systems.

15 posts - 15 participants

Read full topic

via LINUX DO - 最新话题 (author: xuan)

Invalid media:
image
image
大家有推荐的免费云服务器、EC2之类的吗?目前知道amazon新用户可以免费一年

好像甲骨文有个终身免费的?不知道其他云有没有

13 posts - 10 participants

Read full topic

via LINUX DO - 最新话题 (author: paps)
有没有佬友有邀请码,求个邀请码

有个朋友看这个论坛挺有意思的,我还不到三级,实在天天刷了,帖子满足要求太慢了,求个本站邀请码

9 posts - 5 participants

Read full topic

via LINUX DO - 最新话题 (author: Jeff zhao)
今天成为一员啦,潜水小半年

正式成为佬友,以后可以和大家一起吹水了~~

14 posts - 12 participants

Read full topic

via LINUX DO - 最新话题 (author: huyoo)
ai总结是坏了吗?

不知道大家会不会用这个功能,我对不了解的领域的帖子的时候都会让ai总结一下,今天在用的时候一直这样,是没额度了吗?

4 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: mengnimen)

Invalid media: image
这Cursor用的也太快了

12号开通的pro 现在显示已经用了20$, 我感觉也没怎么用,, 额度是从这里看吗?

我现在只敢用auto了

3 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: 张大宇学不动)

Invalid media: image
【抽奖】GLM Coding Plan 7日体验卡 * 2

抽奖主题: 抽掉 GLM Coding Lite 送的2张7日体验卡
第一次使用抽奖功能,体验一下 😆
🏆️ 奖品详情:

[奖品1]:[GLM周卡]
[奖品2]:[GLM周卡]

:three_o_clock: 活动时间:

截至时间:[01/16 14:00]
截至时间:[01/16 17:00]

📝 参与方式:

在本帖下回复任意内容

🔍️ 抽奖规则:

每位用户仅允许参与一次。
使用官方抽奖工具随机抽取中奖者。

⚠️ 注意事项:

本活动将在活动截止时间后关闭回帖,以确保公正性。
中奖者将在活动结束后12小时内在本帖公布,并通过私信通知领奖方式。
所有规则及抽奖结果由活动发起人和论坛管理团队最终解释。

9 posts - 9 participants

Read full topic

via LINUX DO - 最新话题 (author: automan)
求助风佬机场支付不了

救命呀,点击了去支持,显示record not found

{

“error_msg”: “record not found”,

“data”: null

}

5 posts - 3 participants

Read full topic

via LINUX DO - 最新话题 (author: linus)

Invalid media:
image
image
100天的徽章我来啦

现在已经养成了习惯,根本戒不掉 😂
2 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: S大魔导)

Invalid media: image
windows终端工具求助

佬们,你们有什么好用的windows终端工具么?原版cmd或者shell用CC老是闪屏

15 posts - 10 participants

Read full topic

via LINUX DO - 最新话题 (author: 范特西)
你们的CF账户有免费Snippets功能吗?

最近在看CF Snippets,想着部署一个凳子玩玩来着。
但是自己的账户没有 snippets 功能
我自己有xyz\cn\com\top几个域名。

这似乎是一个灰度测试,还是说现在并不给免费使用,必须订阅..

今天白花了50(xyz10年+xyz1年)的域名费用。

晚上回去吃泡面咯。

10 posts - 8 participants

Read full topic

via LINUX DO - 最新话题 (author: RemMai)
用Gemini给ZX.CI弄了个展示页

展示:

ZX.CI

源码:

vzxzv/zx.ci

有需要的直接 vercel 一键部署

1 post - 1 participant

Read full topic

via LINUX DO - 最新话题 (author: 苏哥拉弟)
team的对话别人会看到吗? 信息是安全的吗?有没有大佬知道?

2 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: 火星号)
kiro今天还可以,稳定,不像前几天,一直没有响应。

8 posts - 6 participants

Read full topic

via LINUX DO - 最新话题 (author: xycxyc)

Invalid media: image
antigravity每5小时token大概是多少,有佬知道吗

claude opus每5小时的token限额有佬知道吗,大概的就行

6 posts - 5 participants

Read full topic

via LINUX DO - 最新话题 (author: talker)
gemini-3-image 的api是不支持上下文的吗

让它对前一个生成出来的图片进行修改,结果给我当成全新的指令了,在ai studio里又是能够理解的 :tieba_028:

3 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: ko ma)

Invalid media:
image
image
告别干等!3 分钟让 OpenCode 自动通知你任务完成

让 OpenCode 在 AI 回复完成后自动发送 macOS 系统通知,再也不用盯着屏幕等待了。


运行效果

配置完成后,每当 OpenCode 完成一次对话,macOS 右上角会自动弹出系统通知提醒你。

为什么需要任务完成提醒?

使用 OpenCode 处理复杂任务时,AI 可能需要较长时间来思考和执行。这时你可能会切换到其他窗口做别的事情,但又担心错过 AI 的回复。

通过配置任务完成提醒,当 OpenCode 完成当前对话并进入空闲状态时,macOS 会自动弹出系统通知,提醒你回来查看结果。

前置条件

macOS 系统
已安装 OpenCode CLI
脚本编辑器的通知权限已开启

开启脚本编辑器通知权限

macOS 的 osascript 命令依赖「脚本编辑器」(Script Editor)的通知权限。按以下步骤开启:

第一步:触发权限请求

1. 打开 脚本编辑器(Script Editor) 搜索「脚本编辑器」或「Script Editor」打开
2. 在脚本编辑器中输入以下代码:
display notification "测试通知" with title "脚本编辑器"

3. 点击运行按钮(▶️)执行脚本

第二步:开启通知权限

1. 打开 系统设置(System Settings)
2. 点击左侧 通知(Notifications)
3. 在应用列表中找到 Script Editor(脚本编辑器)
4. 点击进入,开启 允许通知(Allow Notifications)
5. 通知样式选择 横幅(Banners)或 提醒(Alerts)

第三步:验证权限生效

回到你的终端(Terminal / iTerm / IDEA Terminal 等),执行:
osascript -e 'display notification "任务完成" with title "OpenCode"'

如果看到系统通知弹出,说明权限配置成功。

配置步骤

步骤一:创建插件目录

OpenCode 会自动加载 ~/.config/opencode/plugin/ 目录下的 JS/TS 文件。

打开终端执行:
mkdir -p ~/.config/opencode/plugin


步骤二:创建通知插件

创建插件文件:
nano ~/.config/opencode/plugin/notification.js

写入以下代码:
export const NotificationPlugin = async ({ $, project }) => {
console.log("[NotificationPlugin] 已加载,当前项目:", project?.name)

return {
event: async ({ event }) => {
if (event.type === "session.idle") {
try {
const script = "display notification \"任务已完成,可以回来看看 OpenCode~\" with title \"OpenCode\""
await $`osascript -e ${script}`
} catch (err) {
console.error("[NotificationPlugin] 发送通知失败:", err)
}
}
}
}
}

保存并退出(nano 中按 Ctrl+X,然后 Y,回车)。

步骤三:重启 OpenCode

关闭当前 OpenCode 会话,重新启动即可自动加载插件。

启动后你会在日志中看到:
[NotificationPlugin] 已加载,当前项目:your-project-name


步骤四:验证效果

随便问 OpenCode 一个问题,等待回复完成后,你应该会收到一条 macOS 系统通知。

常见问题排查

问题一:syntax error (-2741)

错误信息:
syntax error: 预期是""",却找到未知的记号。 (-2741)

原因: 引号嵌套处理不当。在 Bun shell 模板字符串中直接嵌套单引号和双引号会导致解析失败。

错误写法:
//  这样写会报错
await $`osascript -e 'display notification "任务完成" with title "OpenCode"'`

正确写法:
//  先构造脚本字符串,再传给 osascript
const script = "display notification \"任务完成\" with title \"OpenCode\""
await $`osascript -e ${script}`


问题二:没有收到通知

1. 检查脚本编辑器通知权限 系统设置 → 通知 → 找到 Script Editor → 确保「允许通知」已开启
2. 检查勿扰模式 确保 macOS 勿扰模式未开启
3. 检查插件是否加载 启动 OpenCode 时查看是否有 [NotificationPlugin] 已加载 日志
4. 手动测试 osascript 在终端执行:
osascript -e 'display notification "测试" with title "测试"'
如果这个命令也没有通知,说明是系统权限问题

问题三:插件未加载

确认文件路径正确:
ls ~/.config/opencode/plugin/
# 应该看到 notification.js

确认文件语法正确:
node --check ~/.config/opencode/plugin/notification.js


参考链接

OpenCode 官方插件文档
OpenCode 插件事件列表

----------------------

3 posts - 2 participants

Read full topic

via LINUX DO - 最新话题 (author: twojin)

Invalid media: image
交行史诗级大毛,人人2000。(有实力的佬自取)

无他,看图

23 posts - 18 participants

Read full topic

via LINUX DO - 最新话题 (author: 寂然如故)

Invalid media: image
周五了,现在开放一些活动

现开放代喝水
代上厕所

活动截止到今晚

8 posts - 8 participants

Read full topic

via LINUX DO - 最新话题 (author: 猫娘)