WildProof: 질문을 가지고 밖에 나가고, 증거를 가지고 돌아오세요
요약
WildProof는 짧은 산책을 의미 있는 현장 관찰 임무로 바꾸는 오프라인 우선(offline-first) AI 앱입니다. 사용자는 질문을 가지고 밖에 나가 증거를 수집하고, 이 데이터를 기반으로 '관찰된', '추론된', '알려지지 않은' 세 가지 신뢰도 수준의 구조화된 보고서를 생성할 수 있습니다. 이는 불확실성을 명확히 제시하여 AI의 추측을 사실처럼 포장하지 않습니다.
핵심 포인트
- 오프라인 우선(offline-first)으로 설계되어 연결 상태와 무관하게 현장 기록이 가능합니다.
- 보고서는 관찰된 증거, 논리적 추론, 미확인 주장을 분리하여 제시합니다.
- Gemma를 활용하며 TabPFN 점수를 통해 보고서의 품질과 신뢰도를 측정합니다.
- 하이커, 학생 등 주변 세계에 주의를 기울이고 싶은 사용자에게 유용합니다.
_이 글은 Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass에 제출하는 내용입니다.
제가 만든 것 (What I Built)
대부분의 '밖에 나가기' 앱은 알림, 경로 안내 또는 동기 부여 메시지에서 멈춥니다.
저는 WildProof를 만들었습니다. 이는 짧은 산책을 작은 조사로 바꾸는 오프라인 우선(offline-first) 현장 관찰 앱입니다.
질문을 가지고 밖에 나가고, 증거를 가지고 돌아오세요.
WildProof는 하이커, 학생, 시민 과학자 및 주변 세계에 더 많은 주의를 기울이고 스크롤하는 시간을 줄이고 싶은 모든 사람을 위한 것입니다.
사용 경험은 의도적으로 간단합니다:
- 서식지 비교(Habitat Comparison) 또는 **패턴 찾기(Pattern Hunt)**와 같은 임무를 선택합니다.
- 화면을 벗어나 관찰 내용을 수집합니다.
- 작성된 메모와 사진 증거 참조를 캡처합니다.
- 연결 상태가 아니더라도 현장 기록을 로컬에 저장합니다.
- 백엔드가 사용 가능할 때 분석을 위해 돌아옵니다.
- 불확실성을 가시화하는 구조화된 보고서를 검토합니다.
WildProof는 '이 사진으로 종을 추측하세요' 앱이 아닙니다. 이는 불확실한 AI의 추측을 사실인 것처럼 가장하지 않습니다.
모든 보고서는 다음 내용을 분리하여 보여줍니다:
- 관찰된(Observed) — 제출된 증거에 의해 직접적으로 뒷받침됨.
- 추론된(Inferred) — 사용 가능한 증거로부터 도출된 논리적 추론.
- 알려지지 않은(Unknown) — 더 많은 증거가 필요한 주장.
제품의 원칙은 다음과 같습니다:
성공적으로 보이는 보고서가 실패한 분석을 숨기도록 절대 두지 마라.
데모 (Demo)
실시간 데모: wildproof.onrender.com
주요 사용 흐름은 다음과 같습니다:
- 패턴 찾기(Pattern Hunt) 임무를 시작합니다.
- 현장 메모와 사진 증거를 추가합니다.
- Temporal 기반 경로를 통해 보고서를 생성합니다.
- 관찰된, 추론된, 알려지지 않은 주장을 검토합니다.
- 누락된 증거, 제안된 다음 단계, 그리고 증거 품질 점수를 검사합니다.
저장소에는 작동하는 MVP와 설정 지침이 포함되어 있습니다:
GitHub logo JaniDhruv / wildproof
WildProof는 짧은 산책을 의미 있는 현장 탐사 임무로 바꿔주는 오프라인 우선(offline-first) 개방형 AI 앱입니다. 사진, 소리, 메모를 캡처한 다음, Gemma를 사용하여 명확한 신뢰도 수준을 가진 증거 기반 관찰 기록을 생성할 수 있습니다. TabPFN 점수는 품질을 보고하며, 내구성 있는 워크플로우는 재시도를 처리하여 사람들이 주변 세상을 알아차리고 이해하는 데 도움을 줍니다.
WildProof
질문을 가지고 바깥으로 나아가세요. 증거를 가지고 돌아오세요.
의미 있는 야외 시간을 위한 오프라인 우선(offline-first), 불확실성 인지형 현장 관찰 앱
🧠 요약 (TL;DR)
WildProof는 짧은 산책을 작은 현장 조사로 바꿉니다:
임무를 선택 → 메모 및 사진 증거 수집 → 로컬 저장 → 구조화된 보고서 생성 → 관찰되거나, 추론되거나, 여전히 알려지지 않은 것을 확인합니다.
이 앱은 Hacktoberfest 오픈소스 AI 챌린지: Week 1 - Touch Grass를 위해 제작되었습니다. Ollama를 통해 로컬 Gemma 2B 추론을 사용하고, 오프라인 증거 수집을 위해 IndexedDB를, 내구성 있는 분석을 위해 Temporal를 사용합니다.
MVP 상태: 작동하며 그 한계에 대해 솔직합니다. 현재의 Gemma 경로는 작성된 메모와 사진 메타데이터를 분석합니다. 이미지 픽셀을 비전 모델로 전송하지는 않습니다.
🌿 WildProof가 필요한 이유?
대부분의 아웃도어 앱은 경로 최적화에 중점을 둡니다…
코드
저장소: github.com/JaniDhruv/wildproof
이 프로젝트는 MIT 라이선스 하에 공개되었습니다.
제작 과정
WildProof는 FastAPI, Ollama, Gemma 2B, Temporal를 백엔드로 사용하는 React 및 TypeScript의 프로그레시브 웹 앱(PWA)입니다.
오프라인 우선 증거 수집
프런트엔드는 idb 패키지를 통해 IndexedDB에 탐험 기록을 저장합니다.
이는 사용자가 다음을 할 수 있음을 의미합니다:
- 로그인 없이 임무를 시작할 수 있습니다.
- 네트워크 연결 없이 메모와 사진 증거 참조를 수집할 수 있습니다.
- 페이지를 새로고침해도 탐험 기록이 손실되지 않습니다.
- 나중에 백엔드가 사용 가능할 때 분석을 재개할 수 있습니다.
사진은 현재 증거 자료로 로컬에 저장됩니다. 텍스트 전용인 Gemma 경로는 작성된 메모와 사진 메타데이터를 받으며, 이미지 픽셀을 받거나 사진 내용을 시각적으로 식별한다고 주장하지 않습니다.
로컬 오픈 웨이트 AI
핵심 분석은 Ollama를 통한 Gemma 2B를 사용합니다.
백엔드는 임무 유형과 수집된 현장 메모를 Gemma로 전송하고 엄격한 JSON 보고서를 요청합니다:
{
"summary": "간결한 탐험 요약.",
"observations": [
...
응답은 프론트엔드에 도달하기 전에 Pydantic 스키마를 통해 검증됩니다. Gemma가 잘못된 JSON을 반환하면 API는 한 번의 복구 시도를 합니다. 이마저도 실패하면, 애플리케이션은 성공적인 보고서를 임의로 생성하는 대신 명시적인 실패 상태를 표시합니다.
만약 로컬 모델이 사용 불가능한 경우, 탐험 기록은 로컬에 보존되며 UI에는 명확하게 레이블링된 대체(fallback) 상태가 표시됩니다.
Temporal을 이용한 내구성 있는 분석
로컬 모델 추론은 시간 초과, 서비스 미사용, 또는 일시적인 인프라 문제로 인해 실패할 수 있습니다. WildProof는 Temporal 워크플로우를 사용하여 분석 단계를 조정합니다:
정규화된 증거 자료
↓
Gemma 분석 실행
...
프론트엔드는 기본적으로 Temporal 기반 엔드포인트를 사용하며, 직접 FastAPI 경로에 대한 스위치를 포함하고 있습니다.
여기서 Temporal의 가치는 단순히 다른 서비스를 추가하는 것이 아닙니다. 실패한 활동은 탐방 중에 수집된 증거 자료를 폐기하거나 전체 탐험을 재시작하지 않고도 재시도할 수 있다는 점입니다.
증거 자료 품질 점수화
WildProof는 다음과 같은 구조화된 증거 자료 특징으로부터 투명한 품질 점수를 계산합니다:
- 사진 개수.
- 메모 개수.
- 총 메모 길이.
- 탐험 지속 시간.
해당 저장소에는 작은 테이블형 데이터셋에 대한 재현 가능한 기준선 대 TabPFN 실험이 api/tabpfn_experiment.py에 포함되어 있습니다.
현재 프로덕션 엔드포인트는 설치된 TabPFN/Torch 조합을 사용할 수 없을 때 명시적으로 레이블이 지정된 베이스라인 휴리스틱(baseline heuristic)을 사용합니다. 이러한 제한 사항은 API와 UI에서 확인할 수 있으며, 앱은 TabPFN이 작동하지 않을 때도 그렇게 주장하지 않습니다.
관측 가능성 (Observability)
프론트엔드와 백엔드는 다음 항목에 대한 Sentry 계측(instrumentation)을 포함합니다:
- 요청 실패 (Request failures).
- 모델 분석 오류 (Model-analysis errors).
- 요청 및 분석 타이밍 (Request and analysis timing).
- 프론트엔드 오류 (Frontend errors).
- 지속형 워크플로우 실패 (Durable workflow failures).
Sentry 이벤트를 사용하려면 SENTRY_DSN이 구성되어야 하므로, 프로젝트는 시크릿이나 호스팅된 관측 가능성 계정 없이 로컬에서 실행될 수 있습니다.
Open Innovation이 중요한 이유?
WildProof는 개인적인 관찰에 대한 신뢰(trust), 프라이버시(privacy), 그리고 통제권에 관한 것입니다.
현장 증거에는 사적인 장소의 사진, 이동 패턴, 또는 사람의 집이나 일상에 대한 메모가 포함될 수 있습니다. 연결성 또한 앱이 사용되도록 의도된 바로 그 장소에서 불안정합니다.
폐쇄적이고 클라우드 전용 AI API를 사용하는 것은 다음을 더 어렵게 만듭니다:
- 오프라인으로 증거를 캡처하는 것.
- 현장 메모를 사용자의 통제 하에 유지하는 것.
- 모델 워크플로우를 검사하고 변경하는 것.
- 출력 형식을 재현하는 것.
- 불확실성과 실패를 가시화하는 것.
로컬 추론(local inference)을 통해 오픈 웨이트 모델(open-weight model)을 사용하는 것은 핵심 분석을 검사 가능하고 적응 가능하게 만듭니다. 모델은 교체될 수 있고, 프롬프트는 감사(audit)할 수 있으며, 보고서 스키마는 관찰과 추론 사이에 명시적인 구분을 강제할 수 있습니다.
오픈 혁신(Open innovation)은 또한 실패를 더 솔직하게 논의하기 쉽게 만듭니다. WildProof는 Gemma가 사용 불가능한 경우, 앱이 베이스라인 점수로 폴백(fallback)하는 경우, 그리고 이미지가 비전 모델로 전송되지 않고 증거로 저장된 경우를 보여줄 수 있습니다.
이 프로젝트에서 오픈 AI는 단순히 챗봇을 추가하는 더 저렴한 방법이 아닙니다. 이는 프라이버시 인식이 되어 있고, 오프라인 우선(offline-first)이며, 불확실성 인지형 현장 도구를 실용적으로 만드는 요소입니다.
제가 배운 것
가장 어려웠던 부분은 모델에 프롬프트를 보내는 것이 아니었습니다.
더 어려웠던 문제들은 다음과 같았습니다:
- 확신에 찬 환각(hallucination)을 보상하지 않는 출력 스키마 설계.
- 네트워크가 사라질 때 증거를 보존하는 방법.
- 사용자의 작업물을 잃지 않으면서 AI의 실패를 가시화하는 방법.
- 단순히 인프라를 추가하는 것을 넘어 지속 가능한 워크플로우를 만드는 것.
- TabPFN과 같은 의존성이 현재 환경에서 실행될 수 없을 때 정직하게 알리는 것.
프로젝트에서 가장 큰 변화는 주장(claims)을 증거에 맞게 좁히는 것이었습니다. 사진은 현재 Gemma의 시각적 입력이 아니라 증거 참조입니다. TabPFN은 프로덕션 안전한 기준선 폴백(fallback)을 갖춘 재현 가능한 실험입니다. 이러한 제약 조건들은 MVP를 덜 화려하게 만들지만, 더 신뢰할 수 있게 만듭니다.
나의 에이전트 세션
저는 GitHub Copilot을 사용하여 제품 방향성을 탐색하고, 도전 과제 요구 사항에 맞춰 구현 내용을 검토하며, 과장된 주장을 식별하고, 최종 MVP 내러티브를 다듬었습니다.
Hacktoberfest Touch Grass를 위한 WildProof 구축
당신
해커토버페스트(hacktoberfest) 개발 챌린지 첫째 주 '풀 그라스(touch grass)'에 좋은 아이디어 있나요?
현재 제출된 작품들을 보고 그것들을 이길 수 있는 아이디어를 찾고, 상품 카테고리를 현명하게 선택하며, 경쟁률이 매우 낮은 경우 하나를 선택해 주세요.
우리는 원하는 만큼 많은 상품 카테고리를 추가할 수 있으니, 정말로 승리하는 아주 좋은 프로젝트 아이디어만 확실히 선정하면 됩니다.
에이전트
▸ skill {"skill":"devrelay-challenges"}
Input
{
"skill": "devrelay-challenges"
}
Output
Skill "devrelay-challenges"가 성공적으로 로드되었습니다. 스킬 컨텍스트의 지침을 따르세요.
에이전트
▸ skill {"skill":"devrelay-community-wisdom"}
Input
{
"skill": "devrelay-community-wisdom"
}
Output
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기