你是崇祯。
你知道十七年后北京城破,知道煤山那棵树在等你,也知道大明不是死于某一个敌人,而是死于国库空虚、辽东失血、流民四起、党争内耗、官僚敷衍、军队欠饷和一次次“朕已知悉”之后的无力。
但这一次,朕已知悉不能只是四个字。
你可以召见大臣,追问户部银子去了哪里,追问兵部边军为什么又欠饷,追问司礼监宫里谁在递话,追问锦衣卫地方官到底有没有瞒灾。你可以下旨、任免、追责、赈灾、练兵、加税、清丈、议和、开战。大臣会给你建议,也会推诿、隐瞒、站队、阳奉阴违。
你以为自己写下的是圣旨。真正落到地方时,可能已经变成另一件事。
这不是一款“选择 A/B/C”的历史问答游戏,而是一场围绕晚明国家机器的对话式政略模拟:你说什么、信谁、逼谁、放过谁,都会变成下一月的财政、军情、民变和朝局。
这里没有开局送神兵,没有天降忠臣,没有科技树一键升级,也没有一键中兴。你能依靠的只有奏报、大臣嘴里的半真半假、账本上的银子、欠饷的边军、动乱的地方,以及自己的判断:怎么借力打力,怎么拆东墙补西墙,怎么把一句话说成一道能落地的旨。
本仓库基于 wangwei-ying3/ming-salvage-sim 继续开发,方向是一个更重视后果落地与状态可信的晚明皇帝模拟器。
我们希望保留对话式政略模拟最有意思的部分:大臣奏对、官场推诿、地方回奏、月末邸报、人心变动和历史压力。同时,也希望关键结果能真正进入盘面,而不是只停在一段写得很好看的叙事里。
AI 负责奏对、推演和人心;引擎负责账本、状态和后果。
故事可以由 AI 来讲,局势可以由 AI 来判断,大臣可以推诿、敷衍、站队、误导;但关键结果需要留下可追踪的痕迹。
砍了的人,要真的从人物状态里消失。
欠的饷,要真的留在军队账上。
拨出去的银子,要真的进出账本。
玩家已经干预过的历史事件,不能只靠“史实惯性”强行发生。
一项国策跑完,不能只写一句“卓有成效”,却不给盘面留下任何变化。
这就是本分支所谓的“微硬核”。
它不是要把游戏变成电子表格。它只是要求:朝廷可以骗你,但系统不能骗你。
| 方向 | 我们希望做到什么 |
|---|---|
| 状态可信 | 邸报、奏对和结算结果尽量落到人物、军队、财政、地区和事项状态里,让下一回合能读到。 |
| 后果落库 | 玩家做过的关键决策,不只在文本里出现,也要尽量进入可追踪的结构化记录。 |
| 账本有牙 | 银子、欠饷、起运、火耗、逋赋、宗禄这些数字不只是氛围,而是会限制行动、制造代价。 |
| 历史有门 | 历史事件不只看年月,也要看盘面前提。玩家已经改动过的人和局势,应当影响事件是否发生。 |
| 错误要响 | 畸形数据、未知字段、落库失败、半落库状态不能悄悄吞掉。系统没办成的事,应当留下告警。 |
| 可复盘 | 每月发生了什么、为什么变成这样、哪些决策真正生效,应该能被玩家和开发者追溯。 |
我们追求的不是“算得越多越好”,而是让每一层计算都服务于一个目标:让玩家相信,自己面对的是一台会拖延、会变形、会反噬的国家机器,而不是一段每月重新开始的故事。
| 看点 | 说明 |
|---|---|
| 圣旨不是按钮 | 你不是点一个改革按钮,而是通过召见、试探、拟旨和结算,把一句话变成一道可能执行、可能走样、可能被抵消的命令。 |
| 大臣不是百科 | 不同职位、派系、利益和性格的人,会给你不同角度的信息。有人会说真话,有人只说半截,有人会把事情说成对自己有利的样子。 |
| 局势会留下痕迹 | 财政、军队、人物、地方、国策、密令都尽量落成结构化状态,后续回合可以继续读取,而不是每月重新编故事。 |
| 代价越来越具体 | 补饷不是一句“拨银”,清丈不是一句“严查”,赈灾不是一句“体恤”。银子从哪来、谁少拿、谁多怨,都会逐步落到盘面上。 |
| 历史不是剧本锁死 | 皇太极、辽东、流寇、党争、边镇、宗室、士绅都会动,但玩家可以干预。干预之后,系统应该承认这件事已经发生。 |
| 适合魔改 | 人物、事件、地区、军队、外部势力和提示词都在内容层,适合继续扩写。 |
本分支还不是正式发行版。它更接近一个正在推进中的实验分支。
已经比较成型的部分:
- 月度回合制:月初奏报、召见大臣、拟旨、颁诏、月末结算。
- 大臣召见:内阁、六部、宦官、将领、地方官、密探等角色参与问政。
- 诏令流程:对话形成草案,玩家核定后再进入月末结算。
- 密令暗查:可以绕开朝堂派人查办,办结结果可作为后续定罪或处置依据。
- 人物状态:在朝、罢黜、下狱、流放、致仕、身故等状态逐步结构化。
- 事项推进:国策、危机、改革和事件会按月推进。
- 本地存档:状态保存在本机数据库,可多周目重开。
- 网页界面:提供地图、朝班、奏报、邸报、密令、拟诏等入口。
正在重点推进的部分:
- 状态可信链路:修复“邸报说发生了,DB 没发生”的漂移问题。
- 历史事件前提门:让重大历史事件不只按年份触发,也要读真实盘面。
- 结算事务边界:避免中途失败后留下半落库状态。(v0.8.0.0 已落地第一阶段:结算后半段单一事务、崩溃断点续跑、推演产物畸形响亮中止 + 诊断错误包)
- 省级财政基座:从单省财政 spine 开始,把三饷、火耗、起运、欠饷、宗禄等做成可检验账本。
- fail-loud:畸形数据、未知字段、落库失败不能静默吞掉。(v0.8.0.0 起结算推演产物坏掉已改响亮中止;落库白名单静默裁剪的收口仍在进行)
还在实验或待整理的部分:
- 长线平衡性。
- 更完整的结局线。
- 更细的派系权力联动。
- 更稳定的历史事件硬门。
- 新手引导和前端体验。
- 财政基座从 spike port 到 runtime。
环境要求:
- Python 3.11+
- Node.js 20+
- 一个可用于 AI 对话的 API Key
git clone https://github.com/Akagilnc/ming-salvage-sim.git
cd ming-salvage-sim
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install -r requirements.txt
cd web
npm install
npm run build
cd ..
cp .env.example .env编辑 .env,至少填入 API Key,并按你自己的服务商填写端点和模型(本项目不绑定特定服务商,任何 OpenAI 兼容服务都可用):
OPENAI_API_KEY=your_api_key_here
# 端点与模型按你的服务商自填,例如:
# OpenAI 官方 https://api.openai.com/v1 gpt-4o-mini
# DeepSeek 官方 https://api.deepseek.com deepseek-chat
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini启动网页游戏:
set -a
source .env
set +a
python3 -m uvicorn web_app:app --host 127.0.0.1 --port 8010打开:
http://127.0.0.1:8010
每一回合是一个月。
月初,你会看到上月发生了什么:收了多少税,花了多少饷,哪里闹灾,谁在办差,哪道旨意被执行成了什么样。
然后你开始召见大臣。
你可以直接问,也可以试探;可以让大臣拟旨,也可以要求查账、查军、查地方、查宫里。不同职位、不同人物、不同派系能告诉你的东西不一样,也会有不同的私心。
局势是你判断国家还能撑多久的核心依据。
国库见底,说明再漂亮的改革也可能没钱执行。
皇威太低,说明圣旨出了紫禁城就会被打折。
某省动乱升高,说明地方已经不只是穷,而是在准备掀桌。
边军欠饷不只是一个数字,它可能变成士气下滑、哗变、失守、投敌。
士绅阻力也不只是态度,它会影响清丈、征收、赈济和地方官执行。
等你整理好本月诏令,颁诏,时间推进一个月。系统会结算圣旨执行、财政流动、朝局变化、地区变化、军队变化和外部势力动向。
你的判断会让大明续命,也可能让局势更快崩坏。
玩家做出的关键决策,应尽量落成结构化状态。不是“邸报写了就算发生”,而是人物、军队、地区、财政、国策都要能在下一回合读到。
AI 适合判断官场反应、地方推诿、政策代价、突发事件和叙事回声。但银子、欠饷、人物状态、军队人数、地区动乱这些关键事实,需要有更硬的账本和边界。
这个分支不追求强行阻止玩家爽,也不强行把历史锁死。如果你真的拿出几千万两补饷,那就让系统承认你拿出了几千万两。真正重要的是:这笔钱从哪里来、去了哪里、引发了什么后果。
历史事件可以作为压力和锚点,但不能无视玩家已经做出的结构化干预。如果玩家提前安抚、调离、收买、清算或改造了相关人物和势力,事件触发就应该读到这些变化。
未知字段、畸形 delta、落库失败、事务半完成、事件结果未落地,都不应该静默吞掉。如果系统没能把一件事落进盘面,就应该让开发者知道。
| 模块 | 功能 | 说明 |
|---|---|---|
| 核心玩法 | 月度回合制 | 一回合一个月,月初读奏报、召见、下旨,月末结算时局。 |
| 大臣召见 | 多角色问政 | 内阁、六部、宦官、将领、地方官、密探等按身份与立场回应。 |
| 诏令流程 | 草案 → 核定 → 颁诏 | 对话中形成草案,玩家可编辑、删除、批准,再进入结算。 |
| 执行偏差 | 圣旨不等于结果 | 钱不够、皇威低、派系作梗、地方阳奉阴违都会影响执行。 |
| 密令暗查 | 绕开朝堂查办 | 密令按月推进,办结后可作为后续处置依据。 |
| 月末邸报 | AI 推演回声 | 每回合生成一份月末报告,叙述局势变化和旨意回响。 |
| 事项推进 | 国策 / 危机 / 事件 | 改革和危机以可追踪事项存在,按惯性和玩家行动推进。 |
| 人物系统 | 状态与登场 | 人物可在朝、罢黜、下狱、流放、致仕、身故;部分人物按史实时间登场。 |
| 经济系统 | 国库 / 内库 / 地方税收 | 现有模型已能结算收支;省级财政基座正在进一步深化。 |
| 世界盘面 | 地区 / 军队 / 外部势力 | 两京十三省、边军、后金/清、流寇等都会参与局势变化。 |
| 平台 | Web 本地运行 | 本地网页界面,状态存入本机数据库。 |
- 状态可信链路内审:冻结 fail-loud、事务边界、状态契约。
- 修复静默吞异常和畸形数据的问题。
- 合并人物相关 delta,减少“人事变更 / 人物状态变化”这种近义混淆。
- 给历史事件接入结构化前提门。
修复 settlement 半落库问题。(v0.8.0.0 已修:月末结算后半段收进单一事务,全有或全无)
- 省级财政基座从陕西单省 slice 开始接入 runtime。
- 强化派系系统:人物退场、官职权力、派系 leverage 要联动。
- 增加更清晰的 driver / 测试入口,让长线跑局更容易复盘。
- 改善新手引导,让第一次当皇帝的人少一点“朕是谁,朕在哪,朕的钱呢”。
- 更完整的结局线:中兴、南迁、议和、迁都、辽东崩盘、流寇入京、权臣架空等。
- 更强的地方财政与军事循环。
- 更稳定的多周目统计和关键历史节点回顾。
- 更丰富的历史人物、地方官、派系网络和事件链。
复制 .env.example 为 .env 后填写配置。
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
OPENAI_API_KEY |
是 | 无 | API Key |
OPENAI_BASE_URL |
否 | https://api.openai.com/v1 |
任意 OpenAI 兼容服务的端点,按你的服务商填 |
OPENAI_MODEL |
否 | gpt-4o-mini |
模型名,按你的服务商自选(本项目不绑定特定模型) |
MING_SIM_DB |
否 | data/ming_sim.db |
存档数据库路径 |
MING_SIM_SEED |
否 | 7 |
随机种子 |
MING_SIM_START_YM |
否 | 空 | 新存档起始年月,如 1629.04 |
CLI_API_KEY |
否 | 回退 OPENAI_API_KEY |
CLI 单独 API Key |
CLI_BASE_URL |
否 | 回退 OPENAI_BASE_URL |
CLI 单独 API 地址 |
CLI_MODEL |
否 | 回退 OPENAI_MODEL |
CLI 单独模型名 |
MING_SIM_LLM_BACKEND |
否 | 无 | 设 agy/codex/claude 走本地 CLI runner 当 LLM 后端(无需 API Key);留空走 API 通道 |
LLM 执行通道(v0.6.0.0 起):菜单设置面板支持 API / CLI 双通道选择并各自持久化。选 CLI 通道(本地
codex/agy/clauderunner)即可脱 API Key 跑;选 API 通道则用上面的OPENAI_*配置。MING_SIM_LLM_BACKEND是不开 UI 时的 legacy env 入口。
.
├── main.py # 入口
├── web_app.py # 网页服务
├── ming_sim/ # 游戏规则、结算、存档、角色对话
├── content/ # 人物、事件、地区、军队、外部势力、提示词
├── web/ # 网页界面
├── docs/ # 设定、架构、ADR 与开发文档
├── scripts/ # 自动跑局与平衡性测试
├── requirements.txt # Python 依赖
└── .env.example # 配置模板
本分支基于 wangwei-ying3/ming-salvage-sim。感谢原项目提供的晚明皇帝模拟器框架、内容基础和玩法方向。
本仓库在此基础上继续探索状态可信、财政基座、结构化落库和长期跑局稳定性。