aiaiteam commited on
Commit
5978bb4
·
1 Parent(s): 8f85575

Add 내부품의 mode: 품의서 system prompt + 3rd radio button

Browse files
Files changed (1) hide show
  1. static/index.html +55 -4
static/index.html CHANGED
@@ -128,13 +128,16 @@
128
  <h2>입력</h2>
129
 
130
  <label>문서 양식</label>
131
- <div class="row" style="gap:16px; margin-bottom:8px;">
132
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
133
- <input type="radio" name="doc-mode" value="공문" checked> 공문 (수신/제목/본문/끝.)
134
  </label>
135
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
136
  <input type="radio" name="doc-mode" value="보고서"> 보고서 (작성일자/부서/섹션)
137
  </label>
 
 
 
138
  </div>
139
 
140
  <label for="prompt">내용 요점</label>
@@ -264,12 +267,60 @@ const SYSTEM_PROMPT_REPORT = `당신은 한국전력공사(한전, KEPCO) 내부
264
  가. ('26.5월) 규제 설명회 개최
265
  나. ('26.6월) 사내 위원회 운영계획 수립`;
266
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
267
  function getMode() {
268
  return document.querySelector('input[name="doc-mode"]:checked')?.value || '공문';
269
  }
270
 
271
  function getSystemPrompt() {
272
- return getMode() === '보고서' ? SYSTEM_PROMPT_REPORT : SYSTEM_PROMPT_LETTER;
 
 
 
273
  }
274
 
275
  function buildUserPrompt() {
@@ -422,7 +473,7 @@ $('download-docx').addEventListener('click', async () => {
422
  setStatus('docx 라이브러리 로딩 실패 (네트워크 확인)', true);
423
  return;
424
  }
425
- const firstTitleMatch = text.match(/^제목\s+(.+)$/m);
426
  const mode = getMode();
427
  const title = (firstTitleMatch ? firstTitleMatch[1] : mode).trim();
428
  const safeTitle = title.replace(/[\\/:*?"<>|]/g, '_').slice(0, 50);
 
128
  <h2>입력</h2>
129
 
130
  <label>문서 양식</label>
131
+ <div class="row" style="gap:16px; margin-bottom:8px; flex-wrap:wrap;">
132
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
133
+ <input type="radio" name="doc-mode" value="공문" checked> 공문 (수신/제목/끝.)
134
  </label>
135
  <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
136
  <input type="radio" name="doc-mode" value="보고서"> 보고서 (작성일자/부서/섹션)
137
  </label>
138
+ <label style="display:flex; align-items:center; gap:6px; font-size:14px; color:var(--text); cursor:pointer;">
139
+ <input type="radio" name="doc-mode" value="내부품의"> 내부품의 (품의서/결문)
140
+ </label>
141
  </div>
142
 
143
  <label for="prompt">내용 요점</label>
 
267
  가. ('26.5월) 규제 설명회 개최
268
  나. ('26.6월) 사내 위원회 운영계획 수립`;
269
 
270
+ const SYSTEM_PROMPT_APPROVAL = `당신은 한국전력공사(한전, KEPCO) 내부품의서 작성 전문가입니다. 현재는 2026년입니다.
271
+ 사용자가 요청한 내용을 아래 양식에 정확히 맞춰 작성하세요.
272
+
273
+ [조직 정보]
274
+ - 회사: 한국전력공사
275
+ - 시점: 2026년 (날짜에 별도 연도 없으면 2026년 기준)
276
+ - 부서명 예시: 전략경영부, 경영지원부, ICT운영부, 인사관리부 등
277
+
278
+ [양식]
279
+ 품 의 서
280
+
281
+ (기안부서)
282
+
283
+ 제 목 (문서 제목)
284
+
285
+ (사유·배경 — 1~2문장으로 간략히. 왜 이 품의가 필요한지.)
286
+
287
+ 1. (섹션명 — 예: 사유, 목적, 추진 배경)
288
+ 가. 항목
289
+ 나. 항목
290
+
291
+ 2. (섹션명 — 예: 내용, 시행 내용, 추진 내용)
292
+ 가. 항목
293
+ - 세부
294
+ 나. 항목
295
+
296
+ 3. (섹션명 — 예: 소요 예산, 향후 일정) ← 해당 시만 작성
297
+
298
+ 붙임 1. (첨부파일명 N부.)
299
+
300
+ 위와 같이 품의합니다.
301
+
302
+ 2026. M. D.
303
+
304
+ (기안부서장)
305
+
306
+ [규칙]
307
+ - 수신/발신/끝. 같은 공문 letter 양식 요소 사용 금지
308
+ - 결재선(담당·과장·부장 등 결재자 목록) 작성 금지 — 기안부서장만 표기
309
+ - 본문 섹션: "1. 2. 3." + 제목, 세부: "가. 나. 다.", 더 세부: "-" 글머리
310
+ - 날짜: "YYYY. M. D."
311
+ - 문체: 본문은 명사형 종결, 마지막 결문만 "위와 같이 품의합니다" 정중체
312
+ - 마크다운 기호(**, *, #) 절대 금지
313
+ - 사용자가 준 내용만 사용, 추측·가공 금지`;
314
+
315
  function getMode() {
316
  return document.querySelector('input[name="doc-mode"]:checked')?.value || '공문';
317
  }
318
 
319
  function getSystemPrompt() {
320
+ const mode = getMode();
321
+ if (mode === '보고서') return SYSTEM_PROMPT_REPORT;
322
+ if (mode === '내부품의') return SYSTEM_PROMPT_APPROVAL;
323
+ return SYSTEM_PROMPT_LETTER;
324
  }
325
 
326
  function buildUserPrompt() {
 
473
  setStatus('docx 라이브러리 로딩 실패 (네트워크 확인)', true);
474
  return;
475
  }
476
+ const firstTitleMatch = text.match(/^제\s*목\s+(.+)$/m);
477
  const mode = getMode();
478
  const title = (firstTitleMatch ? firstTitleMatch[1] : mode).trim();
479
  const safeTitle = title.replace(/[\\/:*?"<>|]/g, '_').slice(0, 50);