paeg-lang-style
paeg-lang-style
中文 | English
Qué es esto
paeg-lang-style es un módulo de normas lingüísticas del chino — arquitectura de tres capas (requisito del usuario):
Capa | Capacidad | Archivo principal |
Restricción de reglas gramaticales (la más importante) | Reglas léxicas/sintácticas/de puntuación como prompt del sistema, que dirigen al LLM a usar palabras completas, sintaxis completa y complementos circunstanciales suficientes — quien lo use lo ensambla |
|
Red de seguridad de palabras prohibidas | Diccionario de palabras prohibidas mantenido dinámicamente (lenguaje artificial de IA/palabras grandilocuentes vacías/falsa empatía/ánimos baratos/lenguaje de internet), como línea de defensa cuando el LLM no obedece |
|
Script de reescritura | Postprocesado de la salida del LLM: detecta reglas incumplidas → retroalimentación con ID de regla → reescritura Self-Refine en múltiples rondas |
|
Originado del agente educativo PAEG (iteraciones v0.12-v0.71), transformado en un plugin independiente sin dependencias del host — cualquier proyecto Python puede integrarlo.
Características principales
Conjunto de reglas ampliable: reglas externalizadas en
data/rules.json, añadir y se carga en caliente (RuleRegistry)Principios generales que dirigen al LLM: los principios de completitud léxica/completitud sintáctica/complementos circunstanciales suficientes hacen que el LLM generalice, en lugar de memorizar palabra por palabra (evita la estrechez de "solo convertir 倦 en 疲倦")
Red de seguridad determinista: reglas de capa explícita ("我在这里听着你。"→"我就在这里听你说说。") evitan que el LLM desobedezca
Bucle de retroalimentación con ID de regla: la retroalimentación de reescritura incluye "viola #rule-lx-001", formando un bucle regla-generación-retroalimentación
Diccionario dinámico de palabras prohibidas: alta/baja en tiempo de ejecución + carga en caliente desde JSON externo
Diseño por inyección:
chat_fnse inyecta obligatoriamente — conecta tu propia llamada al LLM, cero acoplamiento con el hostTres perfiles: general / teaching / confessional — ensambla el prompt del sistema según el escenario
Detección de sabor IA: 5 señales dimensionales: variación de longitud de frase/densidad de conectores/estructura de tres partes/raya/paralelismo de párrafos
8+ reglas gramaticales: norma de puntuación GB/T 15834 + seis tipos de frases incorrectas + normas del lenguaje docente
75 pruebas en verde + 20 segmentos de consistencia de comportamiento (igualdad de cadenas con la implementación original de PAEG)
Instalación
# 方式 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")Requiere Python 3.9+. Cero dependencias de terceros en tiempo de ejecución.
Integración como servidor MCP (instala y úsalo directamente, como MCP)
Estándar de accesibilidad (§3.109): cualquier proyecto, tras
pip install, puede integrarse declarándolo en la configuración del cliente MCP — cero puente de código, cero dependencias del host.
# 方式 1:console_scripts 入口(pip install 后)
paeg-lang-style-mcp
# 方式 2:python -m 入口(源码运行)
python -m paeg_lang_style.mcp_serverDeclaración de configuración del cliente MCP (p. ej. 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"
}
}
}Herramientas MCP expuestas (7):
Nombre de la herramienta | Función | read/write |
| Puerta de normas lingüísticas del texto (reglas L0 + reescritura L2) | read |
| Detección de sabor IA + informe de palabras prohibidas encontradas | read |
| Gestión del diccionario dinámico de palabras prohibidas (alta/baja/consulta) | write |
| Comprobación gramatical (8 tipos de reglas) | read |
| Señales de sabor IA en 5 dimensiones | read |
| Ensamblaje del prompt del sistema (quien lo use lo ensambla) | read |
| Listado del conjunto de reglas ampliable | read |
Inicio rápido
Tres pasos: instalar → ensamblar el prompt → procesar la salida.
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)
# → "我们把这个时代里的每一个孩子,把他们的潜能一步步唤起。"Índice
Conceptos principales
Arquitectura de tres capas + modelo de datos del conjunto de reglas — la ampliabilidad atraviesa los tres puntos: definición de reglas/detección/generación de prompts:
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[收口: 规则再跑一遍]Modelo de datos de reglas (Rule — ampliable mediante JSON externo):
{
"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"(capa de principios generales):prompt_blockse inserta en el prompt del sistema y dirige al LLM a generalizar — "todo adjetivo monosilábico que exprese estado/sensación debe ampliarse a la forma bisilábica completa (倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱)". El LLM generaliza por sí mismo a palabras no enumeradas, en lugar de corregir solo "倦→疲倦".type: "explicit"(capa explícita):pattern + replacementcomo red de seguridad determinista — la última línea de defensa cuando el LLM no obedece.
Guía de integración para proyectos externos
Requisito del usuario: cualquier proyecto/agente que quiera usar nuestro módulo de reglas gramaticales, ¿cómo lo hace?
Escenario A: solo quiero usar la "restricción de reglas gramaticales" (prompt del sistema)
from paeg_lang_style import RuleRegistry
# 语法规则拼进自己的系统提示词(谁用都拼)
system = "你是我的客服机器人。"
system += RuleRegistry().build_prompt("general") # 或 "teaching" / "confessional"El fragmento de reglas devuelto por build_prompt(profile) (principio general de completitud léxica/principio general de completitud sintáctica/principio general de complementos circunstanciales suficientes/norma de puntuación) se concatena directamente en el system prompt de tu LLM. Esta es la esencia de "dirigir al LLM a usar palabras completas" — no depende de nuestro reescritor.
Escenario B: quiero usar el "script de reescritura" para procesar la salida del 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) # 病句/违禁词确定性修正Escenario C: quiero usar el "diccionario de palabras prohibidas"
from paeg_lang_style import ForbiddenWords
fb = ForbiddenWords() # 内置违禁词(AI 腔/空洞大词/伪共情/网络用语)
fb.load_json("my_words.json") # 合并你自己的词库(动态扩充)
fb.add("你们公司的禁词") # 运行时新增
hits = fb.detect(text) # → ["禁词1", "禁词2"]Escenario D: quiero ampliar las reglas (ampliabilidad)
Edita data/rules.json, añade una regla y se carga en caliente:
{
"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() # 每次调用前检查Escenario E: integración completa (incluido el bucle de retroalimentación con ID de regla)
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)Ampliabilidad
Punto de ampliación | Forma | Mecanismo |
Reglas gramaticales | Editar |
|
Palabras prohibidas |
| Mantenimiento dinámico en tiempo de ejecución |
Corpus | Sustituir | Parámetro |
Perfil | Añadir |
|
Backend LLM | Inyectar cualquier | Inyección obligatoria, cero acoplamiento con el host |
Contrato de ID de regla | El | Bucle regla-generación-retroalimentación, apto para telemetría |
Mantenibilidad
Cero dependencias del host: no importa ningún módulo del proyecto host, comprobable de forma independiente
Compatibilidad con API antigua:
rules.py/rules_enhanced.pyse conservan como envoltorios finos, compatibles hacia atrás75 pruebas: cobertura completa de carga del conjunto de reglas/recarga en caliente/detección/ensamblaje/ampliación por el usuario/tolerancia a corrupción
Consistencia de comportamiento: 20 segmentos de muestra con igualdad de cadenas frente a la implementación original de PAEG (cero deriva)
Tolerancia a corrupción: si el JSON se corrompe, se conserva el conjunto de reglas anterior, nunca "se vacía y se ejecuta"
Anti-inflación:
token_budgetcontrola la longitud del prompt del sistema (por defecto 800)Patrón claro: separación de responsabilidades entre la capa de principios generales (dirige al LLM) y la capa explícita (red de seguridad determinista)
Reglas gramaticales integradas
ID | Tipo | Categoría | Regla | Patrón de activación | Corrección |
| Principio general | Léxico | Completitud léxica | Palabras de estado monosilábicas (倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱) | Ampliar a forma bisilábica completa |
| Principio general | Sintaxis | Completitud sintáctica | Sujeto-verbo-objeto/verbo-objeto/preposición/oración compuesta | Componentes completos |
| Principio general | Sintaxis | Complementos circunstanciales suficientes | Frases cortas que empiezan por verbo/verbos aislados solos | Añadir complementos de tiempo/lugar/modo/condición/objeto/finalidad |
| Principio general | Puntuación | Norma de puntuación (GB/T 15834) | Coma de enumeración vs coma/coma tras "decir" | Puntuación normativa |
| Explícita | Léxico | 倦→疲倦 |
| Sustitución determinista |
| Explícita | Léxico | 乏→疲乏 |
| Sustitución determinista |
| Explícita | Léxico | 道出→说出来 |
| Sustitución determinista |
| Explícita | Léxico | 探知→探索并了解 |
| Sustitución determinista |
| Explícita | Sintaxis | "听着你" colgante |
| 听你说说 |
| Explícita | Sintaxis | Objeto colgante |
| Completar el objeto |
| Explícita | Sintaxis | Concordancia verbo-objeto |
| 有很重的分量 |
| Explícita | Sintaxis | Redundancia de traducción |
| Decir directamente el verbo |
| Explícita | Puntuación | Coma tras "decir" |
| Usar coma en su lugar |
Detalle del principio general de complementos circunstanciales suficientes (rule-sx-general-002, añadido por el usuario):
Cada acción/juicio debe explicitarse con complementos circunstanciales suficientes — tiempo, lugar, modo, condición, objeto, finalidad. "复习单词。" → "你可以在每天睡前用十分钟复习单词。" "使用这个软件。" → "你可以在每天固定的时间使用这个软件。"
Diccionario de palabras prohibidas
Categoría | Ejemplos |
Frases hechas de IA | 总的来说 / 综上所述 / 值得注意的是 / 让我们一起 |
Palabras grandilocuentes vacías | 赋能 / 点亮 / 激活 / 重塑 / 升级 / 全方位 |
Verbos de falsa empatía | 接住(情绪)/ 托住 / 兜住 / 我懂你 / 心疼你 |
Ánimos baratos | 加油 / 你真棒 / 你一定可以 |
Lenguaje de internet de baja calidad | yyds / 绝绝子 / 栓Q / 破防 / 内卷 / 躺平 / 宝子 |
Adjetivos de elogio vacíos | 深刻 / 全面 / 系统 / 本质 |
Forma de ampliación: ForbiddenWords().load_json("path.json") — estructura JSON {"extra_forbidden": [...], "ai_tells_extra": [...]}.
Referencia de API
RuleRegistry
Método | Firma | Descripción |
|
| Todas las reglas |
|
| Consultar regla por ID |
|
| Añadir en tiempo de ejecución (mismo ID sobrescribe la integrada) |
|
| Eliminar en tiempo de ejecución |
|
| Fusionar JSON externo (carga en caliente) |
|
| Monitorización de mtime |
|
| Comprobar y recargar |
|
| Detectar reglas incumplidas |
|
| Sustitución determinista |
|
| Ensamblar prompt del sistema |
LanguageRefiner / make_refiner
Método | Firma | Descripción |
|
| Fábrica (chat_fn obligatorio) |
|
| Reescritura Self-Refine en múltiples rondas |
|
| Comprobación gramatical |
|
| Palabras prohibidas encontradas |
|
| Señales de sabor IA |
gate_content / gate_short
Función | Firma | Descripción |
|
| Reglas L0 + reescritura L2 |
|
| Ruta rápida para textos cortos (solo L0) |
ForbiddenWords
Método | Firma | Descripción |
|
| Alta/baja en tiempo de ejecución |
|
| Fusionar diccionario externo |
|
| Lista de palabras encontradas |
|
| Total de coincidencias |
get_style_prompt
Parámetro | Descripción |
| Prompt completo de estilo lingüístico |
| Por secciones |
| Concatenación de varias secciones |
Referencia de configuración
Variables de entorno
Variable | Valor por defecto | Descripción |
|
| Sobrescribir la ruta del conjunto de reglas |
Archivos data/
Archivo | Uso | Ampliable |
| Conjunto de reglas gramaticales | Sí, añadir y se carga en caliente |
| Diccionario de palabras prohibidas | Sí, mantenimiento dinámico |
| Corpus few-shot | Sí, sustituible |
Diseño de arquitectura
宿主系统(任何 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 / 语料)Integración con el proyecto principal PAEG
El agente educativo PAEG se integra mediante la única capa de adaptación infra/lang_plugin_bridge.py (regla de hierro R18/R20 de cero rupturas):
from infra.lang_plugin_bridge import gate_content, get_style_prompt, make_refiner
# 插件挂载 → 走插件;插件未挂载 → 静默回退 PAEG 原实现(旧文件永不删除)Pruebas
python -m pytest tests/ -q
# 75 项:规则集加载/热重载/检测/拼装/用户扩充/损坏容错 + 通则 + 充分状语 + 行为一致性Guía de contribución
¡Las contribuciones son bienvenidas! Consulta CONTRIBUTING.md (pendiente de creación) para saber:
Nueva regla de sintaxis: edite
data/rules.jsonpara añadirRule(con pruebas)Nueva palabra prohibida:
ForbiddenWords.load_jsono envíe directamente un PR al diccionario integradoEstilo de código: siga la estructura de módulos existente + las normas de comentarios
Registro de cambios
Consulte CHANGELOG.md.
Agradecimientos
Agente educativo PAEG (iteraciones v0.12-v0.71) — este plugin se extrajo de su módulo de especificaciones lingüísticas
LanguageTool — paradigma de motor declarativo de reglas (dev.languagetool.org)
textstat — paradigma de medición de legibilidad (github.com/textstat/textstat)
GB/T 15834-2011《Uso de los signos de puntuación》 — norma nacional para las reglas de puntuación
Estándar Agent Skills — paradigma de divulgación progresiva (agentskills.io)
Licencia
MIT © 2026 PAEG Team — consulte el archivo 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