인셔셔RSS 관심 있는 블로그, 뉴스, 기술 정보를 효율적으로 추적하고 읽으세요
원문 읽기 InertiaRSS에서 열기

추천 피드

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
컴패니언 - 당뇨병과 고혈압을 위한 프라이버시 우선 건강 컴패니언
bluerockymou · 2026-05-24 · via DEV Community

이것은 Gemma 4 Challenge: Gemma 4로 구축하기

의 제출물입니다. 제가 만든 것

Companion은 2형 당뇨병과 고혈압을 함께 관리하는 사람들을 위한 조용한 매일 체크인입니다 — 대부분이 그렇습니다. (당뇨병 환자의 약 70%가 고혈압도 가지고 있습니다.)

문제점: 전 세계적으로 5억 3700만 명이 당뇨병을 앓고 있습니다. 대부분은 3개월에서 6개월마다 한 번씩 병원을 방문합니다. 방문 사이에는 노트북이나 앱에 숫자를 모아두지만, 그 숫자들이 함께 의미를 가지는지 알 방법이 없습니다.이것들은 의미가 있는가요? 화요일 215 mg/dL은 나쁜 수치인가요? 혈압 추세가 상승하고 있는가요? 아목립린 한 번 놓친 것은 정말 중요한가요?

동반자는 따뜻한 간호사처럼 한 주간의 측정값을 읽는다. 그것은:

  1. 위험 지역을 먼저 표시 — 오늘 의사에게 전화할 가치가 있는 측정값
  2. 패턴을 찾는다 — "화요일과 토요일 모두 밥을 먹으면 포도당이 215을 넘었다. 주목해야 할 점."
  3. 시도해 볼 작은 일 하나를 제안한다 — 일반적인 조언이 아니라, 그들의 데이터
  4. 에 기반한 구체적인 실험이다 그들은 다음 약속에서 의사에게 들을 수 있는 임상 요약을 작성한다 — 깨끗하고 사실적이며, 30초 안에 스캔할 수 있다

모든 읽기는 사용자의 브라우저에 남아있다. 백엔드가 없고, 데이터베이스가 없으며, 계정도 없다

데모

🎥비디오 튜토리얼:

🌐 라이브 데모: https://companion-sooty.vercel.app

단순한 흐름입니다:

  1. 이번 주 읽기 내용을 붙여넣거나 샘플을 로드합니다.
  2. "나의 주를 분석하기"를 클릭합니다.
  3. 위험 플래그, 추세, 한 가지 제안된 실험, 의사 요약을 확인합니다.
  4. 다음 약속을 위해 PDF를 다운로드합니다.

코드

📦 GitHub:

동반자

당뇨병과 고혈압을 관리하는 사람들을 위한 조용한 매일 체크인. 이번 주의 결과를 붙여넣고, 정상적인 것, 주의가 필요한 것, 시도해 볼 작은 일을 간단한 언어로 요약받으며, 다음 의사 방문 시 가져갈 깨끗한 PDF 요약을 받으세요.

설계되었습니다.DEV.to Gemma 4 Challenge2026년 5월.

이것이 존재하는 이유

전 세계적으로 5억 3700만 명의 당뇨병 환자가 살고 있습니다. 그들 중 대부분은 3개월에서 6개월마다 한 번씩 의사를 복니다. 그 사이에 그들은 노트북이나 앱에 숫자를 모아두지만, 그 숫자들이 함께 의미하는 바를 알지 못합니다.

Companion은 중간 지점입니다. 한 주 동안의 포도당과 혈압 측정 값을 친절한 간호사처럼 읽습니다 — 위험 지역을 찾고, 패턴을 인식하고, 시도해 볼 특정한 일을 제안하고, 의사가 30초 안에 스캔할 수 있는 임상 요약을 작성합니다.

작동 방식

그것은…

전체 앱은 하나의 HTML 파일입니다. 프레임워크 없이, 빌드 단계 없이, npm install 없이요. 의사 요약 다운로드를 위해 jsPDF(CDN을 통해 로드)만 의존성이에요. 앱의 "지능"은 거의 전부 시스템 프롬프트에 살아있는데 — 이건 내가 솔직히 말하면 더 많이 조정했어요.

