Opentrons Labworks Inc
Opentrons Flex와 OT‑2용 프로토콜 작성 및 실행 소프트웨어
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Unabhängige Bewerbungsdemo, inspiriert von KLARA — kein Produkt der Hochschule Anhalt. Alle Personen und Dokumente sind erfundene Musterdaten.
Demo: https://pflege-posteingang-demo.vercel.app (Passwörter der Demo-Konten stehen in der Bewerbung; ohne Anmeldung: Musterakte unter /muster) · Projektbeschreibung: docs/projektbeschreibung.md (auch in der App unter „Über das Projekt“)
Digitaler Posteingang einer Pflegeeinrichtung mit generativer KI und sichtbarer Sicherheitsarchitektur: Papierdokumente werden per OCR erfasst, die KI schlägt Felder vor, ein Mensch gibt frei. Pflegekräfte stellen Fragen an die Dokumente (RAG) und erhalten Antworten mit Quellen. Ein Agent schlägt Wiedervorlagen vor, gespeichert wird erst nach Bestätigung.
| Sicherheitsbaustein | Umsetzung |
|---|---|
| Login und Rollen | OIDC (Zitadel) über Next.js als Backend-for-Frontend, Tokens nie im Browser |
| Rechte | Row Level Security je Wohnbereich; die API greift im Namen des Nutzers zu |
| Agent | eigenes Token per Token Exchange (RFC 8693), fünf Werkzeuge, Schreiben nur nach Bestätigung |
| Datenschutz | Pseudonymisierung vor jedem Sprachmodell; ein Modell-Tor verweigert Aufrufe mit Klarnamen |
| Prompt-Injection | fünf Schichten; gemessen 89,6 % Erkennung bei 11,3 % Fehlalarm (Bericht) |
| Bereich | Technik |
|---|---|
| Web-App | Next.js, Tailwind, shadcn/ui, PWA |
| Backend | Python, FastAPI |
| Daten | Supabase (Postgres, pgvector, RLS) |
| Login | Zitadel (öffentlich) / Keycloak (lokal) |
| KI | Mistral (öffentlich) / Ollama + Docling (lokal) |
Voraussetzungen: Python ≥ 3.12 mit uv, Node 22 mit pnpm, Docker (ohne Compose-Plugin), make.
make setup # einmalig: Abhängigkeiten + Playwright-Browser
make test # Unit-Tests API + Web
make e2e # End-to-End (Desktop + Handy)
make up-test # ohne Konto/Schlüssel: Supabase + Web + API + Test-IdP, Attrappen für OCR/LLM
make smoke # prüft Startseite, API mit Datenbank und Test-IdP
make up # wie oben, aber echte Anbieter und IdP aus .env
make down
Lokal laufen Web (http://localhost:3000) und API (http://localhost:8000) per docker run im Host-Netzwerk (infra/local-stack.sh); Supabase kommt über die CLI (make db-start). Im Test-IdP (http://localhost:18090/default) meldet man sich mit beliebigem Namen an und trägt die Rolle als Claims ein, z. B. {"roles": ["nurse_wb1"]} (Rollen: nurse_wb1, nurse_wb2, pdl).
Login, OCR, Modelle und Datenbank laufen auf dem eigenen Rechner: Keycloak, Docling, Ollama und das lokale Supabase. Es wird keine .env gelesen, und kein Text verlässt den Rechner.
ollama pull qwen3:8b && ollama pull bge-m3 # einmalig; Ollama läuft nativ (ollama serve)
make up-local # Supabase + Keycloak + Docling + API + Web; setzt die lokalen Musterdaten zurück und indiziert sie mit bge-m3
make smoke-local # prüft alle Dienste und ruft die echten Modelle einmal auf
make down
Anmelden mit den lokalen Passwörtern aus infra/demo-users.json (local_password):
pflege-wb1 / Pflege-WB1-Demo!, pflege-wb2 / Pflege-WB2-Demo!, pdl / Pflege-PDL-Demo1!.
Sie gelten nur auf dem eigenen Rechner; die öffentliche Demo nimmt ihre Passwörter aus
GitHub-Secrets (DEMO_PASSWORD_WB1, _WB2, _PDL), die alten öffentlichen gelten dort nicht mehr. Speicherbedarf: etwa 10 GB frei. Gemessen am 01.11.2026 auf einem Laptop ohne GPU (8 Kerne, 15 GB):
| Schritt | Dauer |
|---|---|
| Keycloak-Start | ~75 s |
| Docling liest einen Brief | 12–32 s |
Upload bis „bereit zur Prüfung“ (OCR, Injection-Prüfung, Feldvorschlag mit qwen3:8b) | ~14 min |
| Frage mit Quellen | ~3,5 min |
| Agent-Auftrag mit Vorschlag | ~8 min |
Embedding (bge-m3) | ~10 s |
Bekannte Grenzen von qwen3:8b im Rundgang: Den Arztbrief stufte es als „Sonstiges“ ein (Docling liefert die Tabelle als Fließtext), und auf die Frage kam keine Antwort mit gültigen Quellenangaben. Die App zeigt dann „keine belegte Antwort“ statt einer unbelegten.
qwen3:8b schreibt dort etwa 1,3 Tokens/s. Deshalb wartet der lokale Modus länger als der öffentliche (OLLAMA_TIMEOUT_SECONDS, PIPELINE_STEP_SECONDS, AGENT_MAX_SECONDS, API_WAIT_SECONDS, siehe Konfiguration). Der Agent bekommt sein Token lokal selbst signiert, weil Keycloak beim Token Exchange kein act ausstellt (ADR 0012).
docs/architecture/architecture.mddocs/specs/docs/security/threat-model.mddocs/projektbeschreibung.md – Text ändern, dann make project-description (kopiert ihn in die App); Bilder neu mit make screens