小布工坊.
← 回到资源库

资源详情 · 人格系统

一个尊重边界的语气状态机

用明确事件切换温和、轻松和认真的表达风格,短期状态到期后自然回落,并持续记住是否允许玩笑;不需要分析或保存聊天原文。

资源正文、示例和许可证保留原文。代码仅展示,不会在线执行或调用AI。

资源详情

适合学习纯函数、有限状态和过期时间处理。调用方负责把用户明确请求转成事件,状态只用于组织表达方式,不用于判断真实心理,也不应让用户的沉默触发负面反应。

使用前准备

适用平台
Windows · macOS · Linux
内容更新
  • 准备 Node.js 24 和文本编辑器;本站仅在 Node.js v24.19.0 的本地环境核对附带示例。
  • 先理解函数输入、返回状态和 jokes-off / celebrate 等明确事件。
node tone-state.mjs

先在文件所在文件夹打开终端。本例无需 npm install,不联网、不调用 AI 接口;不含真实平台接入。

常见卡点

  • 保存为指定 .mjs 文件,避免变成 .mjs.txt;不要复制 Markdown 的三反引号。
  • 它只计算语气状态,不识别真实情绪、不生成回复;状态保存需应用另做。
官方网站与安装说明 ↗

完整正文

// SPDX-License-Identifier: MIT
// 原创教学示例:事件由调用方提供,不从文本猜测情绪。
export function nextTone(previous = {}, options = {}) {
  const { event = "idle", nowMs = Date.now() } = options;
  const events = new Set([
    "idle", "celebrate", "support", "focus", "jokes-off", "jokes-on",
  ]);
  if (!Number.isSafeInteger(nowMs) || nowMs < 0 || !events.has(event)) {
    throw new TypeError("事件或时间无效");
  }

  const old = previous && typeof previous === "object" ? previous : {};
  const anchor = Number.isSafeInteger(old.updatedAt) ? old.updatedAt : 0;
  const now = Math.max(nowMs, anchor); // 时钟回拨不会延长剩余时间。
  const modes = new Set(["neutral", "warm", "playful", "serious"]);
  const state = {
    mode: modes.has(old.mode) ? old.mode : "neutral",
    jokesAllowed: old.jokesAllowed !== false,
    until: Number.isSafeInteger(old.until) ? old.until : 0,
    updatedAt: now,
  };
  if (state.until <= now) state.mode = "neutral";

  if (event === "jokes-off") state.jokesAllowed = false;
  if (event === "jokes-on") state.jokesAllowed = true;
  const requested = {
    celebrate: state.jokesAllowed ? "playful" : "warm",
    support: "warm",
    focus: "serious",
    "jokes-off": "serious",
    "jokes-on": "neutral",
  }[event];
  if (requested) {
    state.mode = requested;
    state.until = now + 10 * 60 * 1000;
  }
  if (!state.jokesAllowed && state.mode === "playful") state.mode = "warm";
  return state;
}

const quiet = nextTone({}, { event: "jokes-off", nowMs: 0 });
console.log(nextTone(quiet, { event: "celebrate", nowMs: 1000 }).mode);
// 输出 warm:庆祝也会尊重明确的玩笑边界。

使用教程

先运行资源自带的例子:用户已经要求不要开玩笑,随后即使收到庆祝事件,也只切换成温和语气。

  1. 保存完整代码

    复制本页教学代码,保留许可证声明和自带示例,保存为 tone-state.mjs。确认不是 tone-state.mjs.txt;文件内容不要加上 Markdown 的三反引号。

  2. 在所在目录运行

    打开终端并进入保存文件的文件夹,执行下方命令。本例不需要 npm install,也不需要任何平台账号或密钥。

  3. 对照状态变化

    预期输出 warm,表示尊重了之前的 jokes-off 请求。理解后可把事件改成 focus 再观察 serious;事件必须由你的程序明确提供。

保存文件名
tone-state.mjs
运行环境
Node.js 24;本站实际核验版本为 v24.19.0。使用 .mjs 文件直接运行,不需要安装第三方 npm 依赖。
依赖与费用
这段示例不联网、不调用 AI 接口,不产生模型接口费用。运行设备、电力由使用者自行承担;接入真实模型或平台后的费用需另行核对。

运行命令

node tone-state.mjs

预期输出

warm

本地核验

2026-10-22 · Node.js v24.19.0

已在本站本地运行资源中原样附带的教学片段,核对下方控制台输出;不代表已验证生产环境、平台接入或所有边界情况。

适合用在哪里

  • 学习纯函数与有限状态机
  • 为应用组织表达风格提供一个教学起点

注意事项

  • 只返回状态,不生成聊天回复,也没有对接微信或其他平台。
  • 不从聊天文本判断真实心理,不会自动记忆或存储状态。
  • 单次演示输出已经核验;正式接入前还需测试时间回拨、无效输入、状态持久化等场景。

原作者与来源

署名
包子海梦 · AI辅助开发
原作者与来源
提示集贡献者

声明与修改说明

新编写的通用教学示例,发布前仍需核对来源与运行效果。

完整许可证

MIT

MIT License

Copyright (c) 2026 提示集贡献者

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

验证范围

教学代码已运行

已运行完整带许可的教学文件并核对输出;不代表生产部署、平台接入或全部边界情况都已验证。

2026-10-23 Node.js v24.19.0