Przejdź do głównej zawartości

AI Assistants

Specjalizowani asystenci AI z dedykowanymi promptami i kontekstem klinicznym.

Na tej stronie

AI Assistants to specjalizowane tryby AI dostosowane do konkretnych scenariuszy klinicznych. Każdy specjalista ma dedykowany system prompt i kontekst.


SpecialistFocusUse Case
GeneralOgólny asystentPytania ogólne
DermatologySkóra, sierśćProblemy dermatologiczne
CardiologySerce, układ krążeniaProblemy kardiologiczne
OrthopedicsKości, stawyKulawizny, urazy
EmergencyNagłe przypadkiTriaging, pierwsza pomoc
NutritionDieta, żywienieZalecenia dietetyczne

flowchart TB
subgraph Selection["Specialist Selection"]
Selector[Specialist Selector]
Tabs[Specialist Tabs]
end
subgraph Host["AISpecialistHost"]
Context[Build Context]
SystemPrompt[Load System Prompt]
Chat[Chat Interface]
end
subgraph Backend
UnifiedAI[unified_ai_chat]
end
Selection --> Host
Host --> Context
Context --> SystemPrompt
SystemPrompt --> Chat
Chat --> UnifiedAI

Komponent: AISpecialistHost

interface AISpecialistHostProps {
specialist: SpecialistType;
visitId?: string;
patientId?: string;
onClose: () => void;
}
// Usage
<AISpecialistHost
specialist="dermatology"
visitId={currentVisitId}
patientId={selectedPatient?.patient_id}
/>

Każdy specjalista ma dedykowany prompt:

Jesteś asystentem weterynaryjnym. Pomagasz lekarzom w codziennej pracy.
Odpowiadaj rzeczowo i profesjonalnie. Jeśli nie jesteś pewien, powiedz o tym.
Jesteś specjalistą dermatologii weterynaryjnej. Skupiasz się na:
- Chorobach skóry (atopia, alergie, infekcje)
- Problemach z sierścią (wypadanie, świąd)
- Zmianach skórnych (guzy, owrzodzenia)
Przy analizie pytaj o: lokalizację zmian, czas trwania, świąd, dietę.
Jesteś specjalistą medycyny ratunkowej. Priorytetem jest:
1. Ocena stanu zagrożenia życia
2. Triaging (ABC - airway, breathing, circulation)
3. Natychmiastowe działania ratunkowe
ZAWSZE pytaj o: stan świadomości, oddech, krwawienie, uraz.

// Build specialist context
function buildSpecialistContext(
specialist: SpecialistType,
visit?: Visit,
patient?: Patient
): SpecialistContext {
return {
systemPrompt: SPECIALIST_PROMPTS[specialist],
visitContext: visit ? {
type: visit.visit_type,
transcript: visit.transcript,
soap: visit.soap_subjective,
} : undefined,
patientContext: patient ? {
name: patient.name,
species: patient.species,
breed: patient.breed,
age: calculateAge(patient.birth_date),
medicalHistory: patient.medical_conditions,
} : undefined,
};
}

┌─────────────────────────────────────────────┐
│ AI Specialists │
├─────────────────────────────────────────────┤
│ [General] [Derma] [Cardio] [Ortho] [Emerg] │
├─────────────────────────────────────────────┤
│ │
│ 🩺 Dermatology Specialist │
│ │
│ Aktywny pacjent: Burek (pies, 5 lat) │
│ │
│ ───────────────────────────────────────── │
│ │
│ [Chat messages...] │
│ │
├─────────────────────────────────────────────┤
│ [Ask about skin condition...] [Send] │
└─────────────────────────────────────────────┘

Specjaliści mogą być wywoływani z kontekstem wizyty:

// From RightPanel in Visit Editor
const openSpecialist = (type: SpecialistType) => {
setActiveSpecialist(type);
setSpecialistContext({
visitId: selectedVisit.id,
transcript: selectedVisit.transcript,
patientData: selectedPatient,
});
};

// Preserve context when switching
const handleSpecialistChange = (newSpecialist: SpecialistType) => {
// Save current chat
saveDraft(currentSpecialist, messages);
// Load new specialist draft
const draft = loadDraft(newSpecialist);
setActiveSpecialist(newSpecialist);
setMessages(draft || []);
};

Specjalny agent do notatek:

useNotesAgent.ts
const {
generateNotes,
isGenerating,
progress,
} = useNotesAgent();
// Generate clinical notes
await generateNotes({
visitId,
patientData,
visitData,
format: 'soap', // or 'narrative'
});