
Sinkpoint的AI对话
Sinkpoint的AI对话为《霸主》中的每个NPC赋予了声音。具名英雄、同伴、商人、酒馆老板和村民都能与你进行真实的对话——对话内容取决于他们的身份、所处地点以及周围世界正在发生的事情。无需云端账户,无需API密钥,你的数据不会离开你的电脑。
查看大图[center][size=5][b]Sinkpoint 的 AI 对话[/b][/size][/center]
Sinkpoint 的 AI 对话为《骑马与砍杀 II:霸主》中的每一位 NPC 赋予了声音。具名英雄、同伴、商人、酒馆老板和村民都能与你进行真实的对话——对话内容由他们的身份、所在位置以及周围世界中正在发生的事情塑造。
默认情况下,回复由运行在你电脑上、通过 [b]Ollama[/b] 的[b]本地模型[/b]实时生成(无需云账户,无需 API 密钥)。可选地,你可以配置[b]云服务提供商[/b](Gemini、DeepSeek、Grok、OpenAI 等)——这需要 API 密钥,并会将提示发送给该提供商。
[youtube]oVqUqFV9c44[/youtube]
[youtube]zs-4-1_oqM4[/youtube]
[line]
[size=4][b]功能特性[/b][/size]
[b]对话模式[/b]
[b]自由交谈[/b]可打开与任意具名英雄或同伴的自由文本聊天。你可以询问他们的过去、对战争的看法、他们的家族、他们的恐惧。没有预设脚本。
[b]闲谈[/b]可与次要 NPC——商人、酒馆老板、村民、孩子、竞技场大师——进行快速、富有风味的交流,他们会根据自己的职业和所在位置做出回应。
[b]隐士[/b]是一位特殊的上古贤者角色,完全置身于卡拉迪亚政治之外。他会与你讨论哲学、历史或你带给他的任何话题。
[b]NPC 实际知道什么[/b]
每次回复前,模组都会从游戏中提取实时上下文。NPC 知道自己的特质、技能、职业、文化和社会地位。他们知道自己的家人——配偶、子女、兄弟姐妹。他们知道你与其他关键人物之间的关系。他们知道自己的活跃任务,以及当前是在带领队伍、随军行军还是被囚禁。他们知道自己所在的位置:定居点的繁荣度、驻军实力、附近还有谁。他们还知道世界的状态——正在进行的战争、王国法律、派系实力、游戏内日期。
贵族角色和王国领袖会获得更多政治细节。村中长者会知道当地传闻。商人了解贸易商品和价格。NPC 所知道的内容深度随其身份而扩展。
[b]持久记忆[/b]
具名英雄和同伴会记住你们之前的对话。这些历史随你的战役存档一起保存,因此人际关系会在整个游戏流程中发展。商人、村民等次要 NPC 没有记忆——每次交流都是全新的,这符合他们的身份。
为保证存档安全(并避免《霸主》的存档字符串大小限制),长期历史记录存储在你的 [font=Courier New].sav[/font] 旁边的[b]同伴 SQLite [font=Courier New].db[/font] 文件[/b]中。复制存档时,请一并复制 [font=Courier New].db[/font] 文件。
[b]建议问题[/b]
每次回复后,NPC 会提供三个你可能想问的后续问题。按 F1、F2 或 F3 发送其中一个,或者忽略它们,直接输入任何你想说的话。
[b]关系系统[/b]
对话会赢得或失去与 NPC 的关系点数,每次交流在 −3 到 +3 之间。喜欢你的 NPC 会更热情;不信任你的 NPC 会戒备或冷淡。
[b]游戏内意图与行动[/b]
当情境合理时,NPC 可以提出(有时会触发)真实的游戏内行动——例如雇佣同伴、开启任务、作为雇佣兵/封臣加入王国,或解决某些遭遇结果。
[b]本地化 UI[/b]
对话菜单选项、提示文本、思考消息和起始提示已翻译为英语、法语、德语、西班牙语(拉美)、葡萄牙语(巴西)、俄语、意大利语、日语、韩语、波兰语、简体中文、繁体中文和土耳其语。
语言模型本身会用你书写的语言进行回复。
[line]
[size=4][b]系统需求[/b][/size]
[list]
[]《骑马与砍杀 II:霸主》e1.2.x 或更高版本[/]
[][url=https://www.nexusmods.com/mountandblade2bannerlord/mods/2006]Bannerlord.Harmony[/url](最新版)[/]
[][url=https://ollama.com]Ollama[/url] 已安装并正在运行[/]
[]Windows 10 或 11[/]
[]16 GB 内存[/]
[]强烈建议使用至少 8 GB 显存的独立显卡。使用第二块显卡专门用于推理——让主显卡专注于游戏——可获得最佳体验。CPU 推理也可以,但回复会很慢。[/]
[/list]
[line]
[size=4][b]安装[/b][/size]
[b]第 1 步 — 设置 Ollama[/b]
从 [url=https://ollama.com]ollama.com[/url] 下载并安装 Ollama。安装完成后,打开终端并拉取本模组所基于的模型:
[code]ollama pull qwen3.5:9b[/code]
[font=Courier New]qwen3.5:9b[/font] 是提示词所调优的模型。它能轻松装入 8 GB 显存,效果可靠。如果你想尝试其他模型,[url=https://ollama.com/library]Ollama 库[/url]中任何经过指令微调的模型都可以使用——只需在 [font=Courier New]config.json[/font] 中更新模型名称以匹配即可。
[b]推荐 Qwen 模型与显存对照(经验法则)。[/b] 显存需求随量化方式和 [font=Courier New]contextLength[/font](上下文越大 = 显存越多)而变化,但以下是很好的起点:
[list]
[][b]6–8 GB 显存[/b]:[font=Courier New]qwen3.5:4b[/font](快速,非常保险的选择)[/]
[][b]8–12 GB 显存[/b]:[font=Courier New]qwen3.5:9b[/font](推荐 / 本模组的最佳平衡)[/]
[][b]16+ GB 显存[/b]:[font=Courier New]qwen3.5:27b[/font](质量更高,速度更慢;从较低的 [font=Courier New]contextLength[/font] 开始)[/]
[][b]24 GB 显存(3090)[/b]:[font=Courier New]qwen3.5:9b[/font] 搭配更大的 [font=Courier New]contextLength[/font],或尝试 [font=Courier New]qwen3.5:27b[/font] 搭配较小的 [font=Courier New]contextLength[/font][/]
[][b]24+ GB 显存(和/或多 GPU)[/b]:[font=Courier New]qwen3.5:35b[/font] 可以尝试,但它重得多,可能需要降低 [font=Courier New]contextLength[/font][/]
[/list]
[b][font=Courier New]contextLength[/font] 如何影响显存。[/b] 增加 [font=Courier New]contextLength[/font] 会增加 KV 缓存大小,从而增加显存占用。实用规则:如果 [font=Courier New]contextLength[/font] 翻倍,预计显存会明显跃升(通常足以在小显存显卡上触发 CPU 回退或 OOM)。
建议的起始值:
[list]
[][b]8–12 GB 显存 + [font=Courier New]qwen3.5:9b[/font][/b]:[font=Courier New]contextLength: 4096[/font](安全默认值),如果你还有余量,可尝试 [font=Courier New]8192[/font][/]
[][b]24 GB 显存(3090)+ [font=Courier New]qwen3.5:9b[/font][/b]:[font=Courier New]contextLength: 8192[/font] 作为基线,如果你想要更长的记忆且仍能保持在 GPU 上,可尝试 [font=Courier New]12288–16384[/font][/]
[][b]24 GB 显存(3090)+ [font=Courier New]qwen3.5:27b[/font][/b]:从 [font=Courier New]contextLength: 4096[/font] 开始,如果还有余量再谨慎增加[/]
[/list]
如果 Ollama 因显存不足而回退到 CPU 或报错,先降低 [font=Courier New]contextLength[/font](最快的修复方法),然后换用更小的 Qwen 模型。
Ollama 作为后台服务运行,并随 Windows 自动启动。要确认它已就绪:
[code]ollama list[/code]
[b][size=4]可选 — 在你的第二块 GPU 上运行 Ollama(例如专门用一块 3090 进行推理)[/size][/b]
如果你有两块 NVIDIA 显卡(例如:GPU 0 = 运行《霸主》的显卡,GPU 1 = 专用于推理的 3090),你可以仅为该进程设置 [font=Courier New]CUDA_VISIBLE_DEVICES[/font] 来启动 Ollama——无需修改你的持久环境。在 PowerShell 中运行:
[pre]
[code]# Launch Ollama with GPU 1 only (adjust the index to match your 3090)
$env:CUDA_VISIBLE_DEVICES = “1”
& "C:\Users\sinkp\AppData\Local\Programs\Ollama\ollama app.exe"[/code]
事先用以下命令找到你的 GPU 索引:
[code]nvidia-smi -L[/code]
要验证 Ollama 使用的是正确的 GPU,在一个终端中运行请求:
[code]ollama run qwen3.5:9b “Say hello in one sentence.”[/code]
并在另一个终端中观察显存占用:
[code]nvidia-smi[/code]
当你关闭 PowerShell 窗口时,[font=Courier New]$env:CUDA_VISIBLE_DEVICES[/font] 会被丢弃——不会持久化到你的系统环境。
[b]第 2 步 — 安装模组[/b]
如果尚未安装 Bannerlord.Harmony,请先安装。然后将 Sinkpoint 的 AI 对话压缩包解压到你的《霸主》Modules 文件夹:
[code]Steam\steamapps\common\Mount & Blade II Bannerlord\Modules\SpLLM\[/code]
启动游戏,打开模组界面,启用 Sinkpoint 的 AI 对话。Harmony 必须启用,并在加载顺序中列于 Sinkpoint 的 AI 对话之上。
本模组自带其捆绑后端。无需安装其他任何东西。
[line]
[size=4][b]配置[/b][/size]
配置位于 [font=Courier New]Modules/SpLLM/config.json[/font]。如果该文件缺失,模组会使用 [font=Courier New]config.default.json[/font] 作为模板——将其复制为 [font=Courier New]config.json[/font] 并编辑。
该文件选择[b]一个活动提供商[/b],并为每个可能使用的后端(本地 Ollama 或云 API)定义设置。
[pre]
[code]{
"provider": "ollama",
"thinking": "off",
"providers": {
"ollama": {
"type": "ollama",
"baseUrl": "http://127.0.0.1:11434",
"model": "qwen3.5:9b",
"contextLength": 4096,
"temperature": 0.8,
"keepalive": "24h",
"think": false,
"structuredOutput": true
}
},
"backend": { "port": 5000 },
"logging": { "level": "info" }
}[/code]
请参阅 [font=Courier New]config.default.json[/font] 以获取 Gemini、DeepSeek、Grok 和 OpenAI 的示例条目。
[b]选择提供商[/b]
将 [b][font=Courier New]provider[/font][/b] 设置为 [b][font=Courier New]providers[/font][/b] 下你想使用的块的键(例如 [font=Courier New]"ollama"[/font]、[font=Courier New]"gemini"[/font]、[font=Courier New]"deepseek"[/font])。运行时只会使用该块。
[b]通用字段[/b]
| 字段 | 适用于 | 描述 |
|-------|------------|-------------|
| [b]type[/b] | 全部 | [font=Courier New]"ollama"[/font] 用于本地 Ollama,[font=Courier New]"openai"[/font] 用于兼容 OpenAI 的 HTTP API |
| [b]baseUrl[/b] | 全部 | API 根 URL(Ollama 请使用 [font=Courier New]127.0.0.1[/font],而不是 [font=Courier New]localhost[/font]) |
| [b]model[/b] | 全部 | 模型 ID(必须与 [font=Courier New]ollama list[/font] 或提供商的模型名称匹配) |
| [b]temperature[/b] | 全部 | 回复随机性(典型范围 0.0–1.0) |
| [b]contextLength[/b] | Ollama | Token 窗口;越大 = 更多历史,更多显存 |
| [b]keepalive[/b] | Ollama | Ollama 保持模型加载的时间(例如 [font=Courier New]"24h"[/font]) |
| [b]apiKey[/b] | 云 | API 密钥(如果设置了 [b]envVar[/b] 则可选) |
| [b]envVar[/b] | 云 | 覆盖 [b]apiKey[/b] 的环境变量名(推荐) |
| [b]structuredOutput[/b] | 全部 | [font=Courier New]true[/font](模板中的默认值):JSON-schema 模式,用于可靠的 [font=Courier New]<suggest>[/font] 解析。如果提供商拒绝 schema 模式,请设为 [font=Courier New]false[/font] |
[b]后端与日志[/b]
[list]
[][b]backend.port[/b] — 捆绑的 Node 后端的端口(默认 [font=Courier New]5000[/font])。仅在该端口已被占用时更改。[/]
[][b]logging.level[/b] — [font=Courier New]"info"[/font] 或 [font=Courier New]"debug"[/font]。Debug 会将详细日志写入 [font=Courier New]Logs/spllm.log[/font] 和 [font=Courier New]Logs/backend.log[/font]。[/]
[/list]
更改在下次游戏启动时生效(后端会在文件变更时重新加载 [font=Courier New]config.json[/font])。
[b]云服务提供商(可选)[/b]
要使用托管模型而非 Ollama:
[list=1]
[]将 [b][font=Courier New]provider[/font][/b] 设置为匹配的键([font=Courier New]"gemini"[/font]、[font=Courier New]"deepseek"[/font]、[font=Courier New]"grok"[/font]、[font=Courier New]"openai"[/font] 等)。[/]
[]填写 [b]apiKey[/b] 或在用户环境中设置 [b]envVar[/b](例如 [font=Courier New]GOOGLE_API_KEY[/font])。[/]
[]选择一个你的账户支持的 [b]model[/b] 名称。[/]
[/list]
示例(通过 Google 的 OpenAI 兼容端点使用 Gemini):
[pre]
[code]"provider": "gemini",
"providers": {
"gemini": {
"type": "openai",
"baseUrl": "https://generativelanguage.googleapis.com/v1beta/openai",
"model": "gemini-2.0-flash",
"temperature": 0.8,
"envVar": "GOOGLE_API_KEY",
"apiKey": "",
"structuredOutput": true
}
}[/code]
[b]思考 / 推理[/b]
某些模型可以在回答前进行“思考”。当后端流式传输推理 token 时,UI 可能会显示短暂的思考阶段。
[b]两种配置方式[/b](原生设置优先于快捷方式):
[list=1]
[][b]统一快捷方式[/b] — 将 [b][font=Courier New]thinking[/font][/b] 全局或按提供商设置为 [font=Courier New]"off"[/font]、[font=Courier New]"low"[/font]、[font=Courier New]"medium"[/font] 或 [font=Courier New]"high"[/font]。当你未设置原生字段时,后端会将这些映射到各 API。[/]
[][b]原生 API 字段[/b] — 设置提供商的实际参数(当你了解该 API 时推荐使用)。如果存在以下任何原生字段,则该提供商的 [b][font=Courier New]thinking[/font][/b] 将被忽略。[/]
[/list]
| 提供商 | 原生配置字段 | 发送到 API 的形式 |
|----------|---------------------|----------------|
| [b]Ollama[/b] | [font=Courier New]"think": true/false[/font] | [font=Courier New]think[/font] 于 [font=Courier New]/api/chat[/font] |
| [b]Gemini[/b] | [font=Courier New]"thinkingConfig": { "thinkingLevel", "thinkingBudget", "includeThoughts" }[/font] | [font=Courier New]extra_body.google.thinking_config[/font] |
| [b]Gemini[/b](替代) | [font=Courier New]"reasoningEffort": "low"[/font] | [font=Courier New]reasoning_effort[/font](OpenAI 兼容快捷方式) |
| [b]DeepSeek[/b] | [font=Courier New]"deepseekThinking": { "type": "enabled" }[/font] 加上 [font=Courier New]"reasoningEffort": "high"[/font] 或 [font=Courier New]"max"[/font] | [font=Courier New]extra_body.thinking[/font] + [font=Courier New]reasoning_effort[/font] |
| [b]Grok (xAI)[/b] | [font=Courier New]"reasoningEffort": "none"[/font] / [font=Courier New]"low"[/font] / [font=Courier New]"medium"[/font] / [font=Courier New]"high"[/font] | [font=Courier New]reasoning_effort[/font] |
| [b]OpenAI[/b] | [font=Courier New]"reasoning": { "effort": "medium" }[/font] | [font=Courier New]reasoning[/font] 对象(GPT-5 等推理模型) |
| [b]任何 OpenAI 兼容[/b] | [font=Courier New]"extraBody": { ... }[/font] | 合并到 [font=Courier New]extra_body[/font] |
[b]来自 [font=Courier New]config.default.json[/font] 的示例:[/b]
[pre]
[code]"ollama": { "think": false },
"gemini": {
"thinkingConfig": { "thinkingLevel": "low", "includeThoughts": false }
},
"deepseek": {
"deepseekThinking": { "type": "enabled" },
"reasoningEffort": "high"
},
"grok": { "reasoningEffort": "low" },
"openai": { "reasoning": { "effort": "medium" } }[/code]
[b]注意事项:[/b]
[list]
[][b]不要[/b]同时设置 Gemini 的 [b][font=Courier New]reasoningEffort[/font][/b] 和 [b][font=Courier New]thinkingConfig[/font][/b]——只使用一种控制方式。[/]
[]DeepSeek 的 [b][font=Courier New]reasoningEffort[/font][/b] 通常是 [font=Courier New]"high"[/font] 或 [font=Courier New]"max"[/font],而不是 [font=Courier New]"low"[/font]/[font=Courier New]"medium"[/font]。[/]
[]Grok 仅在支持它的模型上接受 [b][font=Courier New]reasoningEffort[/font][/b];不支持的模型可能会返回 HTTP 400。[/]
[]对于 [b][font=Courier New]gpt-4o-mini[/font][/b] 和其他非推理 OpenAI 聊天模型,请省略 [b][font=Courier New]reasoning[/font][/b]——没有什么需要配置的。[/]
[/list]
[line]
[size=4][b]使用方法[/b][/size]
当你进入与 NPC 的对话时,新的对话选项会与标准选项一起出现。选择其中一个即可打开 LLM 聊天覆盖层。
聊天打开后:
[list]
[]输入你的消息并按 [b]Enter[/b] 发送[/]
[]按 [b]F1[/b]、[b]F2[/b] 或 [b]F3[/b] 发送其中一个建议的后续问题[/]
[]按 [b]Tab[/b] 或 [b]Esc[/b] 关闭聊天并返回标准对话[/]
[/list]
回复会随模型生成而流式显示。等待期间会轮换显示思考消息。
自然地书写。模型拥有完整的上下文——提及正在进行的战争、NPC 的家族、你刚打过的一场战斗。它都知道。不信任你的 NPC 会充满敌意或回避;关系亲密的 NPC 会坦诚相待。稍后回到同伴身边,他们会记得你们谈过什么。
[line]
[size=4][b]性能[/b][/size]
启动后的第一个请求会多花几秒钟,因为模型需要加载到内存中。之后,在专用 GPU 上使用 qwen3.5:9b 的典型回复大约需要 5–15 秒,具体取决于消息长度。
如果你在同一块 GPU 上同时运行《霸主》和模型,推理运行期间可能会出现帧率下降。将第二块 GPU 分配给 Ollama 可以完全避免这一点——Ollama 会使用任何有可用显存的 GPU。仅使用 CPU 运行也是可能的,但对于 9B 模型,回复预计需要一分钟或更长时间。
[line]
[size=4][b]故障排除[/b][/size]
[b]对话菜单中没有 LLM 选项。[/b]
检查 Sinkpoint 的 AI 对话和 Bannerlord.Harmony 是否都在模组界面中启用,且 Harmony 位于 Sinkpoint 的 AI 对话之上。如果选项仍未出现,请检查 [font=Courier New]Modules/SpLLM/Logs/SpLLM.log[/font] 中的启动错误。
[b]没有回复,或聊天挂起。[/b]
如果 [b][font=Courier New]provider[/font][/b] 是 [font=Courier New]"ollama"[/font],请运行 [font=Courier New]ollama list[/font] 并确认 Ollama 正在运行。确保 [font=Courier New]config.json[/font] 中的模型名称完全匹配,包括标签(例如 [font=Courier New]qwen3.5:9b[/font] 而不是 [font=Courier New]qwen3.5[/font])。对于云服务提供商,请检查 [b][font=Courier New]provider[/font][/b]、[b]apiKey[/b] / [b]envVar[/b],并查看 [font=Courier New]Logs/backend.log[/font] 中来自 API 的 HTTP 错误。
[b]回复非常慢。[/b]
尝试更小的模型,例如 [font=Courier New]qwen3.5:4b[/font] 或 [font=Courier New]llama3.2:3b[/font]。如果你仅使用 CPU,任何 9B 模型都会很慢——这种情况下 3B 或 4B 模型更实用。
[b]游戏 UI 是我的语言,但 NPC 说英语。[/b]
UI 字符串会自动本地化。NPC 的语言跟随你的书写语言——用你的语言输入,模型会相应地回复。
[b]模型似乎忘记了对话的早期部分。[/b]
增加 [font=Courier New]config.json[/font] 中的 [font=Courier New]contextLength[/font]。默认值 4096 可覆盖合理的来回对话,但更长的会话可能需要 8192 或更多。这会占用更多显存。
[line]
[size=4][b]兼容性[/b][/size]
Sinkpoint 的 AI 对话仅修改对话树和对话界面覆盖层。它应与大多数玩法模组和大型改动模组兼容。大量替换对话界面 UI 的模组可能会冲突。
对话历史存储在你的 [font=Courier New].sav[/font] 旁边的每个存档专属同伴 [font=Courier New].db[/font] 文件中。你可以删除 [font=Courier New].db[/font] 来重置该存档槽的历史(你的战役仍会加载),但除非从备份恢复,否则你将失去聊天记忆。
[line]
[size=3]
[size=3]❤️ [/size]如何支持开发 [/size]
创建并定期更新模组需要大量时间和精力。
如果你喜欢这个模组,并希望支持进一步的开发和更新,可以在这里这样做:
→ [url=https://ko-fi.com/sinkpoint]在 Ko-fi 上支持[/url] ☕❤️
[size=4]🏯 Discord [/size]
[url=https://discord.gg/UcmjxFtenr][size=4]https://discord.gg/UcmjxFtenr[/size][/url]
感谢你的下载和游玩!欢迎分享你的截图或反馈。
[b]Sinkpoint[/b]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。