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.
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 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