paeg-lang-style
paeg-lang-style
Deutsch | English
Was ist das?
paeg-lang-style ist ein Modul für chinesische Sprachstandards – Drei-Schichten-Architektur (Nutzeranforderung):
Schicht | Fähigkeit | Kern-Dateien |
Syntaxregel-Constraint (am wichtigsten) | Lexikalische/syntaktische/Interpunktionsregeln als System-Prompt, die das LLM anweisen, vollständige Wörter, vollständige Syntax und ausreichende Adverbiale zu verwenden – für jeden nutzbar |
|
Verbotsvokabular-Absicherung | Dynamisch gepflegte Verbotsvokabular-Datenbank (KI-Sprech/leere Schlagwörter/Pseudo-Empathie/ billige Ermutigung/Netzjargon), als Untergrenze, falls das LLM nicht gehorcht |
|
Umschreibungs-Skript | LLM-Ausgabe-Nachbearbeitung: Regel-Treffer erkennen → Feedback mit Regel-ID → mehrstufiges Self-Refine-Umschreiben |
|
Stammt aus dem PAEG-Bildungsagenten (Iterationen v0.12–v0.71), umgebaut zu einem host-unabhängigen eigenständigen Plugin – jedes Python-Projekt kann es anbinden.
Related MCP server: Chinese Sensitive Words MCP Server
Kernfunktionen
Erweiterbarer Regelsatz: Regeln extern in
data/rules.json, Anhängen lädt sie sofort nach (RuleRegistry)Allgemeine Regeln steuern das LLM: Vollständige Lexik/vollständige Syntax/ausreichende Adverbiale als allgemeine Regeln lassen das LLM generalisieren, statt Wort für Wort zu memorieren (vermeidet die Engstirnigkeit von „nur 倦 zu 疲倦 zu optimieren")
Deterministische Absicherung: Explizite Regeln („我在这里听着你。"→„我就在这里听你说说。") als Schutz, falls das LLM nicht gehorcht
Regel-ID-Feedback-Schleife: Umschreibungs-Feedback trägt „Verstoß gegen #rule-lx-001", bildet eine Regel-Generierung-Feedback-Schleife
Dynamische Verbotsvokabular-Datenbank: Laufzeit-Hinzufügen/-Entfernen + externes JSON-Hot-Reload
Injektions-Design:
chat_fnwird erzwungen injiziert – binde deinen eigenen LLM-Aufruf an, null Host-KopplungDrei Profile: general / teaching / confessional – System-Prompts je nach Szenario zusammensetzen
KI-Geschmack-Erkennung: 5-dimensionale Signale: Satzlängen-Variation/Übergangswort-Dichte/Dreiteiligkeit/Gedankenstrich/Absatz-Symmetrie
8+ Syntaxregeln: GB/T 15834-Interpunktionsnorm + sechs Kategorien fehlerhafter Sätze + Normen für Unterrichtssprache
75 Tests alle grün + 20 Abschnitte Verhaltenskonsistenz (String-Gleichheit vs. PAEG-Originalimplementierung)
Installation
# 方式 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")Erfordert Python 3.9+. Null Abhängigkeiten von Drittanbietern zur Laufzeit.
Als MCP-Server anbinden (wie MCP direkt installieren und nutzen)
Barrierefreiheitsstandard (§3.109): Jedes Projekt kann nach
pip installdurch eine Deklaration in der MCP-Client-Konfiguration angebunden werden – Null-Code-Brücke, Null-Host-Abhängigkeit.
# 方式 1:console_scripts 入口(pip install 后)
paeg-lang-style-mcp
# 方式 2:python -m 入口(源码运行)
python -m paeg_lang_style.mcp_serverMCP-Client-Konfigurationsdeklaration (z. B. 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"
}
}
}Bereitgestellte MCP-Tools (7):
Toolname | Funktion | read/write |
| Text-Sprachstandard-Wächter (L0-Regeln + L2-Umschreibung) | read |
| KI-Geschmack-Erkennung + Verbotsvokabular-Trefferbericht | read |
| Verwaltung der dynamischen Verbotsvokabular-Datenbank (hinzufügen/entfernen/prüfen) | write |
| Grammatikprüfung (8 Regelkategorien) | read |
| KI-Geschmack 5-dimensionale Signale | read |
| System-Prompt-Zusammenbau (für jeden nutzbar) | read |
| Liste des erweiterbaren Regelsatzes | read |
Schnellstart
Drei Schritte: Installieren → Prompt zusammensetzen → Ausgabe verarbeiten.
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)
# → "我们把这个时代里的每一个孩子,把他们的潜能一步步唤起。"Inhaltsverzeichnis
Kernkonzepte
Drei-Schichten-Architektur + Regelsatz-Datenmodell – Erweiterbarkeit durchgängig an drei Stellen: Regeldefinition/Erkennung/Prompt-Generierung:
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[收口: 规则再跑一遍]Regel-Datenmodell (Rule – externes JSON erweiterbar):
{
"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"(Allgemeine Ebene):prompt_blockwird in den System-Prompt eingefügt und weist das LLM zur Generalisierung an – „Alle einstelligen Adjektive, die Zustand/Gefühl ausdrücken, werden grundsätzlich zur vollständigen zweistelligen Wortform erweitert (倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱)". Das LLM generalisiert selbst auf nicht aufgeführte Wörter, statt nur „倦→疲倦" zu korrigieren.type: "explicit"(Explizite Ebene):pattern + replacementals deterministische Absicherung – letzte Verteidigungslinie, wenn das LLM nicht gehorcht.
Anbindungsleitfaden für externe Projekte
Nutzeranforderung: Jedes Projekt/jeder Agent, der unser Syntaxregel-Modul nutzen möchte – wie geht das?
Szenario A: Nur „Syntaxregel-Constraint" nutzen (System-Prompt)
from paeg_lang_style import RuleRegistry
# 语法规则拼进自己的系统提示词(谁用都拼)
system = "你是我的客服机器人。"
system += RuleRegistry().build_prompt("general") # 或 "teaching" / "confessional"Die von build_prompt(profile) zurückgegebenen Regel-Ausschnitte (Allgemeine Regel vollständige Lexik/Allgemeine Regel vollständige Syntax/Allgemeine Regel ausreichende Adverbiale/Interpunktionsnorm) direkt in den System-Prompt deines LLM einfügen. Das ist das Wesen von „das LLM zur Verwendung vollständiger Wörter anweisen" – ohne Abhängigkeit von unserem Umschreiber.
Szenario B: „Umschreibungs-Skript" zur Verarbeitung der LLM-Ausgabe nutzen
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) # 病句/违禁词确定性修正Szenario C: „Verbotsvokabular-Datenbank" nutzen
from paeg_lang_style import ForbiddenWords
fb = ForbiddenWords() # 内置违禁词(AI 腔/空洞大词/伪共情/网络用语)
fb.load_json("my_words.json") # 合并你自己的词库(动态扩充)
fb.add("你们公司的禁词") # 运行时新增
hits = fb.detect(text) # → ["禁词1", "禁词2"]Szenario D: Regeln erweitern (Erweiterbarkeit)
data/rules.json bearbeiten, eine Regel anhängen lädt sie sofort nach:
{
"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() # 每次调用前检查Szenario E: Vollständige Anbindung (inkl. Regel-ID-Feedback-Schleife)
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)Erweiterbarkeit
Erweiterungspunkt | Methode | Mechanismus |
Syntaxregeln |
|
|
Verbotsvokabular |
| Laufzeit dynamisch pflegen |
Korpus |
|
|
Profile | Beim Hinzufügen einer Regel |
|
LLM-Backend | Beliebige | Erzwungene Injektion, null Host-Kopplung |
Regel-ID-Vertrag | Regel- | Regel-Generierung-Feedback-Schleife, für Telemetrie geeignet |
Wartbarkeit
Null Host-Abhängigkeit: Importiert keine Module des Host-Projekts, unabhängig testbar
Alt-API-Kompatibilität:
rules.py/rules_enhanced.pybleiben als dünne Wrapper, abwärtskompatibel75 Tests: Vollständige Abdeckung von Regelsatz-Laden/Hot-Reload/Erkennung/Zusammenbau/Nutzererweiterung/Beschädigungstoleranz
Verhaltenskonsistenz: 20 Stichproben vs. PAEG-Originalimplementierung String-Gleichheit (null Drift)
Beschädigungstoleranz: Bei beschädigtem JSON bleibt der vorherige Regelsatz erhalten, niemals „leer laufen"
Aufblähungsschutz:
token_budgetsteuert die Länge des System-Prompts (Standard 800)Klares Muster: Allgemeine Ebene (steuert das LLM) und explizite Ebene (deterministische Absicherung) mit getrennten Zuständigkeiten
Integrierte Syntaxregeln
ID | Typ | Kategorie | Regel | Auslösemuster | Korrektur |
| Allgemein | Lexik | Vollständige Lexik | Einstellige Zustandswörter (倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱) | Erweiterung zur vollständigen zweistelligen Wortform |
| Allgemein | Syntax | Vollständige Syntax | Subjekt-Prädikat-Objekt/Verb-Objekt/Präposition/Komposita | Alle Satzglieder vorhanden |
| Allgemein | Syntax | Ausreichende Adverbiale | Kurzsätze, die mit Verb beginnen/vereinzelte nackte Verben | Zeit/Ort/Art/Bedingung/Objekt/Zweck-Adverbiale ergänzen |
| Allgemein | Interpunktion | Interpunktionsnorm (GB/T 15834) | Aufzählungskomma vs. Komma/Doppelpunkt nach „sagen" | Interpunktionsnorm |
| Explizit | Lexik | 倦→疲倦 |
| Deterministische Ersetzung |
| Explizit | Lexik | 乏→疲乏 |
| Deterministische Ersetzung |
| Explizit | Lexik | 道出→说出来 |
| Deterministische Ersetzung |
| Explizit | Lexik | 探知→探索并了解 |
| Deterministische Ersetzung |
| Explizit | Syntax | „听着你" schwebend |
| 听你说说 |
| Explizit | Syntax | Schwebendes Objekt |
| Objekt ergänzen |
| Explizit | Syntax | Verb-Objekt-Kollokation |
| 有很重的分量 |
| Explizit | Syntax | Übersetzungsfloskel-Redundanz |
| Verb direkt nennen |
| Explizit | Interpunktion | Komma nach „sagen" |
| Komma verwenden |
Details zur Allgemeinen Regel „Ausreichende Adverbiale" (rule-sx-general-002, vom Nutzer hinzugefügt):
Jede Handlung/jedes Urteil mit ausreichenden Adverbialen klar machen – Zeit, Ort, Art, Bedingung, Objekt, Zweck. „复习单词。" → „你可以在每天睡前用十分钟复习单词。" „使用这个软件。" → „你可以在每天固定的时间使用这个软件。"
Verbotsvokabular-Datenbank
Kategorie | Beispiele |
KI-Sprech-Floskeln | 总的来说 / 综上所述 / 值得注意的是 / 让我们一起 |
Leere Schlagwörter | 赋能 / 点亮 / 激活 / 重塑 / 升级 / 全方位 |
Pseudo-Empathie-Verben | 接住(情绪)/ 托住 / 兜住 / 我懂你 / 心疼你 |
Billige Ermutigung | 加油 / 你真棒 / 你一定可以 |
Minderwertiger Netzjargon | yyds / 绝绝子 / 栓Q / 破防 / 内卷 / 躺平 / 宝子 |
Leere Lob-Adjektive | 深刻 / 全面 / 系统 / 本质 |
Erweiterungsmethode: ForbiddenWords().load_json("path.json") – JSON-Struktur {"extra_forbidden": [...], "ai_tells_extra": [...]}.
API-Referenz
RuleRegistry
Methode | Signatur | Beschreibung |
|
| Alle Regeln |
|
| Regel nach ID nachschlagen |
|
| Laufzeit hinzufügen (gleiche ID überschreibt eingebaute) |
|
| Laufzeit entfernen |
|
| Externes JSON zusammenführen (Hot-Reload) |
|
| mtime-Überwachung |
|
| Prüfen und neu laden |
|
| Treffende Regeln erkennen |
|
| Deterministische Ersetzung |
|
| System-Prompt zusammenbauen |
LanguageRefiner / make_refiner
Methode | Signatur | Beschreibung |
|
| Fabrik (chat_fn Pflicht) |
|
| Mehrstufiges Self-Refine-Umschreiben |
|
| Grammatikprüfung |
|
| Verbotsvokabular-Treffer |
|
| KI-Geschmack-Signale |
gate_content / gate_short
Funktion | Signatur | Beschreibung |
|
| L0-Regeln + L2-Umschreibung |
|
| Schnellpfad für kurze Texte (nur L0) |
ForbiddenWords
Methode | Signatur | Beschreibung |
|
| Laufzeit hinzufügen/entfernen |
|
| Externes Vokabular zusammenführen |
|
| Liste der Trefferwörter |
|
| Gesamtzahl der Treffer |
get_style_prompt
Parameter | Beschreibung |
| Vollständiger Sprachstil-Prompt |
| Einzelne Abschnitte |
| Mehrere Abschnitte zusammengefügt |
Konfigurationsreferenz
Umgebungsvariablen
Variable | Standardwert | Beschreibung |
|
| Pfadüberschreibung für Regelsatz |
data/-Dateien
Datei | Zweck | Erweiterbar |
| Syntaxregelsatz | Ja, Anhängen lädt sofort nach |
| Verbotsvokabular-Datenbank | Ja, dynamisch gepflegt |
| Korpus few-shot | Ja, ersetzbar |
Architekturdesign
宿主系统(任何 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 / 语料)Integration mit dem PAEG-Hauptprojekt
Der PAEG-Bildungsagent bindet über die einzige Adapterschicht infra/lang_plugin_bridge.py an (R18/R20-Null-Bruch-Eisernes-Gesetz):
from infra.lang_plugin_bridge import gate_content, get_style_prompt, make_refiner
# 插件挂载 → 走插件;插件未挂载 → 静默回退 PAEG 原实现(旧文件永不删除)Siehe docs/integration_paeg.md.
Tests
python -m pytest tests/ -q
# 75 项:规则集加载/热重载/检测/拼装/用户扩充/损坏容错 + 通则 + 充分状语 + 行为一致性Beitragsleitfaden
Beiträge sind willkommen! Bitte lies CONTRIBUTING.md (in Arbeit), um zu erfahren:
Neue Grammatikregeln: Bearbeite
data/rules.jsonund fügeRulehinzu (mit Tests)Verbotene Wörter hinzufügen:
ForbiddenWords.load_jsonoder direkt einen PR für die integrierte Wortliste einreichenCode-Stil: bestehende Modulstruktur + Kommentarkonventionen befolgen
Änderungsprotokoll
Siehe CHANGELOG.md.
Danksagungen
PAEG-Bildungsagent (Iterationen v0.12-v0.71) — Dieses Plugin wurde aus seinem Sprachspezifikationsmodul extrahiert
LanguageTool — Paradigma der deklarativen Regel-Engine (dev.languagetool.org)
textstat — Paradigma der Lesbarkeitsmessung (github.com/textstat/textstat)
GB/T 15834-2011 „Verwendung von Satzzeichen“ — Nationaler Standard für Zeichensetzungsregeln
Agent Skills Standard — Paradigma der progressiven Offenlegung (agentskills.io)
Lizenz
MIT © 2026 PAEG Team — Näheres siehe Datei LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
中文内容合规检查:广告法违禁词 + AI 标识规则,逐条给出法条依据。Chinese content compliance: ad-law banned terms + AI labeling.
Chinese web novel MCP: 36 tools (outline, prose, review, coach, KD export). BYOK, no API key.
DraftCheck: flags AI-writing patterns in prose with fix hints. Deterministic linter, not a detector.
Toxicity, sentiment, NER, PII detection, and language identification tools
Related MCP Servers
- FlicenseAqualityBmaintenanceL1-aware grammar, style, translation & tone tools with 70 local rules. Zero API keys needed.4-
- AlicenseAqualityCmaintenanceDetects Chinese sensitive/forbidden words across platforms like Xiaohongshu, Douyin, Kuaishou, and Bilibili, with risk levels and replacement suggestions.240 npm104MIT
- AlicenseBqualityBmaintenanceLocal-first toolkit with 16 tools for Chinese web-novel (网文) authors: style baselines, foreshadowing and plot-thread tracking, continuity & OOC audits, keyword and sentence-pattern analysis, and offline semantic search. No API key, no network — everything runs on your machine.19986 npm22MIT
- AlicenseAqualityCmaintenanceProvides AI models with tools to proofread and format Chinese text before delivery, covering typos, punctuation, casing, spacing, and platform-specific character limits. It runs as a zero-dependency MCP service so the model checks and fixes its own Chinese writing automatically.41MIT