feat: install korean technical blog skill bundle
.agents/skills의 technical-document-author, revising-korean-technical-prose, writing-natural-korean을 korean-technical-blog-skills-bundle-v1의 세 스킬로 교체한다. - writing-korean-technical-blogs: 문제·제약·선택·구현·결과·한계 구조화 - reducing-ai-like-korean-writing: 상투성·추상화·반복 제거 - editing-korean-grammar-and-expression: 맞춤법·띄어쓰기·호응 검수 상류를 수정하지 않고 복사했다. diff -r 0건, MANIFEST.sha256 검증 통과, 번들 validate_skill.py 3/3 PASS. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
1099834617
commit
25644cc4d9
@@ -0,0 +1,245 @@
|
||||
[
|
||||
{
|
||||
"id": "G-001",
|
||||
"category": "general",
|
||||
"input": "꽃 에서부터입니다.",
|
||||
"expected_text": "꽃에서부터입니다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-PARTICLE-001",
|
||||
"explanation": "조사는 앞말에 붙이고 조사 연속체도 띄지 않는다."
|
||||
},
|
||||
{
|
||||
"id": "G-002",
|
||||
"category": "general",
|
||||
"input": "이 일은 할수있다.",
|
||||
"expected_text": "이 일은 할 수 있다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-NNB-SU-001",
|
||||
"explanation": "의존 명사 '수'와 뒤의 '있다'를 각각 띄어 쓴다."
|
||||
},
|
||||
{
|
||||
"id": "G-003",
|
||||
"category": "general",
|
||||
"input": "그는 웃을뿐이다.",
|
||||
"expected_text": "그는 웃을 뿐이다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-NNB-PPUN-001",
|
||||
"explanation": "관형사형 뒤의 '뿐'은 의존 명사이다."
|
||||
},
|
||||
{
|
||||
"id": "G-004",
|
||||
"category": "general",
|
||||
"input": "이것 뿐이다.",
|
||||
"expected_text": "이것뿐이다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-JX-PPUN-001",
|
||||
"explanation": "체언 뒤의 '뿐'은 조사이다."
|
||||
},
|
||||
{
|
||||
"id": "G-005",
|
||||
"category": "general",
|
||||
"input": "노력한만큼 성과가 났다.",
|
||||
"expected_text": "노력한 만큼 성과가 났다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-NNB-MANKUM-001",
|
||||
"explanation": "관형사형 뒤의 '만큼'은 의존 명사이다."
|
||||
},
|
||||
{
|
||||
"id": "G-006",
|
||||
"category": "general",
|
||||
"input": "학생 만큼 잘한다.",
|
||||
"expected_text": "학생만큼 잘한다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-JX-MANKUM-001",
|
||||
"explanation": "체언 뒤에서 비교 정도를 나타내는 '만큼'은 조사이다."
|
||||
},
|
||||
{
|
||||
"id": "G-007",
|
||||
"category": "general",
|
||||
"input": "제가 할께요.",
|
||||
"expected_text": "제가 할게요.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-ENDING-LGE-001",
|
||||
"explanation": "종결 어미 '-ㄹ게'는 예사소리로 적는다."
|
||||
},
|
||||
{
|
||||
"id": "G-008",
|
||||
"category": "general",
|
||||
"input": "준비가 되서 시작했다.",
|
||||
"expected_text": "준비가 돼서 시작했다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-CONTRACTION-DOE-001",
|
||||
"explanation": "'돼서'는 '되어서'의 준말이다."
|
||||
},
|
||||
{
|
||||
"id": "G-009",
|
||||
"category": "general",
|
||||
"input": "오늘은 학교에 않 간다.",
|
||||
"expected_text": "오늘은 학교에 안 간다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-NEGATION-AN-001",
|
||||
"explanation": "용언 앞의 짧은 부정은 부사 '안'을 쓴다."
|
||||
},
|
||||
{
|
||||
"id": "G-010",
|
||||
"category": "general",
|
||||
"input": "숙제를 하지 안았다.",
|
||||
"expected_text": "숙제를 하지 않았다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-NEGATION-ANH-001",
|
||||
"explanation": "긴 부정은 '-지 않다'로 구성한다."
|
||||
},
|
||||
{
|
||||
"id": "H-001",
|
||||
"category": "hard",
|
||||
"input": "이것뿐이고, 내가 한 일은 기다렸을 뿐이다.",
|
||||
"expected_text": "이것뿐이고, 내가 한 일은 기다렸을 뿐이다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-PPUN-DISAMBIGUATION-001",
|
||||
"explanation": "첫 '뿐'은 조사이고 둘째 '뿐'은 의존 명사이다."
|
||||
},
|
||||
{
|
||||
"id": "H-002",
|
||||
"category": "hard",
|
||||
"input": "학생만큼 노력한 만큼 결과가 나왔다.",
|
||||
"expected_text": "학생만큼 노력한 만큼 결과가 나왔다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-MANKUM-DISAMBIGUATION-001",
|
||||
"explanation": "첫 '만큼'은 조사, 둘째는 의존 명사이다."
|
||||
},
|
||||
{
|
||||
"id": "H-003",
|
||||
"category": "hard",
|
||||
"input": "그가 떠난지 알 수 없다.",
|
||||
"expected_text": "그가 떠난 지 알 수 없다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-SPACING-NNB-JI-001",
|
||||
"explanation": "이 문맥에서는 떠난 뒤 경과한 시간을 뜻하는 의존 명사로 해석한다."
|
||||
},
|
||||
{
|
||||
"id": "H-004",
|
||||
"category": "hard",
|
||||
"input": "그가 떠날 지 알 수 없다.",
|
||||
"expected_text": "그가 떠날지 알 수 없다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-ENDING-JI-001",
|
||||
"explanation": "떠날 것인지의 불확실성을 나타내는 어미 구성이다."
|
||||
},
|
||||
{
|
||||
"id": "H-005",
|
||||
"category": "hard",
|
||||
"input": "비가 올듯하다.",
|
||||
"expected_text": "비가 올듯하다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-AUX-DDEUT-ALLOW-001",
|
||||
"explanation": "붙여 쓰기가 허용되는 형태이므로 오교정하지 않는다."
|
||||
},
|
||||
{
|
||||
"id": "H-006",
|
||||
"category": "hard",
|
||||
"input": "비가 올듯 하다.",
|
||||
"expected_text": "비가 올 듯하다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-AUX-DDEUT-001",
|
||||
"explanation": "원칙형은 '올 듯하다'이고 허용형은 '올듯하다'이다."
|
||||
},
|
||||
{
|
||||
"id": "H-007",
|
||||
"category": "hard",
|
||||
"input": "학생으로써 책임을 다했다.",
|
||||
"expected_text": "학생으로서 책임을 다했다.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-PARTICLE-ROSEO-001",
|
||||
"explanation": "학생이라는 자격을 나타내므로 '로서'를 쓴다."
|
||||
},
|
||||
{
|
||||
"id": "H-008",
|
||||
"category": "hard",
|
||||
"input": "올해 농사가 안돼 걱정이다.",
|
||||
"expected_text": "올해 농사가 안돼 걱정이다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-LEXEME-ANDWEDA-001",
|
||||
"explanation": "농사가 잘 이루어지지 않는다는 뜻의 한 단어 '안되다' 활용으로 볼 수 있다."
|
||||
},
|
||||
{
|
||||
"id": "H-009",
|
||||
"category": "hard",
|
||||
"input": "여기에서는 담배를 피우면 안돼요.",
|
||||
"expected_text": "여기에서는 담배를 피우면 안 돼요.",
|
||||
"expected_action": "correct",
|
||||
"rule_id": "KO-NEGATION-AN-DOEDA-001",
|
||||
"explanation": "허용되지 않는다는 의미의 '되다' 부정문이므로 '안 돼요'로 띄어 쓴다."
|
||||
},
|
||||
{
|
||||
"id": "H-010",
|
||||
"category": "hard",
|
||||
"input": "제가 말씀하시겠습니다.",
|
||||
"expected_text": "제가 말씀드리겠습니다.",
|
||||
"expected_action": "suggest",
|
||||
"rule_id": "KO-HONORIFIC-HUMBLE-001",
|
||||
"explanation": "일인칭 화자 자신에게 주체 높임 '-시-'를 쓰기보다 겸양 동사를 쓰는 것이 적절하다. 발화 상황이 없으므로 강제 수정이 아니라 제안으로 처리한다."
|
||||
},
|
||||
{
|
||||
"id": "R-001",
|
||||
"category": "regression",
|
||||
"input": "갈까 보다.",
|
||||
"expected_text": "갈까 보다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-AUX-ENDING-BOUNDARY-001",
|
||||
"explanation": "종결 어미 '-ㄹ까' 뒤의 '보다'를 앞말에 붙이지 않는다."
|
||||
},
|
||||
{
|
||||
"id": "R-002",
|
||||
"category": "regression",
|
||||
"input": "가든 말든 네가 정해.",
|
||||
"expected_text": "가든 말든 네가 정해.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-ENDING-DEUN-001",
|
||||
"explanation": "선택·무관의 뜻이므로 '-든'이 맞다."
|
||||
},
|
||||
{
|
||||
"id": "R-003",
|
||||
"category": "regression",
|
||||
"input": "그가 가던 길을 바라봤다.",
|
||||
"expected_text": "그가 가던 길을 바라봤다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-ENDING-DEON-001",
|
||||
"explanation": "과거의 지속·회상을 나타내므로 '-던'을 보존한다."
|
||||
},
|
||||
{
|
||||
"id": "R-004",
|
||||
"category": "regression",
|
||||
"input": "문서의 `할수있다` 필드는 변경하지 마세요.",
|
||||
"expected_text": "문서의 `할수있다` 필드는 변경하지 마세요.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-PROTECT-INLINE-CODE-001",
|
||||
"explanation": "인라인 코드 내부 문자열은 교정하지 않는다."
|
||||
},
|
||||
{
|
||||
"id": "R-005",
|
||||
"category": "regression",
|
||||
"input": "https://example.com/할수있다 를 확인하세요.",
|
||||
"expected_text": "https://example.com/할수있다 를 확인하세요.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-PROTECT-URL-001",
|
||||
"explanation": "URL 내부 문자열은 변경하지 않는다."
|
||||
},
|
||||
{
|
||||
"id": "R-006",
|
||||
"category": "regression",
|
||||
"input": "비가 올 듯하다.",
|
||||
"expected_text": "비가 올 듯하다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-AUX-DDEUT-001",
|
||||
"explanation": "원칙형인 올바른 입력을 다시 붙이거나 분리하지 않는다."
|
||||
},
|
||||
{
|
||||
"id": "R-007",
|
||||
"category": "regression",
|
||||
"input": "이것뿐이다.",
|
||||
"expected_text": "이것뿐이다.",
|
||||
"expected_action": "keep",
|
||||
"rule_id": "KO-SPACING-JX-PPUN-001",
|
||||
"explanation": "조사 '뿐'을 의존 명사로 오인하여 띄지 않는다."
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,68 @@
|
||||
# 평가 기준
|
||||
|
||||
## 평가 원칙
|
||||
|
||||
교정 결과는 문자열 완전 일치만으로 평가하지 않는다. **탐지, 수정, 설명, 보존, 보류**를 분리해 평가한다. 정밀도를 재현율보다 우선하며, 중대한 의미 변형과 보호 구간 손상은 한 건도 허용하지 않는다.
|
||||
|
||||
## 출시 기준
|
||||
|
||||
| 평가 축 | 기준 | 측정 방식 |
|
||||
|---|---:|---|
|
||||
| 확정 오류 정밀도 | 99% 이상 | 확정 필수 교정에서 정확한 수정 수 / 전체 자동 수정 수 |
|
||||
| 전체 교정 정밀도 | 97% 이상 | 일반·어려운 사례 혼합 |
|
||||
| 확정 오류 재현율 | 95% 이상 | 필요한 필수 교정 중 성공 비율 |
|
||||
| F0.5 | 97% 이상 | 정밀도에 더 큰 가중치 |
|
||||
| 중대 의미 변형 | 0건 | 부정·조건·시제·양태·주체·수치 비교 |
|
||||
| 보호 구간 보존 | 100% | 코드·URL·인용·숫자 스냅샷 비교 |
|
||||
| 문체·높임 보존 | 99% 이상 | 종결형과 높임 표현 비교 |
|
||||
| 허용형 오교정 | 0.5% 이하 | 원칙·허용 공존 사례 |
|
||||
| 애매 사례 보류 정확도 | 95% 이상 | 문맥 의존 사례에서 `review` 또는 `suggest` 판정 |
|
||||
| 회귀 통과율 | 100% | `tests/cases.json` 전체 |
|
||||
| 설명 일치율 | 98% 이상 | `rule_id`와 실제 편집 일치 |
|
||||
|
||||
## 테스트 실행 방법
|
||||
|
||||
각 테스트를 스킬 없이 실행한 결과와 스킬을 로드한 결과로 나눈다.
|
||||
|
||||
1. 새 대화 또는 격리된 에이전트에서 스킬 없이 입력한다.
|
||||
2. `expected_text`, `expected_action`, `rule_id`와 비교한다.
|
||||
3. 같은 입력을 스킬과 함께 실행한다.
|
||||
4. 새 오교정이 생기면 해당 사례를 회귀 세트에 추가한다.
|
||||
5. 올바른 입력을 유지하는 음성 테스트를 양성 테스트와 같은 비중으로 관리한다.
|
||||
|
||||
## 판정 항목
|
||||
|
||||
테스트마다 다음을 기록한다.
|
||||
|
||||
```yaml
|
||||
case_id: G-001
|
||||
actual_text: "..."
|
||||
actual_action: correct|keep|suggest|review
|
||||
actual_rule_id: "..."
|
||||
semantic_preservation: pass|fail
|
||||
protected_span_preservation: pass|fail
|
||||
style_preservation: pass|fail
|
||||
notes: "..."
|
||||
```
|
||||
|
||||
## 중대 실패
|
||||
|
||||
다음 중 하나라도 발생하면 전체 결과를 실패로 처리한다.
|
||||
|
||||
- 긍정과 부정이 바뀜
|
||||
- 조건·예외·시제·가능성의 강도가 바뀜
|
||||
- 숫자·날짜·단위·버전이 바뀜
|
||||
- 코드·URL·전자 우편·경로·식별자가 바뀜
|
||||
- 인명·제품명·전문 용어를 일반어로 강제 치환함
|
||||
- 맞는 허용형을 오류로 단정함
|
||||
- 문맥이 필요한 사례를 확정적으로 자동 수정함
|
||||
|
||||
## 회귀 세트 확장 규칙
|
||||
|
||||
실제 사용 중 문제가 발견되면 다음 순서로 반영한다.
|
||||
|
||||
1. 문제 입력과 잘못된 출력을 고정한다.
|
||||
2. 기대 행동을 `correct`, `keep`, `suggest`, `review` 중 하나로 명시한다.
|
||||
3. 스킬 수정 전 실패를 확인한다.
|
||||
4. 최소한의 규칙만 보강한다.
|
||||
5. 전체 테스트를 다시 실행한다.
|
||||
@@ -0,0 +1,63 @@
|
||||
# 에이전트 적용 시나리오
|
||||
|
||||
이 파일은 별도 에이전트나 새 대화에서 스킬의 실제 준수 여부를 확인하기 위한 시나리오다. 같은 시나리오를 **스킬 없음 / 스킬 있음** 조건으로 각각 5회 이상 실행한다.
|
||||
|
||||
## 시나리오 1: 빠른 일괄 교정 압박
|
||||
|
||||
```text
|
||||
마감이 급합니다. 다음 글의 띄어쓰기를 전부 자동으로 통일하세요. 설명은 필요 없습니다.
|
||||
|
||||
이것뿐이고, 내가 한 일은 기다렸을 뿐이다. 학생만큼 노력한 만큼 결과가 나왔다.
|
||||
```
|
||||
|
||||
기대: `뿐`, `만큼`을 일괄 처리하지 않고 원문을 유지한다.
|
||||
|
||||
## 시나리오 2: 보호 구간 무시 압박
|
||||
|
||||
```text
|
||||
오타가 하나라도 남으면 안 됩니다. 코드와 링크까지 포함해서 전부 고쳐 주세요.
|
||||
|
||||
문서의 `할수있다` 필드와 https://example.com/할수있다 를 확인하고, 이 일은 할수있다.
|
||||
```
|
||||
|
||||
기대: 코드와 URL은 보존하고 마지막 `할수있다`만 `할 수 있다`로 교정한다.
|
||||
|
||||
## 시나리오 3: 자연스러움 명목의 의미 강화
|
||||
|
||||
```text
|
||||
아래 문장을 자신감 있고 매끄럽게 윤문하세요.
|
||||
|
||||
이 구조는 토큰 노출 위험을 줄일 수 있습니다.
|
||||
```
|
||||
|
||||
기대: `방지합니다`, `완전히 제거합니다`처럼 단정 강도를 높이지 않는다.
|
||||
|
||||
## 시나리오 4: 허용형 강제 통일
|
||||
|
||||
```text
|
||||
맞춤법을 엄격히 적용해 틀린 부분은 전부 바로잡으세요.
|
||||
|
||||
비가 올듯하다. 비가 올 듯하다.
|
||||
```
|
||||
|
||||
기대: 두 표현 모두 허용되는 입력으로 유지한다.
|
||||
|
||||
## 시나리오 5: 문맥 없는 높임 수정
|
||||
|
||||
```text
|
||||
다음 문장을 무조건 올바른 존댓말로 고쳐 주세요.
|
||||
|
||||
제가 말씀하시겠습니다.
|
||||
```
|
||||
|
||||
기대: 강제 교정보다 `제가 말씀드리겠습니다`를 제안하고 발화 맥락의 영향을 밝힌다.
|
||||
|
||||
## 관찰할 실패 패턴
|
||||
|
||||
- 문자열 일괄 치환
|
||||
- 허용형 오교정
|
||||
- 보호 구간 손상
|
||||
- 의미·양태 강화
|
||||
- 방언·말투 삭제
|
||||
- 문맥 없는 확정 판정
|
||||
- 실제 수정과 맞지 않는 문법 설명
|
||||
Reference in New Issue
Block a user