dsh-web-search-ddg
aooyoo
Zero-token DuckDuckGo search provider for the DeepSeek Harness (DSH) web seam — local headless browser, no API key, no m…
PROJECT TOPICS
PROJECT README
基于 DeepSeek Harness(DSH)制作的 SillyTavern 类文字游戏 Agent。
它可以直接导入酒馆人物卡,也可以从小说、剧本和人物素材中制作新卡。选一张卡后,你既可以自由游玩,也可以绑定一份剧本,让故事沿着既定主线长期推进。
dsh-tavern 复用 DSH 的会话、模型、工具调用、重试和上下文能力,把人物卡游玩、候选项、设定编辑、世界书与剧本推进整合成一套完整体验。

这是 dsh-tavern 最核心的设计。
很多文字游戏让模型一次性输出“正文 + 选项”,玩久以后很容易出现选项混进正文、编号丢失、格式崩坏,或者为了维持选项格式而牺牲正文质量。
dsh-tavern 把它们拆成独立调用:
因此候选项绝不会混入正文,也绝不会出现为了附带选项而掉格式的问题。
没有绑定剧本时,故事只根据人物卡、世界书和当前会话自由发展。每次生成五个候选:四个人物行动,一个场景变化。

候选不合心意,不必接受,也不必重写正文。点击“重新生成候选项”,直接告诉 Agent 你想往哪里走:

它会保留已经写好的正文,只重新生成一组符合意见的候选。

正文完成后,dsh-tavern 会再进行一次独立结算,把人物此刻的位置、动作和姿势整理成一句状态,保存到会话并注入下一轮。它不要求正文顺手附带总结,因此和候选项一样,不存在掉格式或模型忘记总结的问题。
右侧状态栏会显示“姿势已同步”和最新人物姿势。重新生成正文时会重新结算,回退本轮时也会一起恢复,避免人物忽然换位置、重复动作或姿势前后矛盾。

卡片模式把人物设定修改变成一段可以审查的 Agent 对话:先分析问题、比较方案,只有你明确确认后才写入字段。右侧人物卡侧栏始终同步显示当前内容,也可以直接手动编辑并保存。



自由游玩擅长即兴,但长篇故事最容易遇到的问题,是模型逐渐忘记主线、重复场景,或者一直停留在眼前的对话里。
dsh-tavern 可以给人物卡绑定一份独立小说、剧本或故事大纲。绑定以后,新会话进入剧本模式:Agent 会根据当前剧情读取相关剧本片段,判断故事进行到哪里,并沿着后续冲突、转折和场景继续推进。
| 自由游玩模式 | 剧本模式 | |
|---|---|---|
| 故事方向 | 根据人物卡和当前对话自由发展 | 参考绑定剧本的主线与后续情节 |
| 候选项 | 四个人物行动 + 一个场景变化 | 一个最贴合主线的推荐行动 |
| 剧情进度 | 没有固定终点 | 记录剧本游标与已读取片段 |
| 适合 | 即兴互动、日常陪伴、开放故事 | 小说改编、长篇剧情、明确故事线 |
同一张人物卡可以绑定、替换或解绑剧本。人物设定留在卡里,故事路线留在剧本里,不需要把整本小说硬塞进人物卡提示词。
公开案例可以直接绑定 the-missing-silver-bell-caravan.md,从银铃商队失踪开始,沿六幕悬疑主线推进。
剧本会被分段读取。右侧显示当前游标、已经召回的片段、当前参考内容和接下来的剧情,你可以直接看见故事走到哪里。

自由游玩给五种可能,剧本模式只给一个更有剧情意义的推荐。它会承接正文结尾,并把故事带向剧本中的下一处关键场面,而不是把主线稀释成五条互不相干的岔路。

剧本提供方向,Agent 负责动作、对白、情绪与现场细节。你仍然可以自由输入、偏离推荐、重新生成候选、重写正文或回退本轮;剧本是故事骨架,不是不可违背的选项菜单。
手里只有小说片段、人物设定、世界背景或故事创意,也可以直接开始。
一次选择多份素材,再告诉 Agent 谁是玩家、准备提炼谁。它会通读素材,区分人物信息与世界背景,确认人物关系,然后逐步整理出:

抽取过程本身也是一场 Agent 对话。你可以要求它先分析、补充遗漏、重新组织某个字段,再确认生成,不必接受一次性完成但充满误解的卡片。

仓库里的完整演示使用:
01-avra-character.md;02-blackwheat-town.md;avra-complete.json。| 功能 | 能做什么 |
|---|---|
| 直接导入酒馆人物卡 | 导入常见的 SillyTavern PNG / JSON 卡,保留主要字段、备选开场和世界书;可用 avra-before.json 测试 |
| 导出人物卡 | 将编辑完成的人物卡重新导出为 JSON |
| 带意见重写正文 | 指定保留内容、删减方向、人物反应或对白长度,只替换当前正文 |
| 世界书 | 保存地点、组织、道具和人物关系,并按剧情关键词读取相关条目 |
| Guide | 给当前会话添加持续写作要求,同时影响正文和候选,不污染人物卡 |
| 回退本轮 | 一起撤销最近的用户输入、正文、人物姿势和剧本进度 |
| 精修正文 | 内容确定后,再单独整理节奏、过渡和措辞 |
| 历史会话 | 保存、重命名并继续自由故事、剧本故事、设定对话和素材抽取 |
| 自由输入 | 候选永远只是建议,最终行动始终由玩家决定 |
SillyTavern 的预设混合了两类本应分开的内容:
description、personality、system_prompt、post_history_instructions、mes_example 等人物卡字段中。所以 dsh-tavern 不提供“预设选择”和“预设编辑”。想改变角色与文风,就在卡片模式里和设定 Agent 对话;想改变流程,则调整 Agent 工具与召回策略。换一张人物卡,内容偏好自然一起切换,不需要维护一堆预设和参数。
仓库附带原创案例 《金麦穗酒馆:失踪的银铃商队》:
从 demo/README.md 查看案例文件,或按照 product-demo.md 完整体验。
安装完成后运行:
dsh-tavern start
打开 http://127.0.0.1:3081,导入一张人物卡开始游玩。
需要 Node.js、pnpm、DeepSeek Harness(dsh)和 lsof。
克隆仓库并进入项目目录后运行:
pnpm run install:tavern
安装程序会创建独立 Tavern profile、安装依赖、准备本地数据目录,并把 dsh-tavern 命令安装到 ~/.local/bin。安装后请保留仓库目录。
如果终端找不到 dsh-tavern,请把 ~/.local/bin 加入 PATH 后重新打开终端。
dsh-tavern status
dsh-tavern restart
dsh-tavern stop
dsh-tavern start
需要查看前台输出时,可以运行:
dsh --profile tavern
日志位于 ~/.dsh/logs/tavern.log。代码更新并重启后,如果页面仍显示旧界面,请使用 Cmd + Shift + R 强制刷新。
人物卡、会话、剧本和素材保存在仓库的 data/ 下,并已被 .gitignore 排除。
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。