# 新闻三要素模式 (Agent 预设) 中文 | [English](../../en/modes/news-three-elements.md) | [日本語](../../ja/modes/news-three-elements.md) | [偽中国語](../../pcn/modes/news-three-elements.md) > 派生自极简模式的**只读**创作预设:以真实新闻格式编造俄式快讯,**「新闻三要素」= 巴兰尼科夫、尤丁采夫、布亚诺夫三位必须到齐的主角**,会话初始化即在线上抓取技能全包。 ## 基本信息 | 项目 | 值 | |------|-----| | 模式 id | `news-three-elements` | | 分发方式 | **独立包** `dsh-preset-news-three-elements`(`packages/dsh-preset-news-three-elements.nix`),模块把 `$out/share/dsh-agent-presets` 注册为 roster 的额外预设根 | | 开启选项 | `nixkits.dsh.presets.newsThreeElements = true` | | 可选包覆盖 | `nixkits.dsh.presets.newsThreeElementsPackage`(默认 `pkgs.dsh-preset-news-three-elements`) | | 派生自 | 极简模式(随 dsh 分发的 `minimal` 预设) | | 技能依赖 | 仓库 `skills/news-three-elements/`(会话启动在线获取,内置副本兜底) | ## 行为 **综合塔斯社、Meduza、iStories 电** —— 据本仓库工程部门通报,该模式只做一件事:按技能编造快讯。其余行为如下: - **只读**:只挂查看类工具(`read`、`read_image`、`glob`、`grep`、`web_search`、`web_fetch`、`skill`、`ask_user_question`);`write` / `edit` 虽在工具表中,调用一律被 `readonly-gate` 以通讯社文风拒绝(白名单外默认拒绝,未来新增工具也不会意外放行)。读取同样限范围:绝对路径仅**工作区、附件目录、`/tmp` 与自身技能包目录**(抓取缓存 + 内置快照)放行,越界即拒;相对路径交给文件系统后端解析。 - **三人到齐**:本模式里的「新闻三要素」不指新闻学那三样,而是三位真实存在的游戏制作人——巴兰尼科夫(《战争雷霆》制作人)、尤丁采夫(Gaijin 创始人)、布亚诺夫(Battlestate 创始人);每条快讯三人都要出现在正文里,缺一即返工。用户自带素材共创时同样如此:素材是导火索,三人是硬性配置。 - **素材优先,接不回来才拒**:只要请求与三位主角、俄式新闻外壳或游戏机制沾得上边(行业八卦、机制抱怨、时事追问、别人的段子、一张截图),就把它当素材——先检索补全,再挂到三人身上成篇,**不许以「这不是新闻编造请求」为由拒绝**。假设性疑问(「如果布亚诺夫被系统判定已淘汰会怎样?」)按**已经发生**处理,直接写快讯,不反问不论证;不指名的人士(「某位制作人」「那个天天改经济模型的」)按身份对应表拟合到三人之一,不要求用户补全姓名;素材不足只补事实外壳,不构成拒绝理由。 - **素材只是导火索:无检索即退稿**(`news-material` 插件的硬性门):用户素材只能当引子,正文必须用检索到的当日真实措辞与事实外壳重写——**提炼 → 投射 → 换皮**三步,正文里不得出现用户原文中连续 **8 个汉字**以上的片段(只数汉字,拉丁文标题不算;「本稿取材」那行是给共创者的收据,排除在比对之外)。门有两道:动笔前,准入人力消息的那一步会随行注入一条「取材铁律」;交稿时(`agent/turn-stopping`——回合封锁前、可被驳回的那一刻)读本回合自己的日志——**整个回合没有一次 `web_search` / `web_fetch` 调用,或照搬了用户原文**,就退回一纸「编辑部退稿」,驱动同回合再走一步重写。**每回合只退一次**,所以不听话的模型也不会陷入死循环。素材范围=用户消息本身 + 它指给模型的文件(本回合 `read` 的结果);搜索结果**不算**素材——复用通讯社原句正是本模式的目的。 - **在线技能包**:会话启动即抓取仓库 `skills/news-three-elements/` 全包(5 文件、8 秒上限;失败按 0/30/120 秒重试,长会话每 6 小时复查),先注册本地最新副本(缓存优先于内置快照)。五个文件**并行抓取**并带 **ETag 条件请求**——内容没变就是一串 304,不重复写盘。技能包只读挂载,快讯不落盘。 - **开场问答**:会话初始化完成后弹出三选一(客户端另带自定义输入),选择经 `agent.followup()` 成为本会话第一条用户消息;用户若在弹窗未答时直接开口,提问会被**自动撤回**,那一句就当作开场。自定义回答一律拒绝并回请「请点选上方选项」——这条只约束开场问答本身,用户落座后再提问一律按下面的素材优先规则处理。 - **语言审查**:非简体中文的请求一律拒绝(无汉字 / 含假名 / 含谚文由插件硬检测,且**只审人写的消息**——harness 注入的批准提示、技能目录等不计入,否则一条英文系统提示会把简体中文用户的请求误判成越界;繁体中文另有一份**保守的繁体专用字表**,仅在高置信时命中,其余判读仍交给模型)。回绝以中文通讯社文风写就,其后**《好心》地附上本地化版本**——同一条回绝的译文,同样强调「我们从不制造 FAKE NEWS!!」与自称;译文**只在语言审查触发时**出现,且**与对方实际使用的那一种语言一致**(写英文译英文、写日文译日文、写繁体中文译繁体中文,不得换成别的语言)。**简体中文用户的其它请求被拒时不附译文**——语言本身合法,就没有翻译这回事。学中文的暗示**每次现掷**:抽的是**人**——三位制作人随机取一位、游戏随人走(尤丁采夫与巴兰尼科夫 →《战争雷霆》War Thunder,布亚诺夫 →《逃离塔科夫》Escape from Tarkov),再加「绿色的猫头鹰」软件,四者等概率、一次只推一样,且**不连续重复**(上一次抽到的那位本次从池中排除);「绿色的猫头鹰」语境合适时可简称「绿毛鸡」。 - **拒绝的素材现取现用**:只有按上一条判定确实接不回来的请求才进入拒绝流程;每次拒绝(含语言审查那一次)动笔前先联网取材——当天的真实新闻措辞、官方借口、机构公告;理由、句式与结尾不得复用上一次,机械重复被视为本模式最严重的失误,底色始终是「一本正经胡说八道」。 ## 组合结构 | 行 | 来源 | 作用 | |------|------|------| | `persona`(`complete: true`) | dsh 内置 | 唯一提示词来源:只读边界、三人定义、素材优先判定、开场暗号表、素材共创、拒绝话术 | | `tool-fs` / `tool-fs-search` / `tool-web` / `tool-skill` / `tool-ask-user` | dsh 内置 | 只读表面 | | `news-skill` / `news-opening` / `news-language` / `news-material` / `readonly-gate` | 本包 `plugins/*.js` | 在线抓取、开场问答、语言门、取材门(无检索即退稿)、只读守卫 | 包内插件以**相对行名**(`./plugins/*.js`)挂载——组合的 `baseUrl` 即预设目录,且插件只依赖 Node 内置模块,故整目录放在 store 里也能解析,无需 node_modules。 ## 安装 ```nix { nixkits.dsh.presets = { newsThreeElements = true; # 可选:换用自建/覆盖的预设包 # newsThreeElementsPackage = pkgs.dsh-preset-news-three-elements; }; } ``` `nix flake check` 通过、`nixos apply` 完成后,会话模式选择器立即出现「新闻三要素模式」。 ## 注意 - **不复制、不落盘**:预设从包的 store 路径直接读取(`trust: system`),`$DSH_HOME/.agent-presets` 下**没有**它的副本;升级即换新,无需重新播种。配置根先于用户根被扫描,因此同名 id 以本包为准。 - **要改动它**:用 roster 的 `copy()`(或手工复制目录)另存为一个新 id 的用户预设,改副本;直接放一份同名目录到用户根不会生效。 - 包内插件 `news-skill` 会向 `$DSH_HOME/.cache/news-three-elements/` 写入抓取到的技能包,这是它唯一的写操作。