Skip to main content
Glama

paeg-lang-style

Python License: MIT Tests PRs Welcome

한국어 | English


이것은 무엇인가

paeg-lang-style중국어 언어 규범 모듈 — 3계층 아키텍처(사용자 요구사항):

계층

기능

핵심 파일

문법 규칙 제약(가장 중요)

어휘/문장/구두점 규칙을 시스템 프롬프트로 사용하여 LLM이 완전한 단어, 완전한 문장 구조, 충분한 부사어를 사용하도록 지휘 — 누가 사용해도 적용

rule_registry.py + prompts/builder.py

금지어 최후 방어

동적으로 유지되는 금지어 사전(AI 말투/공허한 큰 단어/가짜 공감/싸구려 격려/인터넷 용어), LLM이 말을 안 들을 때의 최후의 보루

forbidden.py

재작성 스크립트

LLM 출력 후처리: 규칙 적중 감지 → 규칙 ID 포함 피드백 → 다중 라운드 Self-Refine 재작성

refiner.py + gate.py

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_server

MCP 클라이언트 설정 선언(예: 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

normalize_text

텍스트 언어 규범 게이트(L0 규칙 + L2 재작성)

read

language_policy_check

AI 말투 감지 + 금지어 적중 보고

read

forbidden_words

동적 금지어 사전 관리(추가/삭제/조회)

write

check_grammar

문법 검사(8가지 규칙)

read

check_ai_taste

AI 말투 5차원 신호

read

build_style_prompt

시스템 프롬프트 조립(누가 사용해도 적용)

read

list_rules

확장 가능한 규칙 세트 목록

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)

확장성

확장 지점

방식

메커니즘

문법 규칙

data/rules.json 편집하여 Rule 추가

RuleRegistry.load() 병합 + watch() 핫리로드 + PAEG_RULES_PATH 환경 변수로 경로 덮어쓰기

금지어

ForbiddenWords.load_json("사용자정의.json") / add() / remove()

런타임 동적 유지

말뭉치

data/weil_corpus.json을 중립 말뭉치로 교체

생성 시 corpus_path 매개변수

profile

새 규칙 추가 시 profile_tags 추가

build_prompt(profile)이 시나리오별 필터링

LLM 백엔드

임의의 chat_fn 주입

강제 주입, 호스트 결합도 제로

규칙 ID 계약

규칙 id 안정적, 피드백에서 참조

규칙-생성-피드백 폐루프, telemetry 용이

유지보수성

  • 호스트 의존성 제로: 호스트 프로젝트 모듈을 import하지 않음, 독립적으로 테스트 가능

  • 구 API 호환: rules.py/rules_enhanced.py를 얇은 래퍼로 유지, 하위 호환

  • 75개 테스트: 규칙 세트 로드/핫리로드/감지/조립/사용자 확장/손상 허용 전체 커버

  • 행동 일관성: 20개 샘플 vs PAEG 원구현 문자열 동일(드리프트 제로)

  • 손상 허용: JSON 손상 시 이전 규칙 세트 유지, 절대 "비우고 실행"하지 않음

  • 팽창 방지: token_budget으로 시스템 프롬프트 길이 제어(기본 800)

  • 패턴 명확성: 일반 원칙 계층(LLM 지휘)과 열거 계층(결정적 최후 방어)의 책임 분리

내장 문법 규칙

ID

유형

카테고리

규칙

트리거 패턴

수정

rule-lx-general-001

일반 원칙

어휘

어휘 완전성

한 글자 상태어(倦/乏/沉/累/苦/慌/虚/弱/低/烦/闷/困/急/乱)

완전한 두 글자 단어 형태로 확장

rule-sx-general-001

일반 원칙

문장

문장 완전성

주어-술어-목적어/동사-목적어/전치사/복합문

성분 완비

rule-sx-general-002

일반 원칙

문장

충분한 부사어

동사로 시작하는 짧은 문장/외로운 단일 동사

시간/장소/방식/조건/대상/목적 부사어 보충

rule-pn-general-001

일반 원칙

구두점

구두점 규범(GB/T 15834)

돈호표 vs 쉼표/말한 뒤 콜론

구두점 규범

rule-lx-001

열거

어휘

倦→疲倦

觉得倦了|感到倦|已倦

결정적 교체

rule-lx-002

열거

어휘

乏→疲乏

的乏($|[,。;])

결정적 교체

rule-lx-003

열거

어휘

道出→说出来

道出

결정적 교체

