BLA
BLA (Blind LLM Agents) is the open-source Blue Defense MCP and CLI built to protect software artifacts against automated AI reverse-engineering workflows.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證소방기관 사칭 사기를 금 실시간으로 진위확인하는 풀스택 서비스 (FastAPI + Next.js)
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
2026 소방안전 빅데이터 활용 아이디어 경진대회 출품작 https://bigdata-119.kr/bbs/view?bbsctt_id=571 최근 소방서·소방공무원을 사칭해 "법령 개정으로 소화기 교체가 의무화됐다", "정부 보조금이 전액 환급된다"는 명목으로 금전을 요구하는 사기가 전국적으로 발생하고 있습니다 (경북 6.3억 원, 제주 8,070만 원 피해 사례 등). 피해자 대부분은 민박·모텔·단란주점·노래연습장 같은 소규모 다중이용업소 사업주로, 사칭 여부를 확인할 수단이 없어 그대로 송금하는 경우가 많습니다. FireShield는 송금 직전, 그 자리에서 즉시 진위를 확인할 수 있는 웹서비스입니다. 설치나 회원가입 없이 URL 접속만으로 확인할 수 있도록 만들어, 골든타임 안에 판단할 수 있도록 설계했습니다. 1. 소방기관 사칭 진위확인 (/) 사용자가 입력한 발신 기관명, 담당자명, 요구 사유, 법령명, 요구받은 계좌번호를 아래 공공데이터와 실시간으로 대조하여 위험도(안전/의심/위험)를 판정합니다.檢視完整 README ↗
소방기관 사칭 사기 실시간 진위확인 시스템
2026 소방안전 빅데이터 활용 아이디어 경진대회 출품작 https://bigdata-119.kr/bbs/view?bbsctt_id=571
최근 소방서·소방공무원을 사칭해 "법령 개정으로 소화기 교체가 의무화됐다", "정부 보조금이 전액 환급된다"는 명목으로 금전을 요구하는 사기가 전국적으로 발생하고 있습니다 (경북 6.3억 원, 제주 8,070만 원 피해 사례 등). 피해자 대부분은 민박·모텔·단란주점·노래연습장 같은 소규모 다중이용업소 사업주로, 사칭 여부를 확인할 수단이 없어 그대로 송금하는 경우가 많습니다.
FireShield는 송금 직전, 그 자리에서 즉시 진위를 확인할 수 있는 웹서비스입니다. 설치나 회원가입 없이 URL 접속만으로 확인할 수 있도록 만들어, 골든타임 안에 판단할 수 있도록 설계했습니다.
/)사용자가 입력한 발신 기관명, 담당자명, 요구 사유, 법령명, 요구받은 계좌번호를 아래 공공데이터와 실시간으로 대조하여 위험도(안전/의심/위험)를 판정합니다.
규칙 기반 점수와 별도로, 로컬에서 직접 구동하는 LLM(Ollama)이 신고 내용을 읽고 사칭 사기 확률을 판정합니다. 외부 API에 개인정보를 보내지 않고, GPU 없이 소형 한국어 모델(예: gemma2:2b)로 동작합니다.
로컬 모델은 확률 대신 산문을 뱉거나, 범위를 벗어난 값·NaN·깨진 JSON을 내놓는 일이 잦습니다. 이를 app/services/ai_guardrail.py가 판정 전에 걸러냅니다.
| 모델이 내놓은 값 | 가드레일 처리 |
|---|---|
NaN / Infinity / 파싱 불가능한 산문 | 폐기 — 규칙 점수로 폴백, 이상 징후 로깅 |
250, -0.4 처럼 범위 밖 숫자 | 0~100으로 클램프, 방향은 유지 |
"80%", 0.87, 73/100 등 다양한 표기 | 0~100 스케일로 정규화 |
| 규칙 점수와 45점 이상 상충 (예: 규칙 85 / AI 2) | 폐기 — 보수적으로 규칙 점수 신뢰 |
| 40~60점 중립 구간 | 참고용으로만 표시, 최종 판정에는 미반영 |
| Ollama 미기동 / 타임아웃 | 폐기 — 규칙 점수만으로 정상 응답 |
최종 위험도는 신뢰 가능한 AI 점수가 규칙 점수보다 높을 때만 보수적으로 상향(max)하며, API 응답에는 rule_score와 ai_assessment가 각각 노출됩니다. 가드레일의 모든 분기는 tests/test_ai_guardrail.py(34케이스)로, 엔드포인트 결합은 tests/test_verify_endpoint.py로 검증합니다.
# AI 판정 활성화
ollama pull gemma2:2b
# backend/.env 에서 AI_ENABLED=true (기본값). 끄면 규칙 점수만 사용.
/risk-map)소방청 전국 화재 현황 데이터를 기반으로 시/도별 위험도를 시각화하고, 특정 시/도를 선택하면 시/군/구 단위 상세 통계로 드릴다운할 수 있습니다.
이 프로젝트에서 신경 쓴 부분은 공공데이터를 그대로 붙이는 것이 아니라, 서비스 목적(사칭 판별)에 맞게 필터링하고 재구성한 것입니다.
| 원본 데이터 | 문제 | 처리 방식 |
|---|---|---|
| 전국 화재 현황 (연간 38,409건) | "최근 3개월"이라는 서비스 맥락에 비해 1년치 데이터라 과다 | 데이터 내 최신 접수일 기준으로 최근 90일만 필터링 → 실사용 맥락에 맞는 8,652건으로 축소 |
| 전국 다중이용업소 현황 (24,547건) | 시/도 컬럼이 따로 없이 주소 텍스트에 섞여 있고, 폐업 이력이 필터링되지 않음 | 정규식으로 주소에서 시/도를 추출하고, 사용여부=Y(실제 영업 중)인 건만 필터링 후 시/도별 집계 |
| 소방시설업 현황 (10,465건) | EUC-KR 인코딩, 결측치가 NaN(float)으로 남아 DB 저장 시 타입 오류 발생 | 인코딩 감지 후 안전한 문자열 정규화 함수로 전처리, 업종·상호·대표자 컬럼을 인덱싱해 부분일치 검색 최적화 |
| 화재현황 + 다중이용업소현황 (독립된 두 데이터셋) | 각각 별도로 제공되어 단순 합산만으로는 위험도를 판단하기 어려움 | 시/도 단위로 결합한 뒤, 화재 건수·사망자 수·다중이용업소 밀집도를 가중합산하여 0~100으로 정규화한 위험 점수로 재구성 |
[Next.js 프론트엔드] │ REST API ▼ [FastAPI 백엔드] │ ├─ [PostgreSQL] 조회 로그(AES-256 암호화), 소방시설업 현황 캐시 │ └─ [외부 API / 데이터]
cd backend
conda create -n fireshield python=3.12
conda activate fireshield
pip install -r requirements.txt
docker compose up -d # PostgreSQL 실행
python scripts/load_fire_businesses.py # 소방시설업 현황 데이터 적재
uvicorn app.main:app --reload
.env 파일에 DATABASE_URL, LAW_API_KEY, ENCRYPTION_KEY 등 환경변수 설정이 필요합니다.
cd frontend
npm install
npm run dev
.env.local에 NEXT_PUBLIC_API_BASE_URL, NEXT_PUBLIC_GOOGLE_MAPS_API_KEY 설정이 필요합니다.