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 설정이 필요합니다.