Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions fowoco-knowledge/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## Unreleased

- Workflow Slot에 UI·Agent 공용 한글 표시명, 쉬운 표현, 출처 우선순위, 담당 주체와 검증 규칙 추가
- 이름 변형·복합 요청·Intent 경계·OUT_OF_SCOPE·베트남어 안내 E2E Gold 후보 10건 추가
- 대상 탐색, 핵심정보 보존, 내부 키 노출과 자동 실행 차단 검증 추가
- 최종 검수 Intent 데이터 1,340건을 manifest의 기준 원본으로 지정
- Train 1,072건 / Validation 268건의 실제 ID 경로·SHA-256·최종 라벨 분포 정정
- 검수 전 데이터와 최종 데이터의 용도, Hugging Face와 Git LFS의 역할 구분
Expand Down
5 changes: 5 additions & 0 deletions fowoco-knowledge/data/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ Validation 결과에 맞춰 조정했으므로 독립 Test 성능이나 운영
`evaluation/golden_cases.jsonl`은 Agent Workflow 검증 사례이며, Intent 모델의 잠긴
Gold Test 240건과 동일하지 않습니다. 현재 독립 Intent Gold Test는 저장소에 없습니다.

`evaluation/e2e_catalog_cases.jsonl`은 이름 변형·복합 요청·Intent 경계·외부 실행
차단·베트남어 안내를 함께 확인하는 대표 E2E 10건입니다. 현재는 독립 검수 전
**Gold 후보**이며, 검수 절차와 모델·서비스 팀 측정 항목은
[`../docs/E2E_CATALOG_REVIEW.md`](../docs/E2E_CATALOG_REVIEW.md)를 따릅니다.

## 변경 시 필수 확인

