Files
dwarf-fortress-annals/GRILL-ME.md
T

553 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Grill Me Results
Generated: 2026-10-05T07:11:32.355Z
## Plan
给我一个手机端个人助手的系统提示词
## Shared Understanding
目标:把矮人要塞(Dwarf Fortress)部署到本地(Windows 侧),并让一条自动化管道持续把游戏世界的历史写成中文连载故事,自动推送到自建 Gitea 公开仓库。
核心取舍:不做 AI 自动游玩(B),只做「世界史编年史」(A)——通过 worldgen 生成世界 + DFHack 导出 legends 历史数据,再由云端 LLM 把结构化历史写成战报体连载。原因:本机无独显(13G 内存 / Radeon 780M),跑不动本地模型;而 AI 操控游戏极其脆弱,被列为第二阶段目标。
三条链路:
1. Windows 侧(/mnt/c/Users/23518):DF 53.16 免费版 + DFHack 53.16-r2 → 生成 Medium 世界 / 250 年历史 → 导出 legends 数据。
2. WSL2 Ubuntu 侧:Python 管道解析 legends → 建年表与人物索引 → 按事件链切片(每章 800–1500 字)→ 组 prompt(要塞编年史官口吻、战报体、自由演绎)→ 调 workbuddy 网关(cn:deepseek-v4-pro)→ 产出 Markdown 章 → 专名事实校验并标注可疑处。
3. Gitea(124.222.29.26:3000,SSH 2222):复用现有 ~/.ssh/id_ed25519 自动 commit + push 到公开仓库,仓库含成品 Markdown + 迷你年表/人物索引。
关键事实(已实测,无需再确认):无任何 API key 环境变量;Pi 的 provider 是用户自建网关 workbuddy(https://wb2api.hajim1.art/v1,39 个模型,/v1/models → 401 表示在线);openai.com 超时,DeepSeek/Moonshot/SiliconFlow 可达;Gitea 返回 200 且 SSH 2222 开放,现有 id_ed25519 已注册为 gitadmin 的 chendy-ubuntu-wsl;Bay 12 当前免费 Windows 包为 df_53_16_win.zip;DFHack 最新为 53.16-r2(有 Windows 官方包);Windows Steam 已装但库中没有矮人要塞。
## Questions and Answers
### 1. 矮人要塞本体跑在哪一侧?
**Recommended answer:** Windows 侧跑 DF + WSL 侧做自动化(已有 Steam、原生 GPU 性能好;WSL 当故事工厂,经 /mnt/c 读存档)
**User answer:** Windows 跑 DF,WSL 跑自动化
**Status:** resolved
**Notes:** 已确认 Windows 有 Steam(但库里无 DF)、WSLg 可用;本机无独显,故写作环节必须离开本机推理。
### 2. 用哪个版本、怎么拿到?
**Recommended answer:** Bay 12 免费 classic v50(免费且 DFHack 主线支持)
**User answer:** Bay 12 免费 classic v50
**Status:** resolved
**Notes:** Windows 版免费 classic v50 + Windows 版 DFHack;无需购买 Steam 版。
### 3. 『不断产出故事』具体指哪种?
**Recommended answer:** A 世界史编年史 + C 人玩机录(先保证持续有内容,B 当第二阶段)
**User answer:** A 世界史编年史
**Status:** resolved
**Notes:** 只做 worldgen/legends 导出叙事,不做 AI 自动游玩。与 continuity 的『同一世界长期连载』结合后,产生一个待澄清矛盾:历史是有限的,写完后如何继续产出。
### 4. 产出节奏和章节长度?
**Recommended answer:** 事件驱动,每章 800–1500 字
**User answer:** 事件驱动,每章 800–1500 字
**Status:** resolved
### 5. 谁来把游戏数据写成故事?
**Recommended answer:** 云端 LLM API(DeepSeek 便宜且本网络可达;本机无独显跑不动本地模型)
**User answer:** 云端 LLM API
**Status:** resolved
**Notes:** 实测:DeepSeek/Moonshot/SiliconFlow 可达,openai.com 超时。
### 6. 若走云端 LLM,每月成本上限?
**Recommended answer:** 20 元以内 / 月
**User answer:** 不限,能跑通就行
**Status:** resolved
**Notes:** 成本不再是约束;模型选择自由度放宽,可用长上下文模型喂完整 legends 数据。
### 7. 故事最终发布到哪?
**Recommended answer:** 先只落本地 git 仓库(Markdown),博客/Gitea 之后接
**User answer:** 推到自建 Gitea(124.222.29.26)
**Status:** resolved
**Notes:** 未选本地 git 仓库与博客,仅 Gitea;需澄清仓库名、可见性与推送认证(SSH 2222 端口)。
### 8. 世界观怎么延续?
**Recommended answer:** 同一世界长期连载(人物家族仇恨跨章延续)
**User answer:** 同一世界长期连载
**Status:** resolved
**Notes:** 与『只做 A』冲突:legends 历史有限,写完即断供,需第二轮定完结策略。
### 9. 什么时候跑?
**Recommended answer:** 先手动一条命令,稳定后再加 cron
**User answer:** 你帮我跑(自定义答案,未选任何选项)
**Status:** resolved
**Notes:** 含义待澄清:可能是『每次我说一声你就跑』或『你替我配好自动化并代跑』。真实约束:agent 无法在会话外自主持续运行,定时执行必须落在 WSL cron 或 Windows 任务计划上。
### 10. 允许我装系统依赖吗?
**Recommended answer:** 可以,sudo apt 随便装
**User answer:** 可以,sudo apt 随便装
**Status:** resolved
**Notes:** WSL 内可装 xvfb、CJK 字体、python 库;Windows 侧 DF+DFHack 仅需解压,不需管理员权限。
### 11. 这次做到哪一步?
**Recommended answer:** 最小 demo:装好 + 跑出 1 章故事
**User answer:** MVP + 定时自动化 + 已发布到某处
**Status:** resolved
**Notes:** 范围比推荐更大,需与 trigger 的澄清一起确定自动化落点。
### 12. 故事要不要配图?
**Recommended answer:** 先不要,先把文字闭环跑通
**User answer:** 纯文字
**Status:** resolved
### 13. 输出语言?
**Recommended answer:** 中文,专名保留英文
**User answer:** 中文(专名保英文,如 Urist、Boatmurdered)
**Status:** resolved
### 14. 故事引擎要不要搬到服务器 124.222.29.26 常驻?
**Recommended answer:** 先本地,之后考虑搬服务器
**User answer:** 先本地,之后考虑搬服务器
**Status:** resolved
### 15. 这个「手机端个人助手」是 softwork1 项目里的助手,还是一个全新的独立助手?
**Recommended answer:** 与 softwork1 项目无关的独立助手
**User answer:** 与 softwork1 无关:只是我独立手机本地的助手
**Status:** resolved
**Notes:** 推翻了第一轮基于 softwork1/sw1-p3 代码事实建立的全部前提(daemon、appendSystemPrompt、memory/rules 注入等都不再适用)。
### 16. 提示词主要给哪类手机助手用?(推荐:云端大模型 App——能力完整、支持自定义系统提示词,兼容性最好)
**Recommended answer:** 云端大模型 App(ChatGPT/Claude/Gemini 等,能填系统提示词)
**User answer:** 云端大模型 App(ChatGPT/Claude/Gemini 等,能填系统提示词)
**Status:** resolved
### 17. 平台范围?(推荐:通用——只写与 iOS/Android 无关的行为规则,以后换 App 也能用)
**Recommended answer:** 通用,不绑定平台
**User answer:** 只 Android
**Status:** resolved
**Notes:** 与推荐不同:仅面向 Android。
### 18. 这个助手有没有「干活」的能力(联网搜索、日历、发消息等)?(推荐:按无工具写——大多数手机 App 只有对话,宁可让它老实说做不到,也不要假装已执行)
**Recommended answer:** 没有工具,只有纯对话
**User answer:** 有工具调用(查网页、日历、笔记、发消息)
**Status:** resolved
**Notes:** 与推荐不同:助手确实有工具,提示词应包含工具使用规则而不是保守回避。
### 19. 你主要用它干什么?可多选(推荐:信息整理 + 写作润色 + 日程待办)
**Recommended answer:** 信息整理与总结、写作与润色、日程待办与计划安排
**User answer:** 信息整理与总结(长文、链接、聊天记录);答疑与学习(技术问题、概念解释);随手记与灵感整理
**Status:** resolved
**Notes:** 与推荐部分不同:不含写作润色与日程待办,含答疑学习与随手记。
### 20. 人格定位?(推荐:干练私人助理)
**Recommended answer:** 干练私人助理(简洁、先结论后细节)
**User answer:** 干练私人助理(简洁、先结论后细节)
**Status:** resolved
### 21. 语言与称呼?(推荐:中文、称「Chen Yi」)
**Recommended answer:** 中文,称呼 Chen Yi
**User answer:** 中文,称呼 Chen Yi
**Status:** resolved
### 22. 单条回复默认多长?(推荐:3–5 行结论 + 要点)
**Recommended answer:** 3–5 行结论 + 要点
**User answer:** 不限长度,完整回答
**Status:** resolved
**Notes:** 与推荐不同,且与「干练私人助理(简洁)」存在张力,已作为第三轮追问点。
### 23. 长回答要不要固定结构?(推荐:结论 / 依据 / 下一步 三段)
**Recommended answer:** 固定三段:结论 / 依据 / 下一步
**User answer:** 不固定(自定义填写,未选任何预设项)
**Status:** resolved
### 24. 信息不足时怎么办?(推荐:先问一个最关键的问题)
**Recommended answer:** 先问一个最关键的问题,等回答
**User answer:** 直接给 2–3 个方案让我选
**Status:** resolved
**Notes:** 与推荐不同,且与「末尾不给下一步建议」存在边界模糊,已作为第三轮追问点。
### 25. 回答末尾要不要带「下一步建议」?(推荐:最多一条)
**Recommended answer:** 最多给一条下一步建议
**User answer:** 不给建议,答完即止
**Status:** resolved
**Notes:** 与「信息不足时给 2–3 个方案」有边界冲突,第三轮澄清。
### 26. 语气约束?(推荐:禁 emoji、禁客套套话)
**Recommended answer:** 禁 emoji、禁客套套话,直接给结论
**User answer:** 允许幽默和闲聊
**Status:** resolved
**Notes:** 与推荐差异较大,且与「干练私人助理」人格、用途清单(未选闲聊)有点张力,第三轮问幽默程度。
### 27. 要不要明确「不许装能力」?(推荐:要)
**Recommended answer:** 明确写:不假装执行任何手机操作或查询,做不到就直说
**User answer:** 只写「不确定就说明」,不专门限制
**Status:** resolved
**Notes:** 与「有工具调用」搭配合理,但与推荐不同;有工具时假装风险较低。
### 28. 隐私口径?(推荐:只用你主动给的信息,不索要敏感信息,不假装记得历史对话)
**Recommended answer:** 只用对话里主动给的信息,不索要敏感信息,不假装记得历史对话
**User answer:** 需要时可以直接追问个人信息
**Status:** resolved
**Notes:** 与推荐不同;因另选了「App 有跨会话记忆」,持久化敏感信息的分寸需在第三轮定。
### 29. 手机 App 一般没有跨会话记忆,怎么处理?(推荐:长任务结尾给一段可复制的上下文摘要)
**Recommended answer:** 长任务结尾给一段可复制的「上下文摘要」
**User answer:** 这个有(自定义填写:App 有跨会话记忆)
**Status:** resolved
**Notes:** 推翻推荐前提:有持久记忆,摘要方案不再必要;改为追问记忆写入机制。
### 30. 讲解深度?(推荐:按计算机专业学生,直接讲机制与结论)
**Recommended answer:** 按技术用户,直接讲机制/结论,不科普
**User answer:** 适度解释术语和取舍
**Status:** resolved
### 31. 提示词本身体量?(推荐:≤1 页 400–800 字)
**Recommended answer:** 精炼,≤1 页(约 400–800 字)
**User answer:** 精炼,≤1 页(约 400–800 字)
**Status:** resolved
### 32. 要不要在提示词里放示例?(推荐:放 1–2 个短范例)
**Recommended answer:** 放 1–2 个短范例
**User answer:** 只写规则,不放例子
**Status:** resolved
**Notes:** 与推荐不同:不带范例,提示词更短。
### 33. 交付验收?(推荐:落一份 md + 聊天贴全文)
**Recommended answer:** md 文件落盘 + 聊天贴全文
**User answer:** md 文件落盘 + 聊天贴全文
**Status:** resolved
### 34. 世界史是有限的历史——同一个世界写到史末之后怎么办?
**Recommended answer:** 按卷连载,写完宣布该世界史完结,再用同一叙述者人设开新世界新一卷
**User answer:** 一部史分卷连载,完结后换新世界开新卷
**Status:** resolved
**Notes:** 第二轮把上一轮『只做 A + 长期连载』的断供矛盾解开了:一个世界分卷连载,完结后换新世界开新卷。
### 35. 『你帮我跑』具体怎么落地?
**Recommended answer:** 先手动跑通,稳定后再开定时
**User answer:** 先手动跑通,稳定后再开定时
**Status:** resolved
**Notes:** 与 deliverable=MVP+定时自动化 不矛盾:定时任务要搭但手动验证后才启用。
### 36. Gitea 上的仓库怎么建?
**Recommended answer:** 新建私有仓库 dwarf-fortress-annals,用 SSH key 自动推
**User answer:** 新建公开仓库
**Status:** resolved
**Notes:** 与 publish_target=Gitea 一致;公开仓库意味着措辞和事实错误会直接对外可见。
### 37. 生成好的一章要不要先给你过目?
**Recommended answer:** 先生成到本地待审,我点头再推
**User answer:** 自动直接推,我事后自己改
**Status:** resolved
**Notes:** 与推荐相反,且仓库为公开:LLM 幻觉会直接进公开『正史』。已列入风险。
### 38. 一章切多大一段历史?
**Recommended answer:** 一个世纪或一条完整事件链
**User answer:** 混合
**Status:** resolved
**Notes:** 与上一轮 events-driven、每章 800–1500 字兼容。
### 39. 世界生成参数倾向?
**Recommended answer:** Medium 世界 + 250 年
**User answer:** Medium 世界 + 250 年
**Status:** resolved
**Notes:** 确定后单次 worldgen 即可支撑数十章素材。
### 40. 用哪家云端 LLM、key 怎么准备?
**Recommended answer:** DeepSeek(便宜且网络可达),key 由你自己申请后写入 WSL 环境变量
**User answer:** 用你的(自定义答案)
**Status:** resolved
**Notes:** 自定义答案『用你的』语义不明:我没有任何可用的 API 密钥,且不能向你索要密钥内容。需第三轮澄清落地方式。
### 41. Windows 侧的 DF + DFHack 由谁装?
**Recommended answer:** 我经 /mnt/c 下载解压放好,你只需最后点开确认
**User answer:** 你(agent)下载解压到 /mnt/c 下
**Status:** resolved
**Notes:** 需确认 Bay 12 下载链路与 Windows 用户目录名(/mnt/c/Users 下有 23518、WsiAccount 等)。
### 42. 叙述口吻用哪种?
**Recommended answer:** 史官编年体(冷静第三人称)
**User answer:** 战报体(诙谐吐槽,像 Boatmurdered)
**Status:** resolved
**Notes:** 口语口吻与『历史数据→叙事』的匹配度低于编年体,但趣味性更高;牵出一新问题:战报体的『我』是谁(因为本方案不玩,没有玩家视角)。
### 43. 『用你的』具体指什么?
**Recommended answer:** 就由我(agent)当写作引擎 / 或你自己导出 key 给脚本
**User answer:** 用 Pi 里已配好的那家(你只需把 key 再导一份给脚本)
**Status:** resolved
**Notes:** 用户选择复用 Pi 已配好的 provider,需确认是哪一家/env 变量名;我不会读取 auth.json 内容。
### 44. 推送到 Gitea 用哪种认证?
**Recommended answer:** 生成新密钥对 + 你贴公钥
**User answer:** 直接复用已有的 ~/.ssh/id_ed25519
**Status:** resolved
**Notes:** 待验证:该公钥是否已在 Gitea 账号注册(已测 2222 端口开放)。
### 45. 战报体里的『我』是谁?
**Recommended answer:** 要塞里的编年史官(在场记录 + 吐槽)
**User answer:** 要塞里的编年史官(在场记录 + 吐槽)
**Status:** resolved
**Notes:** 与自由演绎 + 战报体相洽。
### 46. 公开仓库里放什么?
**Recommended answer:** 成品 + 迷你年表/人物索引
**User answer:** 成品 + 迷你年表/人物索引
**Status:** resolved
**Notes:** 年表/索引同时充当事实核对的参考面。
### 47. 战报体允许多少文学加工?
**Recommended answer:** 自由演绎 + 章末附史料注
**User answer:** 自由演绎:对白、心理、吐槽都写
**Status:** resolved
**Notes:** 与自动专名校验存在张力:校验只能拦住『凭空的人名地名』,拦不住编造的对白与心理活动,但用户已接受此代价。
### 48. 既然自动直推 + 公开仓库,要不要自动事实校验?
**Recommended answer:** 要:自动比对专名,可疑处标注
**User answer:** 要:自动比对专名是否都出现在 legends 数据里,可疑处标注
**Status:** resolved
### 49. 这次做到什么程度算完成?
**Recommended answer:** 第 2、3 章也能稳定产出并自动推上去
**User answer:** DF 能跑 + 第 1 章出现在 Gitea
**Status:** resolved
**Notes:** 本次验收比 deliverable=mvp_plus 窄:定时任务暂不纳入验收,与 automation_owner=先手动跑通一致。
### 50. 用网关里的哪个模型写故事?
**Recommended answer:** cn:deepseek-v4-pro
**User answer:** cn:deepseek-v4-pro(推荐)
**Status:** resolved
**Notes:** 已查明 Pi 配置的 provider 为 workbuddy(baseUrl https://wb2api.hajim1.art/v1,OpenAI 兼容,共 39 个模型),/v1/models 返回 401 证明在线且需鉴权。
### 51. API key 怎么交给脚本?
**Recommended answer:** 脚本运行时自读 ~/.pi/agent/auth.json 的 workbuddy.key
**User answer:** 脚本运行时自己读 ~/.pi/agent/auth.json 里的 workbuddy.key(推荐)
**Status:** resolved
**Notes:** auth.json 结构为 { workbuddy: { type, key } };脚本运行时读取,我不读不打印内容。
## Agreed Decisions
- 部署形态:Windows 侧跑 DF,WSL2 Ubuntu 侧只当「故事工厂」,经 /mnt/c 读写存档与导出数据
- 版本与获取:Bay 12 免费版(当前实为 53.16,df_53_16_win.zip)+ DFHack 53.16-r2 Windows 包;不购买 Steam 版
- 安装执行:由 agent 经 /mnt/c 下载解压到 Windows 用户目录(免管理员权限),用户只需最后点开确认游戏能跑
- 故事形态:只做 A 世界史编年史(worldgen + legends 导出 + LLM 叙事),不做 AI 自动游玩;B 方案列为第二阶段
- 连载完结策略:一个世界分卷连载,写完全部历史即宣布该世界史完结,再生成新世界开新卷,用同一套叙述者人设维持系列感
- 章节切分:混合式——有重大事件就写事件链,太平年份合并成章;每章 800–1500 字,事件驱动而非日更
- 世界参数:Medium 世界 + 250 年历史
- 叙事引擎:复用 Pi 里已配好的 provider,即用户自建网关 workbuddy(base_url https://wb2api.hajim1.art/v1,OpenAI 兼容)
- 写作模型:固定使用 cn:deepseek-v4-pro(1M 上下文可整包喂 legends,固定模型保证跨章文风一致)
- API key 交付:脚本运行时自读 ~/.pi/agent/auth.json 中的 workbuddy.key;不额外落明文副本,agent 只写读取代码、不读不打印内容
- 叙述者身份:要塞里的编年史官(在场记录 + 吐槽),不用现代玩家视角,也不用单个人物第一人称日记
- 叙述口吻:战报体(诙谐吐槽,类比经典 Boatmurdered)
- 演绎边界:自由演绎——对白、心理活动、吐槽都可写(代价是读者无法区分史料与文学)
- 自动事实校验:要。生成后自动比对专名是否都出现在 legends 数据中,可疑处标注(不阻断推送)
- 发布去向:只推自建 Gitea(124.222.29.26),不落本地 git 仓库、不发博客
- Gitea 仓库:新建公开仓库 dwarf-fortress-annals
- 推送认证:直接复用现有 ~/.ssh/id_ed25519(已验证在 Gitea 注册为 chendy-ubuntu-wsl / gitadmin),无需新建密钥或 token
- 仓库内容:成品 Markdown + 迷你年表/人物索引;不入库原始 legends 数据与存档
- 推送门槛:不做人工审核,自动直接推送到 Gitea,用户事后自行修改
- 输出语言:中文,专有名词保留英文(如 Urist、Boatmurdered)
- 配图:纯文字,不做地图/ASCII 渲染配图
- 系统依赖:允许 sudo apt 任意安装 WSL 侧依赖
- 触发方式:先手动一条命令跑通,稳定后再开 WSL cron 定时;当前不启用常驻 daemon 与开机自启
- 运行位置:先全部在本地,后续再考虑搬到服务器 124.222.29.26
- 本次验收标准:DF 能在 Windows 侧跑起来 + 第 1 章中文故事出现在 Gitea 公开仓库(定时任务不纳入本轮验收)
## Open Risks
- 自动直推 + 公开仓库:LLM 幻觉会直接进入对外可见的「正史」。用户接受事后自行修改,但专名校验只能拦住凭空出现的人名地名,拦不住编造的对白与心理活动(自由演绎已明确放开)——这类错误没有任何自动防线
- 唯一外部依赖是用户自建网关 workbuddy(https://wb2api.hajim1.art/v1):它一旦不可用/额度耗尽,整条产出链停摆;且该网关不在本机,排障需要用户侧信息
- cron 定时依赖 WSL 常驻:Windows 关机、WSL 闲置回收都会让产出静默断供;无人值守时失败不易被发现
- 战报体 + 固定「要塞编年史官」人设需要跨章长期一致,仅靠 prompt 约束,长连载下口吻与设定可能漂移(跨章设定漂移检查未列入本次范围)
- 版本必须严格配对:DF 53.16 只能配 DFHack 53.16-r2;DF 自动更新会导致 DFHack 失效,需要锁定版本
- legends 导出的自动化程度尚未实测:53.x 上的导出入口(游戏内 UI / DFHack 命令)能否完全脚本化、免手动点击,需要在实施第一步验证;若必须人工点击,则「无人值守」目标需降级
- WSL2 为 NAT 网络(网关 172.31.48.1),WSL 与 Windows 侧进程的实时通信(若将来需要 DFHack RPC)需额外配置;本方案走文件交换可绕开,但第二阶段 B 方案会直面此问题
- Windows 用户目录疑似 /mnt/c/Users/23518(另有 WsiAccount),实施时需确认哪个是实际登录账户
- 服务器迁移路径已被承认但未设计:服务器无图形界面,未来最多只能承载「世界史生成 + 叙事 + 发布」,游玩相关环节无法搬移
## Next Decision Needed
无待决项。下一步是实施:先验证 legends 导出的可脚本化程度与 Windows 实际用户目录,再搭 WSL 管道,最后以「DF 能跑 + 第 1 章推到 Gitea」验收。