DeepSeek Harness (DSH) 的理念是「一切皆插件」。在构建叙事或 RPG 体验时,通常需要为每个场景编写代码或维护复杂的状态机。dsh-agentnoodle 提供了一种替代方案:将游戏世界构建为对话上下文,由 agent 动态管理。
简介¶
dsh-agentnoodle 是一个由 bigharm 维护的 DSH 插件,用于 AI 驱动的群像聊天游戏框架。它将一个行动或一句话转化为场景中 2-4 个在场 NPC 的独立回应,每条反应独立成一条聊天室消息。
插件基于 LazyNoodle 项目改造,支持通过对话直接管理游戏世界,无需编写代码即可扩展新功能或修改现有逻辑。
核心功能¶
- 群像反应:一次行动 → AI 挑选 2-4 个在场 NPC 各自回应,每条独立渲染。
- 多世界:每个世界独立的世界观 / 地点 / NPC / 角色存档。
- 对话建世界:无需写代码,直接在对话里创建世界、生成地点与 NPC。
- 可扩展框架:世界、地点、NPC 与新功能都可在对话里让 agent 添加修改。
- 头像插图:每条消息显示说话人头像;无头像显示名字首字占位圆。
- 角色卡与世界导入:兼容 SillyTavern 角色卡(V1/V2/V3 JSON 或 PNG)与 LazyNoodle 世界目录。
- 本地持久化:JSON 文件存档,AI 解锁的新地点自动注册进地点库。
- 模型无关:复用 DeepSeek Harness 的默认模型路由,无需额外 API Key。
安装与启用¶
通过命令行安装:
dsh plugin --profile web add dsh-agentnoodle
安装完成后,重启 dsh web。页面右下角会出现一个 🍜 AgentNoodle 聊天室 悬浮窗,可拖动、可最小化,不打扰主界面。
典型用法¶
1. 创建新世界¶
在对话中调用工具创建世界骨架并定义世界观:
// 创建世界
agentnoodle_create_world(worldId, name, worldview)
// 生成内容
agentnoodle_generate_content(worldId, stage=locations) // 生成地点
agentnoodle_generate_content(worldId, stage=npcs) // 生成 NPC
2. 导入现有数据¶
- 角色卡:调用
agentnoodle_import_card,粘贴 SillyTavern JSON 或本地 PNG/JSON 路径。 - 世界:调用
agentnoodle_import_world,导入 LazyNoodle 风格的世界目录。
3. 更新规则¶
使用 agentnoodle_update_rules(worldId, rulesText) 设定硬性约束,该规则会注入游戏提示词的醒目位置,内容生成(地点/NPC)也会遵守。
对话工具列表¶
以下工具注册为模型工具,agent 可直接调用:
| 工具 | 作用 |
|---|---|
agentnoodle_create_world |
创建新世界 |
agentnoodle_update_worldview |
更新世界观文本 |
agentnoodle_generate_content |
按世界观生成地点、NPC 或两者 |
agentnoodle_list_worlds |
世界概览,传 worldId 查看详情 |
agentnoodle_add_location |
手工添加地点 |
agentnoodle_add_npc |
手工添加 NPC(校验地点归属) |
agentnoodle_import_card |
导入 SillyTavern 角色卡为 NPC |
agentnoodle_import_world |
导入 LazyNoodle 风格世界目录 |
规则与约束¶
- 硬性约束:通过
agentnoodle_update_rules添加的规则,注入提示词醒目位置,优先于世界观,内容生成也会遵守。 - 软约束:提示词层规则(AI 大部分时候遵守)。
- 代码扩展:需要程序强制的机制(死亡状态、数值系统等)属于插件代码扩展。
数据结构¶
世界数据存储在本地 JSON 文件中,路径默认为 <dataDir>/worlds/<id>/。
<worldId>/
├── worldview.txt # 世界观设定
├── locations.json # 地点列表
├── npcs.json # NPC 列表
├── avatars/ # NPC 头像 PNG(可选)
└── sessions/characters/ # 角色存档
插件内置了默认数据(如「暮色酒馆」世界),首次启动自动播种。如需自定义,可在 profile 的 cordis.patch.yml 中配置 dataDir。
该插件允许在无需编写代码的情况下,通过对话构建复杂的叙事世界。更多详情与源码,请访问 GitHub 仓库。