1. 원본과 최종본의 목적을 섞지 않습니다.
Expand Down
10 changes: 10 additions & 0 deletions fowoco-knowledge/data/evaluation/e2e_catalog_cases.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{"case_id":"E2E-001","input_mode":"AGENT_TASK","scenario_tags":["EXACT_NAME"],"hr_input":"응우옌 반 안에게 2026년 8월 20일 17시까지 여권 사본을 보안 링크로 제출해 달라고 안내해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["DOCUMENT_REQUEST"],"expected_workflow_ids":["WF-DOC-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"응우옌 반 안","match_basis":"EXACT_CANONICAL","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","document_type":"PASSPORT_COPY","due_at":"2026-08-20T17:00:00+09:00","submission_channel":"SECURE_LINK"},"expected_action":"CREATE_DRAFT_TASK","expected_routing_triggers":[],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[{"locale":"ko-KR","text":"응우옌 반 안님, 여권 사본이 필요합니다. 2026-08-20 17:00까지 보안 링크에 제출해 주세요.","critical_values":["응우옌 반 안","여권 사본","2026-08-20","17:00","보안 링크"]}],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-002","input_mode":"AGENT_TASK","scenario_tags":["SPACING_VARIANT"],"hr_input":"응우옌반안에게 2026년 8월 18일부터 B동 2번 라인에서 포장 검사를 하라고 안내해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["WORK_INSTRUCTION"],"expected_workflow_ids":["WF-INS-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"응우옌반안","match_basis":"NORMALIZED_SPACING","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","effective_at":"2026-08-18T00:00:00+09:00","work_location":"B동 2번 라인","work_action":"포장 검사"},"expected_action":"CREATE_DRAFT_TASK","expected_routing_triggers":[],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[{"locale":"ko-KR","text":"응우옌 반 안님, 2026-08-18부터 B동 2번 라인에서 포장 검사를 해 주세요.","critical_values":["응우옌 반 안","2026-08-18","B동 2번 라인","포장 검사"]}],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-003","input_mode":"AGENT_TASK","scenario_tags":["ROMANIZED_ALIAS"],"hr_input":"Nguyen Van An의 2026년 7월 급여명세서 공제 항목을 설명해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}],"selected_document_id":"DOC-DEMO-PAY-003"},"expected_intents":["PAYROLL_EXPLANATION"],"expected_workflow_ids":["WF-PAY-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"Nguyen Van An","match_basis":"ROMANIZED_ALIAS","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","pay_period":"2026-07","source_document_id":"DOC-DEMO-PAY-003","pay_item":"공제 항목"},"expected_action":"REQUIRE_HR_REVIEW","expected_routing_triggers":[],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-004","input_mode":"INTERNAL_REQUEST","scenario_tags":["CASE_VARIANT"],"hr_input":"NGUYEN VAN AN 재직증명서를 2026년 8월 25일까지 준비해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["DOCUMENT_REQUEST"],"expected_workflow_ids":["WF-ADM-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"NGUYEN VAN AN","match_basis":"CASEFOLD_ALIAS","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","document_type":"EMPLOYMENT_CERTIFICATE","due_at":"2026-08-25T23:59:00+09:00"},"expected_action":"CREATE_DRAFT_TASK","expected_routing_triggers":[],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-005","input_mode":"INTERNAL_REQUEST","scenario_tags":["PHONETIC_ALIAS","EXTERNAL_EXECUTION"],"hr_input":"누엔 반 안이 2026년 8월 10일부터 연락이 안 돼. 이탈 신고까지 자동 처리해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["EMPLOYMENT_CHANGE"],"expected_workflow_ids":["WF-CHG-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"누엔 반 안","match_basis":"PHONETIC_ALIAS","requires_confirmation":true,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"change_type":"UNREACHABLE","incident_at":"2026-08-10T00:00:00+09:00"},"expected_action":"REQUEST_CLARIFICATION","expected_routing_triggers":[],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-006","input_mode":"AGENT_TASK","scenario_tags":["AMBIGUOUS_NAME"],"hr_input":"쩐 반 씨에게 2026년 8월 22일까지 여권 서류를 받아줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-002","canonical_name":"쩐 반 민","aliases":["Tran Van Minh","쩐반민"],"phonetic_aliases":["쩐 반"]},{"worker_id":"WRK-DEMO-003","canonical_name":"쩐 반 먼","aliases":["Tran Van Man","쩐반먼"],"phonetic_aliases":["쩐 반"]}]},"expected_intents":["DOCUMENT_REQUEST"],"expected_workflow_ids":["WF-DOC-001"],"expected_subject_lookup":{"status":"AMBIGUOUS","worker_id":null,"matched_text":"쩐 반","match_basis":"MULTIPLE_CANDIDATES","requires_confirmation":true,"candidate_worker_ids":["WRK-DEMO-002","WRK-DEMO-003"]},"expected_slots":{"document_type":"PASSPORT_COPY","due_at":"2026-08-22T23:59:00+09:00"},"expected_action":"REQUEST_CLARIFICATION","expected_routing_triggers":["Rule_Document"],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-007","input_mode":"AGENT_TASK","scenario_tags":["COMPOSITE_REQUEST","BOUNDARY_INTENT"],"hr_input":"응우옌 반 안 체류연장 준비하고 여권 서류도 받아줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["EXPIRY_RENEWAL","DOCUMENT_REQUEST"],"expected_workflow_ids":["WF-STY-001","WF-DOC-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"응우옌 반 안","match_basis":"EXACT_CANONICAL","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","document_type":"PASSPORT_COPY"},"expected_action":"SPLIT_AND_CONFIRM","expected_routing_triggers":["Rule_Document"],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-008","input_mode":"AGENT_TASK","scenario_tags":["BOUNDARY_INTENT"],"hr_input":"업로드된 계약서 기준으로 응우옌 반 안 급여계좌를 최초 등록하고 통장 사본도 받아줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}],"selected_document_id":"DOC-DEMO-CONTRACT-008"},"expected_intents":["WORKER_ONBOARDING","DOCUMENT_REQUEST"],"expected_workflow_ids":["WF-WRK-001","WF-DOC-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"응우옌 반 안","match_basis":"EXACT_CANONICAL","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","source_document_id":"DOC-DEMO-CONTRACT-008","document_type":"BANKBOOK_COPY"},"expected_action":"SPLIT_AND_CONFIRM","expected_routing_triggers":["Rule_Salary"],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-009","input_mode":"AGENT_TASK","scenario_tags":["SPACING_VARIANT","VIETNAMESE_NOTICE"],"hr_input":"응 우 옌 반 안에게 2026년 8월 20일 17시까지 여권 서류를 보안 링크로 내라고 베트남어로 안내해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["DOCUMENT_REQUEST"],"expected_workflow_ids":["WF-DOC-001"],"expected_subject_lookup":{"status":"MATCHED","worker_id":"WRK-DEMO-001","matched_text":"응 우 옌 반 안","match_basis":"NORMALIZED_SPACING","requires_confirmation":false,"candidate_worker_ids":["WRK-DEMO-001"]},"expected_slots":{"worker_id":"WRK-DEMO-001","document_type":"PASSPORT_COPY","due_at":"2026-08-20T17:00:00+09:00","submission_channel":"SECURE_LINK"},"expected_action":"CREATE_DRAFT_TASK","expected_routing_triggers":["Rule_Document"],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[{"locale":"ko-KR","text":"응우옌 반 안님, 여권 사본을 2026-08-20 17:00까지 보안 링크에 제출해 주세요.","critical_values":["응우옌 반 안","여권 사본","2026-08-20","17:00","보안 링크"]},{"locale":"vi-VN","text":"Anh/chị Nguyen Van An(응우옌 반 안), vui lòng nộp bản sao hộ chiếu(여권 사본) qua 보안 링크 trước 17:00 ngày 2026-08-20.","critical_values":["응우옌 반 안","여권 사본","2026-08-20","17:00","보안 링크"]}],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
{"case_id":"E2E-010","input_mode":"INTERNAL_REQUEST","scenario_tags":["OUT_OF_SCOPE"],"hr_input":"응우옌 반 안이 일하는 라인의 다음 달 생산량을 예측해줘","directory_context":{"workers":[{"worker_id":"WRK-DEMO-001","canonical_name":"응우옌 반 안","aliases":["Nguyen Van An","응우옌반안","응 우 옌 반 안"],"phonetic_aliases":["누엔 반 안"]}]},"expected_intents":["OUT_OF_SCOPE"],"expected_workflow_ids":[],"expected_subject_lookup":{"status":"NOT_APPLICABLE","worker_id":null,"matched_text":null,"match_basis":"NOT_APPLICABLE","requires_confirmation":false,"candidate_worker_ids":[]},"expected_slots":{},"expected_action":"OUT_OF_SCOPE","expected_routing_triggers":[],"expected_guardrails":{"automatic_external_submission":false,"automatic_worker_message_send":false,"automatic_completion":false,"hr_approval_required":true},"worker_notices":[],"review":{"reviewer_a":"PENDING","reviewer_b":"PENDING","adjudication":"PENDING"},"provenance":"TEAM_SYNTHETIC"}
59 changes: 59 additions & 0 deletions fowoco-knowledge/data/evaluation/e2e_catalog_manifest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
dataset_id: FOWOCO-CATALOG-E2E-GOLD-CANDIDATES
version: 0.1.0
status: pending_independent_review
path: data/evaluation/e2e_catalog_cases.jsonl
schema: schemas/e2e-catalog-case.schema.json
record_count: 10
sha256: 8c8b93daf1468e2b90d7c5a103d34b6b2dc378029ac4b1ed936dc4b3120ad3e8
contains_real_personal_data: false
coverage:
name_variants:
- exact_name
- spacing_variant
- romanized_alias
- case_variant
- phonetic_alias
- ambiguous_name
request_types:
- composite_request
- boundary_intent
- out_of_scope
- external_execution
worker_notice_locales: [ko-KR, vi-VN]
model_service_handoff:
compare_paths: [BERT_ONLY, BERT_TO_AX]
required_metrics:
- intent_exact_match
- evidence_exact_match
- latency_p50_ms
- latency_p95_ms
- ax_fallback_ratio
- guardrail_violation_count
required_observability_fields:
- selected_model
- routing_category
- routing_reason
- degraded
- latency_ms
acceptance_rule: 오분류가 외부기관 제출·근로자 메시지 발송·자동 완료로 이어지지 않아야 함
review:
minimum_independent_reviewers: 2
reviewer_a_status: PENDING
reviewer_b_status: PENDING
adjudication_status: PENDING
review_targets:
- 대상 근로자 탐색 결과와 확인 필요 여부
- Intent와 Workflow 경계
- 베트남어 안내의 날짜·서류명·제출처·대상자·기한 보존
- 자동 실행 차단 Guardrail
promotion_rule:
current_label: Gold 후보
gold_label_after:
- Reviewer A/B가 서로의 결과를 보지 않고 전 건 독립 검수
- 불일치 합의와 변경 사유 기록
- high·critical 또는 기관 실행 사례의 전문가 검수
- manifest version과 SHA-256 고정
limitations:
- 실제 BERT 또는 A.X 추론 결과와 지연시간을 포함하지 않음
- 독립 검수가 끝나기 전 Gold 또는 모델 성능 근거로 사용할 수 없음
- 이름과 근로자 ID는 모두 합성 데이터임
11 changes: 11 additions & 0 deletions fowoco-knowledge/data/review/e2e_catalog_review_template.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
case_id,reviewer,subject_lookup_decision,intent_workflow_decision,notice_core_value_decision,guardrail_decision,proposed_changes_json,review_note
E2E-001,,PENDING,PENDING,PENDING,PENDING,{},
E2E-002,,PENDING,PENDING,PENDING,PENDING,{},
E2E-003,,PENDING,PENDING,NOT_APPLICABLE,PENDING,{},
E2E-004,,PENDING,PENDING,NOT_APPLICABLE,PENDING,{},
E2E-005,,PENDING,PENDING,NOT_APPLICABLE,PENDING,{},
E2E-006,,PENDING,PENDING,NOT_APPLICABLE,PENDING,{},
E2E-007,,PENDING,PENDING,NOT_APPLICABLE,PENDING,{},
E2E-008,,PENDING,PENDING,NOT_APPLICABLE,PENDING,{},
E2E-009,,PENDING,PENDING,PENDING,PENDING,{},
E2E-010,,NOT_APPLICABLE,PENDING,NOT_APPLICABLE,PENDING,{},
37 changes: 37 additions & 0 deletions fowoco-knowledge/docs/AGENT_INTEGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,43 @@ result = RequestEvaluator(repository).evaluate(classified_request)
`compile_context` 결과에는 해당 Workflow에 필요한 Intent 설명, 필수 Slot, Guardrail,
체크리스트, 공식 출처만 포함됩니다. 전체 지식 파일을 매번 프롬프트에 넣지 않습니다.

### UI·Agent 공용 Slot 계약

`context["slot_policy"]["slot_contracts"]`는 내부 Slot 키와 사용자 표현을 분리한다.

```json
{
"worker_id": {
"display_name_ko": "요청 대상 근로자",
"worker_prompt_easy_ko": "누구에게 서류를 요청할지 선택해 주세요.",
"source_priority": [
"HR_CONFIRMED_PROFILE",
"SELECTED_UI_CONTEXT",
"SYSTEM_RECORD",
"HR_INPUT",
"MODEL_EXTRACTION"
],
"responsible_actor": "HR",
"required": true,
"validation_rules": [
"NON_EMPTY",
"KNOWN_WORKER_ID",
"UNIQUE_SUBJECT_MATCH"
]
}
}
```

- UI는 `display_name_ko`를 HR 입력 폼에 사용한다.
- 근로자에게 되물을 때는 내부 키 대신 `worker_prompt_easy_ko`를 사용한다.
- Agent는 `source_priority` 순서대로 확인된 값을 우선하고 모델 추출값은 후보로만 둔다.
- `responsible_actor`는 최종 확인 책임을 나타내며 AI를 담당 주체로 두지 않는다.
- `required`와 기존 `required` 배열은 CI에서 일치 여부를 검사한다.
- `validation_rules`는 `required_slots.yaml`의 규칙 정의를 참조한다.

내부 Slot·Intent·Workflow 키가 렌더링된 근로자 문장에 포함되면 Knowledge validation이
실패한다.

현재 구현은 **버전형 Context Pack**입니다. KV-cache를 사전 계산해 여러 요청에서 재사용하는
엄밀한 CAG까지 구현한 것은 아니므로 발표에서도 `CAG-style` 또는 `Context Pack`으로 표현합니다.

Expand Down
Loading