{"code":200,"msg":"success","data":{"plugin_id":"ghcasxwm983/astrbot_plugin_humanizer","author":"SO酱","publisher_namespace":"ghcasxwm983","slug":"ghcasxwm983-astrbot-plugin-humanizer-07c1daa53ff8acfa","name":"astrbot_plugin_humanizer","plugin_name":"astrbot_plugin_humanizer","display_name":"活人感出站润色","description":"模型写中文时有一套稳定的话术壳：开场「这是一个很好的问题」「首先…其次…最后」，\n收尾「希望这对你有帮助」「如果还有其他问题，欢迎随时提问」，中间堆「总的来说」\n「需要注意的是」，再加上 markdown 标题、加粗、长破折号——在 QQ 这种不渲染 markdown\n的聊天窗口里，这些痕迹比内容本身更显眼，一读就知道对面不是人。\n\n本插件在 on_llm_response 钩子上做**位置式**改写：先把代码围栏、行内代码、URL、\n平台组件标签（\u003cqqbot-at-user …/\u003e 之类）切出来保护住，只对普通正文套规则，\n所以代码示例里的「因此」、链接、@ 卡片都不会被改到一个字节。\n\n默认走确定性规则（不动事实、不额外发请求）：删开场套话、删收尾套话、删废话连接词、\n书面词换口语词、清 markdown 标题/加粗、压多余空行。规则全部可在配置里关或加自定义正则。\n\nv1.0.9 起补「聊天口气」：整条消息末尾的句号/感叹号去掉（问号保留）、\n「……，也就是说 XXX」这种复述尾巴删掉、「顺便说一下，」引导语去掉；\n想硬性压短可以设 max_sentences（0 = 不限，默认不动长度）。\n\nv1.0.8 起增收一批 AI 陈词：铺垫式开头（众所周知、随着……的发展）、同义反复（目前现状、\n必须要）、营销腔与互联网黑话（致力于打造→做、技术护城河→技术优势、抓手→办法）、\n以及「……，为后续迭代奠定了基础。」这类句末空泛升华。词表取自 D:\\去AI味 里的\nstop-slop-zh 与 humanizer-zh-chat；只收删掉后信息量不变的项，需要判断频率的\n（单个「其实」、单个破折号、单次「不是…而是」）故意不进规则。\n\n另有一个可选的 LLM 重写档（默认关，需要填模型 ID）：把润色交给模型做，带长度、\n空输出、工具调用语法三道闸，不合格就退回确定性结果，不会把坏稿发出去。","authors":["SO酱"],"author_name":"SO酱","social_link":null,"repository_url":"https://github.com/ghcasxwm983/astrbot_plugin_humanizer","git_commit":"3cea3dd1a89a5fbb0165d37e2652987af1cb687b","download_url":"https://astrbot-cloud-test-s3.astrbot.app/plugins/releases/sojiang/astrbot_plugin_humanizer/1.0.11/astrbot_plugin_humanizer-1.0.11-3cea3dd1a89a.zip","logo_url":"/icon","tags":[],"category":"其他","categories":["其他"],"astrbot_version":"\u003e=4.27.0","support_platforms":[],"official":false,"pinned":false,"downloads":69,"likes":0,"github_stars":0,"liked_by_viewer":false,"favorited_by_viewer":false,"owner_id":2592,"owner_username":"sojiang","owner_avatar_url":"https://avatars.githubusercontent.com/u/348859329?v=4","claim_status":"claimed","claim_repository_owner":"ghcasxwm983","latest_version":"1.0.11","published_version":"1.0.11","latest_submission_version":null,"latest_submission_status":null,"latest_submission_summary":null,"is_published":true,"is_deleted":false,"deleted_at":null,"readme":"# astrbot_plugin_humanizer\n\nAstrBot 出站润色插件：在回复发出前抹掉 AI 味话术壳，让文字更像真人在聊天窗口里随手打出来的。\n\n## 做什么\n\n- 删开场套话：这是一个很好的问题 / 作为一个人工智能 / 让我们一起来看看\n- 删收尾套话：希望这对你有帮助 / 如果还有其他问题，欢迎随时提问\n- 删废话连接词：总的来说 / 需要注意的是 / 首先，\n- 书面词换口语：因此→所以、然而→不过、是否→是不是、倘若/若是→要是（单字「若」只在连词位置替换，成语不动）\n- 聊天口气：整条消息末尾的「。」「！」去掉（问号保留）、「……，也就是说」复述尾巴删掉、「顺便说一下，」引导语去掉\n- 删 AI 陈词与黑话：目前现状→现状、致力于打造→做、抓手→办法、技术护城河→技术优势、\n  「……，为后续迭代奠定了基础。」这类句末空泛升华整句收掉\n- 删铺垫式开头：众所周知， / 不可否认， / 近年来， / 随着……的发展，\n- 清 IM 里的 markdown 痕迹：行首 `#` 标题、`**` 加粗、连续破折号、多余空行\n\n代码块、行内代码、URL、平台组件标签（`\u003cqqbot-at-user …/\u003e` 这类）会先被切出来保护，\n规则只作用于普通正文，所以代码示例里的「因此」、链接、@ 卡片不会被改到一个字节。\n\n图文混排的消息链按 Plain 段原位改写（改动落在组件自己的 `text` 上），不会再走\n`completion_text` 的二传手——那条 setter 会剔掉所有 Plain 再整段插到索引 0，图片顺序会被打乱。\n\n## 安装\n\n把整个目录放进 AstrBot 的 `data/plugins/` 下，重启 AstrBot（或热重载插件）。\n\n## 配置\n\n所有规则可在 WebUI 里单独开关：\n\n| 键 | 默认 | 说明 |\n| --- | --- | --- |\n| `enable` | true | 总开关 |\n| `strip_openers` / `strip_closers` | true | 删开场 / 收尾套话 |\n| `strip_connectives` | true | 删只起转场作用的连接词 |\n| `colloquial_swap` | true | 书面词换口语词 |\n| `strip_ai_cliches` | true | 删 AI 陈词 / 黑话 / 句末空泛升华 |\n| `short_chat` | true | 聊天口气：去句末句号、复述尾巴、顺带一提引导语 |\n| `max_sentences` | 0 | 最多保留几句，0 表示不限；设成 2/3 会硬截断 |\n| `clean_markdown` | true | 清 IM 里的 markdown 痕迹 |\n| `custom_remove` | [] | 自定义要删的短语正则 |\n| `llm_rewrite` | false | 可选：用模型再润色一遍 |\n| `llm_provider_id` | \"\" | 润色档用的模型实例 ID，留空则跳过 |\n\n`llm_rewrite` 开了以后，润色结果要过三道闸：空输出、把工具调用写成正文、长度失控，\n任何一道不过都退回确定性规则的结果，不会把坏稿发出去。\n\n## 说明\n\n- 只挂在 `on_llm_response` 上，不改框架、不依赖其它插件。\n- 规则把整条回复吃空时会保留原文，不会因为润色发出一条空消息。","readme_html":"\u003ch1 dir=\"auto\"\u003eastrbot_plugin_humanizer\u003c/h1\u003e\n\u003cp dir=\"auto\"\u003eAstrBot 出站润色插件：在回复发出前抹掉 AI 味话术壳，让文字更像真人在聊天窗口里随手打出来的。\u003c/p\u003e\n\u003ch2 dir=\"auto\"\u003e做什么\u003c/h2\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e删开场套话：这是一个很好的问题 / 作为一个人工智能 / 让我们一起来看看\u003c/li\u003e\n\u003cli\u003e删收尾套话：希望这对你有帮助 / 如果还有其他问题，欢迎随时提问\u003c/li\u003e\n\u003cli\u003e删废话连接词：总的来说 / 需要注意的是 / 首先，\u003c/li\u003e\n\u003cli\u003e书面词换口语：因此→所以、然而→不过、是否→是不是、倘若/若是→要是（单字「若」只在连词位置替换，成语不动）\u003c/li\u003e\n\u003cli\u003e聊天口气：整条消息末尾的「。」「！」去掉（问号保留）、「……，也就是说」复述尾巴删掉、「顺便说一下，」引导语去掉\u003c/li\u003e\n\u003cli\u003e删 AI 陈词与黑话：目前现状→现状、致力于打造→做、抓手→办法、技术护城河→技术优势、\u003cbr\u003e\n「……，为后续迭代奠定了基础。」这类句末空泛升华整句收掉\u003c/li\u003e\n\u003cli\u003e删铺垫式开头：众所周知， / 不可否认， / 近年来， / 随着……的发展，\u003c/li\u003e\n\u003cli\u003e清 IM 里的 markdown 痕迹：行首 \u003ccode class=\"notranslate\"\u003e#\u003c/code\u003e 标题、\u003ccode class=\"notranslate\"\u003e**\u003c/code\u003e 加粗、连续破折号、多余空行\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e代码块、行内代码、URL、平台组件标签（\u003ccode class=\"notranslate\"\u003e\u0026lt;qqbot-at-user …/\u0026gt;\u003c/code\u003e 这类）会先被切出来保护，\u003cbr\u003e\n规则只作用于普通正文，所以代码示例里的「因此」、链接、@ 卡片不会被改到一个字节。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e图文混排的消息链按 Plain 段原位改写（改动落在组件自己的 \u003ccode class=\"notranslate\"\u003etext\u003c/code\u003e 上），不会再走\u003cbr\u003e\n\u003ccode class=\"notranslate\"\u003ecompletion_text\u003c/code\u003e 的二传手——那条 setter 会剔掉所有 Plain 再整段插到索引 0，图片顺序会被打乱。\u003c/p\u003e\n\u003ch2 dir=\"auto\"\u003e安装\u003c/h2\u003e\n\u003cp dir=\"auto\"\u003e把整个目录放进 AstrBot 的 \u003ccode class=\"notranslate\"\u003edata/plugins/\u003c/code\u003e 下，重启 AstrBot（或热重载插件）。\u003c/p\u003e\n\u003ch2 dir=\"auto\"\u003e配置\u003c/h2\u003e\n\u003cp dir=\"auto\"\u003e所有规则可在 WebUI 里单独开关：\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable role=\"table\"\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e键\u003c/th\u003e\n\u003cth\u003e默认\u003c/th\u003e\n\u003cth\u003e说明\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003eenable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e总开关\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003estrip_openers\u003c/code\u003e / \u003ccode class=\"notranslate\"\u003estrip_closers\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e删开场 / 收尾套话\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003estrip_connectives\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e删只起转场作用的连接词\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003ecolloquial_swap\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e书面词换口语词\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003estrip_ai_cliches\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e删 AI 陈词 / 黑话 / 句末空泛升华\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003eshort_chat\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e聊天口气：去句末句号、复述尾巴、顺带一提引导语\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003emax_sentences\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e0\u003c/td\u003e\n\u003ctd\u003e最多保留几句，0 表示不限；设成 2/3 会硬截断\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003eclean_markdown\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003etrue\u003c/td\u003e\n\u003ctd\u003e清 IM 里的 markdown 痕迹\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003ecustom_remove\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e[]\u003c/td\u003e\n\u003ctd\u003e自定义要删的短语正则\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003ellm_rewrite\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003efalse\u003c/td\u003e\n\u003ctd\u003e可选：用模型再润色一遍\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"notranslate\"\u003ellm_provider_id\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\"\"\u003c/td\u003e\n\u003ctd\u003e润色档用的模型实例 ID，留空则跳过\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode class=\"notranslate\"\u003ellm_rewrite\u003c/code\u003e 开了以后，润色结果要过三道闸：空输出、把工具调用写成正文、长度失控，\u003cbr\u003e\n任何一道不过都退回确定性规则的结果，不会把坏稿发出去。\u003c/p\u003e\n\u003ch2 dir=\"auto\"\u003e说明\u003c/h2\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e只挂在 \u003ccode class=\"notranslate\"\u003eon_llm_response\u003c/code\u003e 上，不改框架、不依赖其它插件。\u003c/li\u003e\n\u003cli\u003e规则把整条回复吃空时会保留原文，不会因为润色发出一条空消息。\u003c/li\u003e\n\u003c/ul\u003e","changelog":null,"created_at":"2026-10-31T01:33:38.116595Z","updated_at":"2026-11-08T10:27:57.196894Z","source_type":"github","versions":[{"version":"1.0.11","source_type":"github","git_commit":"3cea3dd1a89a5fbb0165d37e2652987af1cb687b","download_url":"https://astrbot-cloud-test-s3.astrbot.app/plugins/releases/sojiang/astrbot_plugin_humanizer/1.0.11/astrbot_plugin_humanizer-1.0.11-3cea3dd1a89a.zip","created_at":"2026-10-31T02:40:35.12127Z","status":"approved","queue_status":"done","review_mode":"llm","guard_summary":"VirusTotal 与 Claude Code Agent 安全检查均已通过。","guard_findings":[{"message":"malicious=0, suspicious=0, harmless=0, undetected=66","scanner":"virustotal","status":"passed"},{"message":"审查通过。插件 astrbot_plugin_humanizer v1.0.11 仅在 on_llm_response 钩子上对出站回复做正则润色：logger 正确地从 astrbot.api 导入，无第三方日志库；无同步阻塞网络 I/O（唯一的模型调用 await self.context.llm_generate 为标准异步插件 API，且默认关闭）；无任何文件写入或持久化数据，不触碰 db_helper 或 Conversation 表，不修改会话上下文缓存，属于合规的出站消息后处理；无 eval/exec、subprocess、socket、隐藏下载或持久化钩子；无针对审查者或扫描 Agent 的提示注入（_conf_schema.json 中作为润色档提示词的 llm_style 属于正常的插件功能注入，且插件对 LLM 输出设有空结果、工具调用语法、长度异常三道防护闸）。tests 目录仅为离线回归桩件，无可疑行为。可以上架。","scanner":"claude-code","status":"passed"}],"reviewed_at":"2026-10-31T02:47:45.681897Z","published_at":"2026-10-31T02:47:45.688302Z"},{"version":"1.0.10","source_type":"github","git_commit":"0b395b9eab92c2b7c2e37cf166048e0d65387f72","download_url":"https://astrbot-cloud-test-s3.astrbot.app/plugins/releases/sojiang/astrbot_plugin_humanizer/1.0.10/astrbot_plugin_humanizer-1.0.10-0b395b9eab92.zip","created_at":"2026-10-31T01:50:34.885253Z","status":"approved","queue_status":"done","review_mode":"llm","guard_summary":"VirusTotal 与 Claude Code Agent 安全检查均已通过。","guard_findings":[{"message":"malicious=0, suspicious=0, harmless=0, undetected=66","scanner":"virustotal","status":"passed"},{"message":"插件仅通过 on_llm_response 钩子对出站回复做基于正则的文本润色（删套话、书面词换口语、清 markdown 痕迹），代码块/行内代码/URL/平台组件标签均先切出保护、原样保留。检查结论：1) 无网络 I/O（仅可选的 context.llm_generate 官方 API 调用，默认关闭，且对结果有长度/工具调用/空输出校验后才会替换）、无文件写入、无数据库操作（未触碰 db_helper，也未修改会话上下文，只改出站展示文本）、无 eval/exec/隐藏下载/持久化/启动钩子；2) logger 严格从 astrbot.api 导入，无第三方或内置 logging；3) 无可疑网络或系统调用，tests 目录仅为离线桩件回归测试；4) README/metadata/配置项描述与代码行为一致，未发现针对审查者的提示词注入或恶意投毒。","scanner":"claude-code","status":"passed"}],"reviewed_at":"2026-10-31T01:52:24.602248Z","published_at":"2026-10-31T01:52:24.617797Z"}]}}