// The model call is dead simple:
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
  method: 'POST',
  headers: { 'Authorization': `Bearer ${key}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({
    model: 'google/gemma-4-26b-a4b-it:free',
    messages: [
      { role: 'system', content: SYSTEM_PROMPT },
      { role: 'user', content: `Here are my readings for the past 7 days:\n\n${readings}` }
    ],
    temperature: 0.3,
    max_tokens: 1500
  })
});

전체 화면 모드로 전환 전체 화면 모드 종료

시스템 프롬프트는 제품이 존재하는 곳입니다. 참조 범위를 정의하고, 출력 스키마, 톤 규칙("좋은 친구처럼 말해라, 병원 책처럼 말하지 마라"), 명시적인 안전 제약 조건(의료 조언을 대체하지 마라, 항상 의사 요약을 포함해라)을 정의합니다.

제가 Gemma 4를 사용한 방법

저는 Gemma 4 26B MoE (4B 활성화)를 선택했습니다 — 전문가 혼합(Mixture-of-Experts) 변형 — 그리고 모델 선택은 이 제품에 있어 중요한 역할을 합니다.

왜 전문가 혼합(MoE)이 아니라 31B 밀집 모델인가요: 동반자는 빠르게 느껴야 합니다. 사람들은 응답이 12초 걸리는 일일 체크인 도구를 사용하지 않을 것입니다. MoE는 토큰당 4B 파라미터만 활성화하여 Dense 모델과 비슷한 추론 품질을 제공하여 OpenRouter의 무료 티어에서 낮은 지연 시간을 의미합니다. 일일 사용 도구에 있어서, 그 지연 시간 예산은 마지막 몇 점의 벤치마크 정확도보다 더 중요합니다.

왜 MoE가 아니라 E4B인가요: 여기서의 추론 작업은 정말 어렵습니다. 모델은 화요일에 나타난 포도당 스파이크를 화요일에 언급된 라이스와 닭고기 식사와 연결해야 하며, 그 다음에 토요일의 카레에서 동일한 패턴을 알아야 합니다. 화요일에 놓친 아목립라딘 용량과 혈압이 점차 상승하는 것 사이의 상관관계를 이해해야 합니다. 모델은 동시에 다섯 가지 참조 범위를 가중치를 두고, 무엇을 경고로 표시할지, 언급할지, 무시할지 결정해야 합니다. E4B (4B 파라미터)는 여기서 신호를 시작으로 감소합니다. MoE의 전문가 라우팅은 식단, 약물 복용 준수, 시간대 패턴 등 다양한 도메인 간의 추론을 처리하지만, 활성 파라미터 수를 증가시키지 않습니다.

왜 Gemma 4인가요 (Gemini Flash 또는 GPT-4o-mini가 아닌 이유): Apache 2.0 라이선스는 건강 애플리케이션에 대해 사람들이 인식하는 것보다 중요합니다. 아키텍처는 로컬 추론 경로가 안정화되면 LiteRT-LM 또는 Ollama를 통해 완전히 로컬 Gemma 4 E4B 배포로 의도적으로 교체할 수 있습니다. 프라이버시가 엄격한 시장 — 독일 의료 서비스, EU GDPR 환경, 미국 클라우드에 환자 데이터를 보낼 수 없는 사람들 — 그 이전 경로는 "흥미로운 데모"와 "실제 제품" 사이의 차이입니다. 오늘의 호스팅된 통화는 배포 편의성입니다. 모델 선택은 내일의 프라이버시 보장을 위해입니다.

Gemma 4가 해제한 것은 나가 지난 두 해 동안 만들 수 없었던 것: 사유. 이전에 개방된 모델들은 내가 요약을 제공해 줄 것("이번 주 당뇨병 수치는 128에서 268까지였으며 평균은 144입니다"). Gemma 4는 내게 통찰력을 제공해 줍니다. ("당신의 두 번째로 높은 측정값은 모두 밥을 많이 먹은 식사 후였습니다. 주목해야 할 점입니다.") 그 전환 — 요약에서 통찰력으로 — 로깅 앱과 동반자 사이의 차이를 만듭니다.

제가 잘린 부분

이걸 7시간 정도 만들었고, 많은 좋아서 하고 싶은 부분을 잘랐습니다.

  • ❌ 다중 모드 사진 업로드 (사용자가 혈당계 화면을 찍을 수 있게 함) — v2로 남겨두었습니다
  • ❌ 여러 주간의 트렌드 차트 — 의사 PDF는 충분히
  • ❌ 모바일 앱 — 웹은 폰 브라우저에서 잘 작동합니다
  • ❌ 사용자 계정 — 모든 것이 브라우저에 있어서, 그게 프라이버시 이야기입니다

나는 의사 방문 사이에 실제로 누군가를 도울 수 있는 최소한의 것을 남겼습니다. 그게 전체 포지셔닝입니다.

책임에 대한 메모

저는 의사가 아닙니다. 앱은 이를 명확하게 명시하고 있습니다 — 모든 화면, 모든 PDF 파일 모두 "이것은 의료 조언이 아닙니다"라는 문구를 포함합니다. 프롬프트에 있는 참조 범위는 표준 ADA 및 AHA 지침에서 유래했지만, 모델은 여전히 잘못될 수 있습니다. 제품은 인간 의사가 참여한다는 가정을 기반으로 구축되었습니다. Companion의 역할은 그 대화가 일어나도록 돕는 것이 아니라, 그것을 대체하는 것이 아닙니다.

직접 시도해보세요

당신이 당뇨병이나 고혈압을 관리하는 친구나 가족이 있다면, 그들이 Companion에 일주일간의 측정값을 기록해보라고 요청하고, 요약된 내용이 그들에게 모르는 점을 알려준다면 확인해보세요. 그게 제가 가장 신경 썼던 테스트입니다.

이 챌린지를 준비해준 DEV팀과 Google에게 감사드립니다 — 특히 오픈-웨이트 이야기를 드러낸 덕분입니다. 이만한 모델에 Apache 2.0을 채택하는 것은 건강 관리에 정말 큰 일입니다.


2026년 5월 Gemma 4 Challenge를 위해 혼자 만들었습니다.