- AI 챗봇 '짹'의 페르소나 정의 및 시스템 프롬프트 상수를 추가했습니다. - 채팅 이력, 쿼터 관리, 요청 멱등성 보장을 위한 Firestore 데이터 모델을 구현했습니다. - 위기 상황 대응(자해·위해 예고 등) 및 입력/출력 필터링 파이프라인을 구축했습니다. - Gemini 및 Anthropic 모델을 지원하는 AI Provider 추상화 계층을 마련했습니다.
193 lines
7.0 KiB
TypeScript
193 lines
7.0 KiB
TypeScript
import { createHash } from "node:crypto";
|
||
import {
|
||
CHAT_CANARY_TOKEN,
|
||
CRISIS_ABUSE_MESSAGE,
|
||
CRISIS_SELF_HARM_MESSAGE,
|
||
CRISIS_THREAT_MESSAGE,
|
||
CRISIS_URGENT_PREFIX,
|
||
} from "../constants/chatPrompts";
|
||
import { MemCache } from "../lib/memCache";
|
||
import type { ChatFilterConfig } from "../types/chat";
|
||
|
||
/**
|
||
* 안전 파이프라인(§7) — 입력 필터 1단계(키워드), 위기 감지, 출력 검사.
|
||
*
|
||
* 하드 블록(혐오·성적·미성년 보호)은 클라이언트 의향과 무관한 스토어 정책 하한이다.
|
||
* 거친 응원 표현(탄식·가벼운 욕설)은 통과시킨다(3-1).
|
||
*/
|
||
|
||
export type BlockCategory = "hate" | "sexual" | "minor" | "insult";
|
||
|
||
export interface InputCheckResult {
|
||
blocked: boolean;
|
||
category?: BlockCategory;
|
||
}
|
||
|
||
export type CrisisType = "selfHarm" | "abuse" | "threat";
|
||
|
||
export interface CrisisCheckResult {
|
||
crisis: boolean;
|
||
type?: CrisisType;
|
||
urgent?: boolean;
|
||
}
|
||
|
||
const regexCache = new Map<string, RegExp[]>();
|
||
|
||
function compile(patterns: string[]): RegExp[] {
|
||
const key = patterns.join(" |