DeepSeek Harness 插件:可扩展的 AI 群像聊天游戏框架。输入一个行动,多个 NPC 各自回应,每条反应独立成带头像插图的聊天室消息;世界、地点、NPC 与功能扩展(如接入第三方绘图 API 实现 NPC 动态表情动作)都可以在对话框里让 agent 直接添加修改,无需写代码。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-agentnoodle
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:bigharm/dsh-agentnoodle
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
可扩展的 AI 群像聊天游戏框架(DeepSeek Harness 插件)。
输入一个行动/一句话,场景中多个 NPC 会各自做出反应——每条反应独立成一条聊天室消息,带自己的头像插图(无头像自动用名字首字占位圆)。叙事、场景切换、NPC 关系变化全由 AI 实时驱动,对话历史持久化到本地 JSON。
框架定位:世界、地点、NPC 乃至功能扩展都通过 harness 对话框让 agent 直接添加和修改——无需写代码。天然的可扩展性意味着玩家可以按需长出自己的玩法,例如:
- 接入第三方绘图 API,为 NPC 实现动态表情与动作绘制;
- 追加语音、任务、战斗、经济等系统;
- 自定义提示词与规则,塑造独特的叙事风格。
源自 LazyNoodle 项目的 DSH 插件化改造。
特性
- 🎭 群像反应:一次行动 → AI 挑选 2-4 个在场 NPC 各自回应,每条独立渲染
- 🖼️ 头像插图:每条消息显示说话人头像;无头像显示名字首字占位圆
- 🌍 多世界:每个世界独立的世界观 / 地点 / NPC / 角色存档
- 💬 对话建世界:无需写代码,直接在对话里创建世界、生成地点与 NPC
- 🧩 可扩展框架:世界、地点、NPC 与新功能都可在对话里让 agent 添加修改(如接入绘图 API 实现 NPC 动态表情动作)
- 🎴 角色卡导入:兼容 SillyTavern 角色卡(V1/V2/V3 JSON 或 PNG 内嵌卡片)
- 📦 世界导入:直接迁移 LazyNoodle 风格世界目录
- 🗃️ 本地持久化:JSON 文件存档,AI 解锁的新地点自动注册进地点库
- 🪟 悬浮窗面板:可拖动、可最小化,不打扰主界面
- 🤖 模型无关:复用 DeepSeek Harness 的默认模型路由,无需额外 API Key
安装
dsh plugin --profile web add dsh-agentnoodle
或打开 Settings → Plugin Market 搜索 dsh-agentnoodle 一键安装。安装后重启 dsh web,页面右下角出现 🍜 AgentNoodle 聊天室 悬浮窗。
快速开始
① 从零建一个新世界(全在对话里完成)
- 世界观:粘贴你的世界观文本,或让 agent 起草 → 对话里几轮修改、确认;
- 生成地点:
agentnoodle_generate_content(worldId, stage=locations)→ AI 生成区域与场景; - 生成 NPC:
agentnoodle_generate_content(worldId, stage=npcs)→ AI 生成 NPC(自动校验地点归属); - 开玩:面板刷新 → 选世界 → 建角色 → 输入行动。
② 直接玩默认世界
「暮色酒馆」世界内置在 seed 中,首次启动自动播种,含默认角色「无名旅人」——打开即可开始。
对话工具总表
以下工具注册为模型工具,agent 在对话里直接调用:
| 工具 | 作用 |
|---|---|
agentnoodle_create_world |
创建新世界(worldId + name + 可选世界观),建骨架并切换为当前世界 |
agentnoodle_update_worldview |
更新世界观文本(世界观迭代阶段) |
agentnoodle_generate_content |
按世界观用 AI 生成地点(stage=locations)/ NPC(stage=npcs)/ 两者(stage=all) |
agentnoodle_list_worlds |
世界概览;传 worldId 查看详情(地点+NPC 名单) |
agentnoodle_add_location |
手工添加地点 |
agentnoodle_add_npc |
手工添加 NPC(校验地点归属) |
agentnoodle_import_card |
导入 SillyTavern 角色卡为 NPC |
agentnoodle_import_world |
导入 LazyNoodle 风格世界目录 |
示例:「帮我建一个『青云门』的修仙世界,掌门叫青云真人」→ agent 依次调用 create_world → add_location / generate_content → add_npc,全程不用碰代码。
真实对话示例
用户:在 agentnoodle 里创建一个仙侠世界,地点 10 个,人物若干
agent 会依次调用:
agentnoodle_create_world(worldId, name, worldview)— 创建世界骨架并写入世界观;agentnoodle_generate_content(worldId, stage=locations)— AI 生成地点(不足 10 个时用agentnoodle_add_location补齐);agentnoodle_generate_content(worldId, stage=npcs)— AI 生成 NPC(可再agentnoodle_add_npc补充);- 告知世界已就绪——刷新面板即可开玩。
内置示例:seed/worlds/jiuxiao/ 就是一个完整的「九霄仙域」仙侠世界(10 地点 + 8 NPC),全新安装后直接可选。
游戏规则(对话里添加,随时生效)
世界可以带一份玩家规则(<dataDir>/worlds/<id>/rules.txt,每行一条,# 为注释)。规则是硬性约束:注入游戏提示词的醒目位置、优先于世界观,内容生成(地点/NPC)也会遵守。
- 工具:
agentnoodle_update_rules(worldId, rulesText)— 覆盖整份规则(传空文本清空) - 查看:
agentnoodle_list_worlds(worldId)详情含 rules - 例如玩家说:「加一条规则:NPC 被问及关键情报时不得撒谎」→ agent 调用工具 → 下次行动立即生效(无需重启、无需改代码)
提示:提示词层规则是"软约束"(AI 大部分时候遵守);需要程序强制的机制(死亡状态、数值系统等)属于插件代码扩展——这是框架可扩展定位的一部分。
角色卡 / 世界导入
- SillyTavern 角色卡(
agentnoodle_import_card):- 粘贴 JSON(
cardText)或本地 PNG/JSON 卡路径(filePath,PNG 从 tEXtchara块自动解析); - 字段映射:
name→NPC 名、description→描述、personality→性格标签、scenario+personality→背景、first_mes→存档备用; locationId指定所在位置(默认第一个地点)。
- 粘贴 JSON(
- LazyNoodle 世界(
agentnoodle_import_world):导入一个世界目录(需worldview.txt,可选locations.json/npcs.json/avatars/),注册进索引并切换为当前世界。
面板玩法
- 世界下拉:切换世界(加载各自的世界观/地点/NPC/角色存档)
- 角色:创建/选择角色;角色位于某场景,场景决定在场的 NPC
- 行动输入:动作或话语 → AI 生成旁白 + 多个 NPC 群像反应
- 日志:每条消息带头像(无头像用名字首字占位圆);旁白为场景描写样式
- 悬浮窗:可拖动、最小化成右下角 🍜 按钮
数据与配置
- 默认数据目录:
~/.dsh/agentnoodle(首次启动自动从包内seed/播种) - 覆盖方式:在 profile 的
cordis.patch.yml里给该行配置dataDir,或在 Settings → Plugins → 插件配置中修改 - 提示词:
<dataDir>/prompts/(environment.txt游戏叙事、generate_locations.txt生成地点、generate_npcs.txt生成 NPC),改完即时生效 - AI 参数:
<dataDir>/.env(AI_TEMPERATURE/AI_MAX_TOKENS/HISTORY_TAIL)
世界数据格式
世界就是普通文件(<dataDir>/worlds/<id>/),任何能写这些文件的入口都能建世界:
<worldId>/
├── worldview.txt # 世界观设定
├── locations.json # { regions: [{id,name,description,icon}], locations: [{id,name,parent,description,icon}] }
├── npcs.json # { npcs: [{id,name,gender,profile,location_id,avatar,active,dead}] }
├── avatars/ # NPC 头像 PNG(可选)
└── sessions/characters/ # 角色存档(运行时生成)
开发
npm test # 跑自测(假 fs/AI,无需 harness 运行时)
npm run check # 语法检查 + 自测
结构:
lib/game.js # 游戏核心逻辑(纯函数、依赖注入)
lib/index.js # Host 插件入口:HTTP API + 头像路由 + 数据播种 + 模型工具
client/client.js # 浏览器面板(ModuleLoader bundle)
seed/ # 首次启动的默认世界/提示词
许可证
MIT
链接
同类插件
PC2005-cloud/dsh-pet#dsh-pet★ 1530
DSH Web UI 桌面宠物:25 个透明动画、屏幕漫游、点击反应与拖拽,附可复现的素材生成链。
Nagi-ovo/dsh-ads★ 674
2005 年中文站点风格的整活广告插件:侧栏广告/信息流/角落弹窗 + 假关闭叉,素材全虚构。
vlln/whale-girl★ 358
桌面宠物(QQ 宠物形态):右下角悬浮、可拖拽/投喂/玩耍。
yyh-001/dsh-meme★ 201
聊天表情包:纯文本斗图、情绪主动发图、像 QQ/微信 一样发图、AI 自动学图、自定义表情包。
a86582751/dsh-nexttavern★ 175
NextTavern 是面向 DeepSeek Harness 0.1.7-rc.2 Web 的长篇角色扮演插件,支持角色卡导入与创作、世界线、世界书、分层长期记忆、关键词/语义/混合检索、角色 Agent,以及角色卡或小说导出;支持 SillyTavern 角色卡导入,v0.2.9 修复分发与安装问题。
Sutera-Diffusus/dsh-whale-musume★ 130
元气鲸鱼娘桌宠:摸头养成、按工具类型联动的工作状态、494 条台词、30 项成就、成长日记、拖拽惯性、主题适配与无障碍模式。关键词感知与余额关心默认关闭、需手动开启;可选的天气心情只在你填了城市后才会请求 Open-Meteo。无遥测。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。