rule-lx-004

열거

어휘

探知→探索并了解

探知

결정적 교체

rule-sx-001~004

열거

문장

"听着你" 공중부양

(我在这里|在这里|我)?听着你 + 문장 끝

听你说说

rule-sx-005

열거

문장

공중부양 목적어

与你探讨$

목적어 보충

rule-sx-006

열거

문장

동사-목적어 호응

带着(重量|分量)

有很重的分量

rule-sx-007

열거

문장

번역투 잉여

进行(一个)?(分析|讨论|思考)

동사를 직접 말하기

rule-pn-001

열거

구두점

말한 뒤 쉼표

说:"

쉼표로 변경

충분한 부사어 일반 원칙 상세(rule-sx-general-002, 사용자 추가):

모든 동작/판단에 충분한 부사어로 명확히 설명 — 시간, 장소, 방식, 조건, 대상, 목적. "复习单词。" → "你可以在每天睡前用十分钟复习单词。" "使用这个软件。" → "你可以在每天固定的时间使用这个软件。"

금지어 사전

카테고리

예시

AI 말투 상투어

总的来说 / 综上所述 / 值得注意的是 / 让我们一起

공허한 큰 단어

赋能 / 点亮 / 激活 / 重塑 / 升级 / 全方位

가짜 공감 동사

接住(감정)/ 托住 / 兜住 / 我懂你 / 心疼你

싸구려 격려

加油 / 你真棒 / 你一定可以

저급 인터넷 용어

yyds / 绝绝子 / 栓Q / 破防 / 内卷 / 躺平 / 宝子

공허한 찬사 형용사

深刻 / 全面 / 系统 / 本质

확장 방식: ForbiddenWords().load_json("path.json") — JSON 구조 {"extra_forbidden": [...], "ai_tells_extra": [...]}.

API 참조

RuleRegistry

메서드

시그니처

설명

all()

() -> list[Rule]

전체 규칙

by_id(id)

(str) -> Rule|None

ID로 규칙 조회

add_rule(rule)

(dict) -> bool

런타임 추가(동일 ID는 내장 덮어쓰기)

remove_rule(id)

(str) -> bool

런타임 제거

load(path)

(str|None) -> int

외부 JSON 병합(핫로드)

watch(path)

(str|None) -> None

mtime 모니터링

check_reload()

() -> bool

확인 후 리로드

detect(text, profile)

(str, str|None) -> list[Rule]

적중 규칙 감지

apply_explicit(text, profile)

(str, str|None) -> str

결정적 교체

build_prompt(profile, token_budget)

(str, int) -> str

시스템 프롬프트 조립

LanguageRefiner / make_refiner

메서드

시그니처

설명

make_refiner(chat_fn, llm, corpus_path)

(*, chat_fn, ...) -> LanguageRefiner

팩토리(chat_fn 필수)

refine(text, context, max_rounds)

(str, str, int) -> str

다중 라운드 Self-Refine 재작성

check_grammar(text)

(str) -> list

문법 검사

detect_ai_tells(text)

(str) -> list

금지어 적중

detect_ai_taste_signals(text)

(str) -> AITasteSignals

AI 말투 신호

gate_content / gate_short

함수

시그니처

설명

gate_content(text, context, apply_l2, refiner, polish_fn)

(str, str, bool, refiner|None, fn|None) -> str

L0 규칙 + L2 재작성

gate_short(text, context, refiner, polish_fn)

(str, str, ...) -> str

짧은 텍스트 빠른 경로(L0만)

ForbiddenWords

메서드

시그니처

설명

add(word) / remove(word)

(str) -> bool

런타임 증감

load_json(path)

(str|None) -> int

외부 사전 병합

detect(text)

(str) -> list

적중 단어 목록

detect_count(text)

(str) -> int

적중 총수

get_style_prompt

매개변수

설명

"all"

전체 언어 스타일 프롬프트

"weil" / "lexicon" / "syntax" / "forbidden"

구간

["weil", "syntax"]

다중 구간 연결

설정 참조

환경 변수

변수

기본값

설명

PAEG_RULES_PATH

src/paeg_lang_style/data/rules.json

규칙 세트 경로 덮어쓰기

data/ 파일

파일

용도

확장 가능

data/rules.json

문법 규칙 세트

예, 추가 즉시 핫로드

data/forbidden_words.json

금지어 사전

예, 동적 유지

data/weil_corpus.json

말뭉치 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 파일을 참조하세요.

-
license - not tested
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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