paeg-lang-style
paeg-lang-style
中文 | English
这是什么
paeg-lang-style 是中文语言规范模块——三层架构(用户要求):
层 | 能力 | 核心文件 |
语法规则约束(最重要) | 词法/句法/标点规则作为系统提示词,指挥 LLM 使用完整的词、完整的句法、充分的状语——谁用都拼 |
|
违禁词兜底 | 动态维护的违禁词库(AI 腔/空洞大词/伪共情/廉价鼓励/网络用语),防 LLM 不听话时的底线 |
|
改写脚本 | LLM 输出后处理:检测命中规则 → 反馈带规则 ID → 多轮 Self-Refine 重写 |
|
源自 PAEG 教育智能体(v0.12-v0.71 迭代),改造为零宿主依赖的独立插件——任何 Python 项目都能接入。
核心特性
可扩充规则集:规则外置
data/rules.json,追加即热加载(RuleRegistry)通则指挥 LLM:词法完整/句法完整/充分状语通则让 LLM 泛化,而非逐词记忆(避免"只把倦优化成疲倦"的狭隘性)
确定性兜底:列举层规则("我在这里听着你。"→"我就在这里听你说说。")防 LLM 不听话
规则 ID 反馈闭环:改写反馈带"违反 #rule-lx-001",形成规则-生成-反馈闭环
动态违禁词库:运行时增删 + 外部 JSON 热加载
注入式设计:
chat_fn强制注入——接入你自己的 LLM 调用,零宿主耦合profile 三档:general / teaching / confessional——按场景拼装系统提示词
AI 味检测:句长变异/过渡词密度/三段式/破折号/段落对称 5 维信号
8+ 语法规则:GB/T 15834 标点规范 + 病句六类 + 教学语言规范
75 项测试全绿 + 20 段行为一致性(vs PAEG 原实现字符串相等)
安装
# 方式 1:pip 安装(推荐)
pip install -e /path/to/paeg-lang-style-plugin
# 方式 2:直接引用(零安装)
# 把 src/ 加入 sys.path 即可
import sys
sys.path.insert(0, "/path/to/paeg-lang-style-plugin/src")要求 Python 3.9+。零第三方运行时依赖。
以 MCP server 方式接入(像 MCP 一样直接安装即可用)
可及性标准(§3.109):任何项目
pip install后,在 MCP 客户端配置声明即可接入——零代码桥、零宿主依赖。
# 方式 1:console_scripts 入口(pip install 后)
paeg-lang-style-mcp
# 方式 2:python -m 入口(源码运行)
python -m paeg_lang_style.mcp_serverMCP 客户端配置声明(如 config/mcp_servers.json):
{
"mcpServers": {
"paeg-lang-style": {
"command": "python",
"args": ["-m", "paeg_lang_style.mcp_server"],
"cwd": "D:/wbo-workspace/paeg_project/paeg-lang-style-plugin"
}
}
}暴露的 MCP 工具(7 个):
工具名 | 功能 | read/write |
| 文本语言规范守门(L0 规则 + L2 重写) | read |
| AI 味检测 + 违禁词命中报告 | read |
| 动态违禁词库管理(增/删/查) | write |
| 语法检查(8 类规则) | read |
| AI 味 5 维信号 | read |
| 系统提示词拼装(谁用都拼) | read |
| 可扩充规则集清单 | read |
快速开始
三步走:安装 → 拼提示词 → 处理输出。
from paeg_lang_style import RuleRegistry, make_refiner, gate_content
# Step 1: 语法规则拼进你的系统提示词(谁用都拼)
system_prompt = "你是教育智能体,负责讲解数学概念。"
system_prompt += RuleRegistry().build_prompt("teaching") # 通则层指挥 LLM
# Step 2: 注入你的 LLM 调用(改写脚本)
def my_llm(system, user, max_tokens=800, **kw):
return call_my_llm_api(system, user, max_tokens=max_tokens)
refiner = make_refiner(chat_fn=my_llm)
# Step 3: LLM 输出后处理(L0 规则 + L2 重写)
raw_output = "总的来说,让我们一起赋能这个时代!"
clean = gate_content(raw_output, refiner=refiner)
# → "我们把这个时代里的每一个孩子,把他们的潜能一步步唤起。"目录
核心概念
三层架构 + 规则集数据模型——可扩充性贯穿规则定义/检测/提示词生成三处:
graph LR
A[LLM 生成文本] --> B[gate_content 守门]
B --> C{L0 规则检测}
C -->|命中列举层| D[确定性替换<br/>听着你→听你说说]
C -->|通则触发| E[L2 refiner.refine<br/>chat_fn 注入 LLM]
E --> F[反馈带规则 ID<br/>违反 #rule-lx-001]
F --> G[多轮 Self-Refine]
D --> H[输出]
G --> H
H --> I[收口: 规则再跑一遍]规则数据模型(Rule——外置 JSON 可扩充):
{
"id": "rule-lx-general-001",
"type": "general",
"category": "lexical",
"pattern": "(倦|乏|沉|累|苦|慌|虚|弱|低|烦|闷|困|急|乱)",
"replacement": null,
"message": "存在单字状态词——应扩展为完整双字词形",
"prompt_block": "### 词法完整通则(指挥 LLM 泛化)...",
"severity": "high",
"enabled": true,
"source": "builtin",
"profile_tags": ["general", "teaching", "confessional"]
}type: "general"(通则层):prompt_block拼进系统提示词,指挥 LLM 泛化——"凡表达状态/感受的单字形容词一律扩展为完整双字词形(倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱)"。LLM 自行泛化到未列举词,而非只修"倦→疲倦"。type: "explicit"(列举层):pattern + replacement确定性兜底——LLM 不听话时的最后防线。
外部项目接入指南
用户要求:任何项目/智能体想使用我们的语法规则模块,该怎么做?
场景 A:只想用"语法规则约束"(系统提示词)
from paeg_lang_style import RuleRegistry
# 语法规则拼进自己的系统提示词(谁用都拼)
system = "你是我的客服机器人。"
system += RuleRegistry().build_prompt("general") # 或 "teaching" / "confessional"build_prompt(profile) 返回的规则片段(词法完整通则/句法完整通则/充分状语通则/标点规范),
直接拼接进你的 LLM system prompt。这是"指挥 LLM 使用完整词"的本质——不依赖我们的重写器。
场景 B:想用"改写脚本"处理 LLM 输出
from paeg_lang_style import make_refiner, gate_content
# 注入你自己的 LLM 调用包装(chat_fn 强制注入,零宿主耦合)
def my_chat(system, user, max_tokens=800, **kw):
return call_your_llm(system, user, max_tokens=max_tokens)
refiner = make_refiner(chat_fn=my_chat)
clean = gate_content(your_llm_output, refiner=refiner) # L0 规则 + L2 重写
# 纯规则(不调 LLM):
clean = gate_content(your_llm_output) # 病句/违禁词确定性修正场景 C:想用"违禁词库"
from paeg_lang_style import ForbiddenWords
fb = ForbiddenWords() # 内置违禁词(AI 腔/空洞大词/伪共情/网络用语)
fb.load_json("my_words.json") # 合并你自己的词库(动态扩充)
fb.add("你们公司的禁词") # 运行时新增
hits = fb.detect(text) # → ["禁词1", "禁词2"]场景 D:想扩充规则(可扩展性)
编辑 data/rules.json,追加一条规则即热加载:
{
"rules": [
{
"id": "rule-my-001",
"type": "explicit",
"category": "lexical",
"pattern": "你们行业的黑话",
"replacement": "规范说法",
"message": "这是行业黑话,应改规范",
"severity": "medium",
"enabled": true,
"source": "user",
"profile_tags": ["general"]
}
]
}reg = RuleRegistry()
reg.load("data/rules.json") # 合并(追加即生效)
reg.watch("data/rules.json") # mtime 变更自动热重载
reg.check_reload() # 每次调用前检查场景 E:完整接入(含规则 ID 反馈闭环)
from paeg_lang_style import RuleRegistry, make_refiner, gate_content, get_style_prompt
# 1. 系统提示词(规则 + 风格)
system = get_style_prompt("all") + "\n" + RuleRegistry().build_prompt("general")
# 2. 改写器(规则检测 → 反馈带 ID → 重写)
refiner = make_refiner(chat_fn=my_chat)
# 3. 守门(L0 规则 + L2 重写 + 收口)
final = gate_content(raw, refiner=refiner)可扩展性
扩展点 | 方式 | 机制 |
语法规则 | 编辑 |
|
违禁词 |
| 运行时动态维护 |
语料 | 替换 | 构造时 |
profile | 新增规则时加 |
|
LLM 后端 | 注入任意 | 强制注入,零宿主耦合 |
规则 ID 契约 | 规则 | 规则-生成-反馈闭环,便于 telemetry |
可维护性
零宿主依赖:不 import 任何宿主项目模块,独立可测
旧 API 兼容:
rules.py/rules_enhanced.py保留为薄包装,向后兼容75 项测试:规则集加载/热重载/检测/拼装/用户扩充/损坏容错全覆盖
行为一致性:20 段样本 vs PAEG 原实现字符串相等(零漂移)
损坏容错:JSON 损坏时保留上一份规则集,绝不"清空跑"
防膨胀:
token_budget控制系统提示词长度(默认 800)模式清晰:通则层(指挥 LLM)与列举层(确定性兜底)职责分离
内置语法规则
ID | 类型 | 类别 | 规则 | 触发模式 | 修正 |
| 通则 | 词法 | 词法完整 | 单字状态词(倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱) | 扩展完整双字词形 |
| 通则 | 句法 | 句法完整 | 主谓宾/动宾/介词/复合句 | 成分齐全 |
| 通则 | 句法 | 充分状语 | 动词开头短句/孤零零单动词 | 补时间/地点/方式/条件/对象/目的状语 |
| 通则 | 标点 | 标点规范(GB/T 15834) | 顿号vs逗号/说后冒号 | 标点规范 |
| 列举 | 词法 | 倦→疲倦 |
| 确定性替换 |
| 列举 | 词法 | 乏→疲乏 |
| 确定性替换 |
| 列举 | 词法 | 道出→说出来 |
| 确定性替换 |
| 列举 | 词法 | 探知→探索并了解 |
| 确定性替换 |
| 列举 | 句法 | "听着你"悬空 |
| 听你说说 |
| 列举 | 句法 | 悬空宾语 |
| 补宾语 |
| 列举 | 句法 | 动宾搭配 |
| 有很重的分量 |
| 列举 | 句法 | 翻译腔冗余 |
| 直接说动词 |
| 列举 | 标点 | 说后逗号 |
| 改用逗号 |
充分状语通则详情(rule-sx-general-002,用户新增):
每个动作/判断用充分的状语交代清楚——时间、地点、方式、条件、对象、目的。 "复习单词。" → "你可以在每天睡前用十分钟复习单词。" "使用这个软件。" → "你可以在每天固定的时间使用这个软件。"
违禁词库
类别 | 示例 |
AI 腔套话 | 总的来说 / 综上所述 / 值得注意的是 / 让我们一起 |
空洞大词 | 赋能 / 点亮 / 激活 / 重塑 / 升级 / 全方位 |
伪共情动词 | 接住(情绪)/ 托住 / 兜住 / 我懂你 / 心疼你 |
廉价鼓励 | 加油 / 你真棒 / 你一定可以 |
低劣网络用语 | yyds / 绝绝子 / 栓Q / 破防 / 内卷 / 躺平 / 宝子 |
空洞赞美形容词 | 深刻 / 全面 / 系统 / 本质 |
扩充方式:ForbiddenWords().load_json("path.json")——JSON 结构 {"extra_forbidden": [...], "ai_tells_extra": [...]}。
API 参考
RuleRegistry
方法 | 签名 | 说明 |
|
| 全部规则 |
|
| 按 ID 查规则 |
|
| 运行时新增(同 ID 覆盖内置) |
|
| 运行时移除 |
|
| 合并外部 JSON(热加载) |
|
| mtime 监听 |
|
| 检查并重载 |
|
| 检测命中规则 |
|
| 确定性替换 |
|
| 拼装系统提示词 |
LanguageRefiner / make_refiner
方法 | 签名 | 说明 |
|
| 工厂(chat_fn 必传) |
|
| 多轮 Self-Refine 重写 |
|
| 语法检查 |
|
| 违禁词命中 |
|
| AI 味信号 |
gate_content / gate_short
函数 | 签名 | 说明 |
|
| L0 规则 + L2 重写 |
|
| 短文本快路径(仅 L0) |
ForbiddenWords
方法 | 签名 | 说明 |
|
| 运行时增删 |
|
| 合并外部词库 |
|
| 命中词列表 |
|
| 命中总数 |
get_style_prompt
参数 | 说明 |
| 全量语言风格提示词 |
| 分段 |
| 多段拼接 |
配置参考
环境变量
变量 | 默认值 | 说明 |
|
| 规则集路径覆盖 |
data/ 文件
文件 | 用途 | 可扩充 |
| 语法规则集 | 是,追加即热加载 |
| 违禁词库 | 是,动态维护 |
| 语料 few-shot | 是,可替换 |
架构设计
宿主系统(任何 Python 项目 / 智能体)
system_prompt += RuleRegistry().build_prompt() <- 语法规则拼系统提示词(谁用都拼)
gate_content(output, refiner=make_refiner(chat)) <- 输出后处理
|
| 零宿主依赖(不 import 宿主任何模块)
v
paeg_lang_style(独立插件)
+------------------+ +-----------------+ +-----------------+
| rule_registry | | forbidden.py | | ai_taste.py |
| 可扩充规则集 | | 动态违禁词库 | | AI 味检测 |
+--------+---------+ +--------+--------+ +--------+--------+
| | |
v v v
+-----------------------------------------------------------+
| refiner.py(改写脚本:chat_fn 注入 + 规则 ID 闭环) |
| gate.py(守门入口:L0+L2 编排) |
+-----------------------------------------------------------+
data/(rules.json / forbidden_words.json / 语料)与 PAEG 主项目集成
PAEG 教育智能体通过唯一适配层 infra/lang_plugin_bridge.py 接入(R18/R20 零破坏铁律):
from infra.lang_plugin_bridge import gate_content, get_style_prompt, make_refiner
# 插件挂载 → 走插件;插件未挂载 → 静默回退 PAEG 原实现(旧文件永不删除)测试
python -m pytest tests/ -q
# 75 项:规则集加载/热重载/检测/拼装/用户扩充/损坏容错 + 通则 + 充分状语 + 行为一致性贡献指南
欢迎贡献!请阅读 CONTRIBUTING.md(待建)了解:
新增语法规则:编辑
data/rules.json追加Rule(含测试)新增违禁词:
ForbiddenWords.load_json或直接提 PR 进内置词库代码风格:遵循现有模块结构 + 注释规范
更新日志
详见 CHANGELOG.md。
致谢
PAEG 教育智能体(v0.12-v0.71 迭代)——本插件提取自其语言规范模块
LanguageTool——规则声明式引擎范式(dev.languagetool.org)
textstat——可读性度量范式(github.com/textstat/textstat)
GB/T 15834-2011《标点符号用法》——标点规则国家标准
Agent Skills 标准——渐进披露范式(agentskills.io)
许可证
MIT © 2026 PAEG Team — 详见 LICENSE 文件。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Prose linter + AI-slop detector: weasel words, passive voice, hedging, and research-cited AI tells
Deterministic validation for AI-generated artifacts: JSON Schema, OpenAPI response, SQL syntax.
Lints + auto-fixes how AI coding agents discover any new product. 24 rules, 6 tools, score 0-100.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Golden2002/paeg-lang-style-plugin'
If you have feedback or need assistance with the MCP directory API, please join our Discord server