paeg-lang-style
paeg-lang-style
한국어 | English
이것은 무엇인가
paeg-lang-style은 중국어 언어 규범 모듈 — 3계층 아키텍처(사용자 요구사항):
계층 | 기능 | 핵심 파일 |
문법 규칙 제약(가장 중요) | 어휘/문장/구두점 규칙을 시스템 프롬프트로 사용하여 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 3단계: general / teaching / confessional — 시나리오별 시스템 프롬프트 조립
AI 말투 감지: 문장 길이 변이/전환어 밀도/3단 구성/대시/문단 대칭 5차원 신호
8+ 문법 규칙: GB/T 15834 구두점 규범 + 병문 6가지 유형 + 교수 언어 규범
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 |
빠른 시작
3단계: 설치 → 프롬프트 조립 → 출력 처리.
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)
# → "我们把这个时代里的每一个孩子,把他们的潜能一步步唤起。"목차
핵심 개념
3계층 아키텍처 + 규칙 세트 데이터 모델 — 확장성이 규칙 정의/감지/프롬프트 생성 세 곳에 걸쳐 있음:
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 시스템 프롬프트에 직접 이어 붙이면 됩니다. 이것이 "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 原实现(旧文件永不删除)자세한 내용은 docs/integration_paeg.md 참조.
테스트
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