cong7781/novel:从中文叙事文本抽取角色关系并画成可交互关系图

前言

在 DSH 里做中文长文分析时,常见做法是整段贴进对话,让模型口头总结人物关系。文本一长,上下文装不下;关系又容易没有原文锚点,事后难以核对。下面介绍社区插件 cong7781/novel(npm 包名 dsh-character-graph):从叙事文本里抽出角色与关系,在对话里渲染成可点、可拖的力导向图,且每条边必须附带可在原文中逐字核对的证据,无法核对的边会丢弃并计入统计,而不是静默编造。

这是什么

cong7781/novel 由维护者 cong7781 发布,在 SkillHub 插件目录 中归类为模型推理,简介为「长文本关系图提取」。插件走宿主 DSH 已配置的默认模型(ctx.llm),不单独要求 API key 或本地推理服务;调用费用记在使用方自己的账号上。当前版本 0.3.0(2026-10-21),许可证 MIT,要求 Node.js ≥ 20。

仓库 GitHub 地址:https://github.com/cong7781/novel。DSH 按 package.json 的 name 注册工具,因此对话里出现的是 dsh-character-graph;安装 spec 仍写 github:cong7781/novel。

核心功能

对话内关系图(安装包内)

装进 profile 后,可通过工具 extract_characters({ path }) 或粘贴文本触发抽取。结果以工具卡片展示:节点可点击查看某人的关系,再点第二人可看两人之间的原文证据;卡片上提供 ?pair= 深链、丢弃计数等。文本硬上限 600,000 字(MAX_CHARS),超出会报错并说明原因,不会静默截断。

插件发布物为零 npm 依赖的预构建客户端(lib/client.js 已打包 d3-force),安装时无需构建、无需额外装第三方包。

三档文本规模

文本规模 机制 说明(来自 README 实测摘要)
≤ 8,000 字 单次 ctx.llm 全文一次进提示词
8,000 – 50,000 字 滑窗分块 约 3,500 字/块、12% 重叠,逐块闸门后全局合并
50,000 – 600,000 字 检索式(RAG) 角色扫描 → 字 bigram BM25 检索候选块 → 精读选中块 → 合并

README 记载 60 万字全量实测(并发 6):195 块 / 207 次调用 / 664k 输入 tokens / 约 $0.42 / 118s,证据逐字核对通过率 100%。长书在对话工具里跑满两分钟并不合适,仓库另提供网页端与命令行(见下文「适用场景」),不在 npm 安装包内。

管线与证据闸门

处理流程可概括为:文本归一化 → 滑窗切块 →(长文)角色扫描与 BM25 检索 → 对选中块做精细抽取 → 逐块证据闸门 → 别名消解与全局合并(每对人物最多 3 条证据)。

每条边必须带 evidence,且须在模型当时所见块原文中逐字存在;否则尝试最长公共片段 ≥12 字重锚,仍失败则丢弃。分块不会放宽这条规则;丢弃原因在界面与 CLI 中分类展示(如 evidence-not-in-source、duplicate-evidence、pair-cap 等)。evidencePassRate 的分母只计核对失败类丢弃,与策略性丢弃(重复、上限)分开统计。

长文检索选用 BM25 而非 embedding,原因是 README 说明的 provider 无 embedding 接口,且中文人名查询更适合字 bigram 精确匹配,索引可快速重建、零额外依赖。

安装与启用

在 DSH 插件页侧边栏,或通过对话里的 plugin_manager,可使用下列来源之一(原文安装说明):

# 1) 从 GitHub 安装(推荐)
github:cong7781/novel

# 2) 从 npm 安装
dsh-character-graph

# 3) 本地目录(开发用,绝对路径示例)
D:\code\dsh-character-graph

装完后会作为新组合包默认启用,并写入 profile 的 package.json / cordis.patch.yml。安装与启停属于 profile 操作,需要 danger-full-access 或逐次批准。用 github: 简写时 DSH 会先探测仓库连通性;若出现 Permission denied (publickey),可改为 https://github.com/cong7781/novel 或配置 SSH key。

前提:宿主 DSH 已配置默认模型。插件以当前 DSH 进程权限运行,安装前请自行查看仓库源码与 MIT 许可证,确认符合你的安全与合规要求。

典型用法

1、对话里抽取(装完即用)

在已安装插件的 DSH 对话中,让智能体调用 extract_characters,传入本地文件路径或粘贴叙事文本。卡片内直接浏览关系图与证据;适合万字以内或能接受较长等待的段落。

2、仓库内命令行(需自行获取完整仓库)

安装包不包含 CLI。若已在本地拥有完整项目目录(含 scripts/),可用自带样例验证三种模式:

node scripts/extract-cli.mjs --path fixtures/sample.txt --out out/runs/m1-single-final --mode single
node scripts/extract-cli.mjs --path fixtures/sample.txt --out out/runs/m1-chunk-final  --mode chunk
node scripts/extract-cli.mjs --path fixtures/sample.txt --out out/runs/m1-rag-final    --mode rag

长文 RAG、仅生成检索计划、按 --max-blocks 预算精读、以及 --resume 断点续跑等,见 README 中 extract-cli.mjs 示例。每次运行在 out/runs/<名字>/ 下留下 JSON 中间产物(manifest.json、cast.json、blocks/、result.json 等),文本 hash、模式、模型一致时才复用已有块。

3、本地网页查看器(需 clone 后 npm install)

在仓库目录执行:

node scripts/serve.mjs

服务监听 127.0.0.1:19401,需 esbuild 相关依赖与 DeepSeek key(或本机 ~/.dsh/.credentials.yaml)。页面提供选文件/粘贴、进度条、图下统计面板与 out/runs/ 历史产物载入;图上两次点击分别查看单人关系与两人证据。

适用场景与注意

适合:中文小说、剧本、长篇叙事的人物关系梳理;需要「关系 + 原文引证」而非纯摘要的场景;已在 DSH 中配置模型、希望关系图直接出现在对话里的开发者。

注意:

  • 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;生态理念是「一切皆插件」,本文介绍的是社区维护的 cong7781/novel。
  • 超长文本优先用仓库 CLI 或本地查看器,避免在单次工具调用里长时间占用对话。
  • HMR 开启时插件可立即生效;若宿主需重启才读到新 lib/index.js,以 README「限制」说明为准。
  • 成本估算在 README 中按 DeepSeek 官方定价峰值折算,可用环境变量 CHARACTER_GRAPH_PRICE_INPUT / CHARACTER_GRAPH_PRICE_OUTPUT / CHARACTER_GRAPH_PRICE_CACHE_HIT 覆盖。

结尾

cong7781/novel(dsh-character-graph)把「中文叙事 → 角色关系图 → 可核对原文证据」做成 DSH 内可安装的模型推理插件,并用分块、BM25 检索与严格证据闸门支撑最长约 60 万字。进一步了解能力与实测数据,见插件目录页与 GitHub 仓库:

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