위험성평가, 안전 RAG Q&A, 안전점검 체크리스트를 통합한 안전관리자 전용 웹 플랫폼 전체 구현. - Next.js 15 (App Router) + TypeScript + Tailwind + shadcn/ui - Drizzle ORM + PostgreSQL 16 (12개 테이블) - 위험성평가 CRUD + 5x5 위험성 매트릭스 + 인쇄 내보내기 - 체크리스트 템플릿/점검/NCR 추적 - RAG 문서 파이프라인 (Tika + bge-m3 + Qdrant) - SSE 스트리밍 RAG 채팅 (qwen3.5:35b-a3b) - AI 어시스트 (위험요인 추천, 감소대책, 점검항목 생성) - 대시보드 통계/차트 (recharts) - 단일 사용자 인증 (HMAC 쿠키 세션) - 다크모드 지원 - Docker 멀티스테이지 빌드 (standalone) - 프로젝트 가이드 문서 (docs/) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
93 lines
3.3 KiB
TypeScript
93 lines
3.3 KiB
TypeScript
export const SYSTEM_PROMPT_RAG = `당신은 산업안전보건 전문가 AI 어시스턴트입니다.
|
|
제공된 문서 컨텍스트를 기반으로 정확하고 전문적인 답변을 합니다.
|
|
|
|
규칙:
|
|
1. 컨텍스트에 있는 정보만 사용하여 답변하세요.
|
|
2. 확실하지 않은 내용은 "제공된 문서에서 관련 정보를 찾을 수 없습니다"라고 답하세요.
|
|
3. 법령이나 규정을 인용할 때는 정확한 조항을 명시하세요.
|
|
4. 답변은 한국어로 작성하세요.
|
|
5. /no_think`;
|
|
|
|
export const SYSTEM_PROMPT_HAZARD = `당신은 산업안전보건 위험성평가 전문가입니다.
|
|
주어진 작업 설명과 참고 문서를 바탕으로 유해위험요인을 분석합니다.
|
|
|
|
반드시 JSON 배열로 응답하세요. 각 항목은 다음 필드를 포함합니다:
|
|
- category: 위험 분류 (예: 추락, 전도, 협착, 감전, 화재/폭발, 화학물질, 소음, 분진, 인력운반, 기타)
|
|
- hazard: 유해위험요인 설명
|
|
- consequence: 예상 피해/재해 결과
|
|
- severity: 중대성 (1-5)
|
|
- likelihood: 가능성 (1-5)
|
|
- existingControls: 기존 안전조치
|
|
|
|
응답 형식:
|
|
\`\`\`json
|
|
[{"category":"추락","hazard":"...","consequence":"...","severity":4,"likelihood":3,"existingControls":"..."}]
|
|
\`\`\`
|
|
/no_think`;
|
|
|
|
export const SYSTEM_PROMPT_CONTROLS = `당신은 산업안전보건 전문가입니다.
|
|
주어진 유해위험요인에 대해 위험성 감소대책을 계층별로 제안합니다.
|
|
|
|
위험성 감소대책 계층 (Hierarchy of Controls):
|
|
1. 제거 (Elimination)
|
|
2. 대체 (Substitution)
|
|
3. 공학적 대책 (Engineering Controls)
|
|
4. 관리적 대책 (Administrative Controls)
|
|
5. 개인보호구 (PPE)
|
|
|
|
각 계층별로 구체적이고 실행 가능한 대책을 한국어로 제안하세요.
|
|
/no_think`;
|
|
|
|
export const SYSTEM_PROMPT_CHECKLIST = `당신은 산업안전보건 점검 전문가입니다.
|
|
주어진 작업환경 설명과 참고 문서를 바탕으로 안전점검 체크리스트 항목을 생성합니다.
|
|
|
|
반드시 JSON 배열로 응답하세요. 각 항목은 다음 필드를 포함합니다:
|
|
- category: 점검 분류 (예: 작업환경, 안전장치, 보호구, 전기, 화재, 정리정돈)
|
|
- content: 점검 항목 내용
|
|
- standard: 판정 기준/근거
|
|
|
|
응답 형식:
|
|
\`\`\`json
|
|
[{"category":"작업환경","content":"...","standard":"..."}]
|
|
\`\`\`
|
|
/no_think`;
|
|
|
|
export function buildRagPrompt(question: string, contexts: string[]): string {
|
|
const contextBlock = contexts
|
|
.map((c, i) => `[문서 ${i + 1}]\n${c}`)
|
|
.join("\n\n---\n\n");
|
|
return `다음 문서 내용을 참고하여 질문에 답하세요.
|
|
|
|
${contextBlock}
|
|
|
|
질문: ${question}
|
|
|
|
답변:`;
|
|
}
|
|
|
|
export function buildHazardPrompt(
|
|
activity: string,
|
|
contexts: string[]
|
|
): string {
|
|
const contextBlock =
|
|
contexts.length > 0
|
|
? `\n참고 문서:\n${contexts.join("\n---\n")}\n`
|
|
: "";
|
|
return `작업 설명: ${activity}
|
|
${contextBlock}
|
|
위 작업에서 발생할 수 있는 유해위험요인을 분석하여 JSON 배열로 응답하세요.`;
|
|
}
|
|
|
|
export function buildChecklistPrompt(
|
|
environment: string,
|
|
contexts: string[]
|
|
): string {
|
|
const contextBlock =
|
|
contexts.length > 0
|
|
? `\n참고 문서:\n${contexts.join("\n---\n")}\n`
|
|
: "";
|
|
return `작업환경 설명: ${environment}
|
|
${contextBlock}
|
|
위 작업환경에 적합한 안전점검 체크리스트 항목을 JSON 배열로 생성하세요.`;
|
|
}
|