Dienstag, 26 August 2025

Top 5 diese Woche

Ähnliche Tutorials

KI Hausarzt

Virtueller Hausarzt Chat

Mit dieser PHP-Datei erhältst du einen virtuellen Chat, der als erfahrener Hausarzt agiert. Nutzer können gesundheitliche Fragen stellen und erhalten ausführliche, verständliche Antworten. Die Antworten enthalten Hinweise zu Symptomen, Vorsorge, möglichen Ursachen und medizinischen Empfehlungen, ohne echte Diagnosen zu ersetzen.

Funktionen:

  • Echtzeit-Chat mit GPT-API-Anbindung
  • Ausführliche, strukturierte Antworten wie von einem Hausarzt mit jahrzehntelanger Erfahrung
  • Speicherung der Chat-Historie in einer SQLite-Datenbank
  • Anzeige der Antworten chronologisch mit Zeitstempel
  • Einfache Web-Oberfläche, sofort einsatzbereit

Hinweise:

  • Der Chat ersetzt keine ärztliche Untersuchung oder professionelle Diagnose
  • Antworten dienen nur zur Orientierung und allgemeinen Information
  • Bei akuten gesundheitlichen Problemen sollte immer ein echter Arzt konsultiert werden
<?php
define('DB_FILE', __DIR__ . '/doctor_chat.sqlite');
define('OPENAI_API_KEY', 'DEIN_OPENAI_API_KEY_HIER');

// DB für Chat-Historie
$db = new SQLite3(DB_FILE);
$db->exec("CREATE TABLE IF NOT EXISTS messages (
    id INTEGER PRIMARY KEY,
    role TEXT,
    message TEXT,
    created_at INTEGER
)");

function jsonResponse($data,$code=200){
    http_response_code($code);
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($data);
    exit;
}

function escape($str){ return htmlspecialchars($str,ENT_QUOTES,'UTF-8'); }

function callGPT($userMessage){
    $prompt = "Du bist ein erfahrener Hausarzt mit jahrzehntelanger Erfahrung. Antworte ausführlich, verständlich und freundlich. Gib Hinweise zu möglichen Ursachen, Vorsorge, Symptomen und medizinischen Empfehlungen, ohne echte Diagnosen zu ersetzen.";
    $data = [
        'model' => 'gpt-4',
        'messages' => [
            ['role'=>'system','content'=>$prompt],
            ['role'=>'user','content'=>$userMessage]
        ],
        'max_tokens' => 600,
        'temperature' => 0.3
    ];

    $ch = curl_init('https://api.openai.com/v1/chat/completions');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json',
        'Authorization: Bearer '.OPENAI_API_KEY
    ]);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    $result = curl_exec($ch);
    curl_close($ch);

    $resData = json_decode($result,true);
    return $resData['choices'][0]['message']['content'] ?? 'Fehler bei der Antwortgenerierung';
}

if($_SERVER['REQUEST_METHOD']==='POST' && isset($_GET['action']) && $_GET['action']==='send'){
    $msg = trim($_POST['message'] ?? '');
    if(!$msg) jsonResponse(['error'=>'Keine Nachricht eingegeben'],400);

    $stmt=$db->prepare('INSERT INTO messages (role,message,created_at) VALUES (:role,:message,:created_at)');
    $stmt->bindValue(':role','user',SQLITE3_TEXT);
    $stmt->bindValue(':message',$msg,SQLITE3_TEXT);
    $stmt->bindValue(':created_at',time(),SQLITE3_INTEGER);
    $stmt->execute();

    $reply = callGPT($msg);
    $stmt2=$db->prepare('INSERT INTO messages (role,message,created_at) VALUES (:role,:message,:created_at)');
    $stmt2->bindValue(':role','doctor',SQLITE3_TEXT);
    $stmt2->bindValue(':message',$reply,SQLITE3_TEXT);
    $stmt2->bindValue(':created_at',time(),SQLITE3_INTEGER);
    $stmt2->execute();

    jsonResponse(['reply'=>$reply]);
}

if(isset($_GET['action']) && $_GET['action']==='history'){
    $res = $db->query('SELECT * FROM messages ORDER BY created_at ASC');
    $msgs=[];
    while($row=$res->fetchArray(SQLITE3_ASSOC)){
        $msgs[]=[
            'role'=>$row['role'],
            'message'=>escape($row['message']),
            'time'=>date('d.m.Y H:i',$row['created_at'])
        ];
    }
    jsonResponse($msgs);
}

?>
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Dreamcodes - Virtueller Hausarzt Chat</title>
<style>
:root{--bg:#0f1724;--card:#0b1220;--accent:#7c3aed;--muted:#9aa4b2;--glass: rgba(255,255,255,0.03);}
body{font-family:Inter, sans-serif;background:linear-gradient(180deg,var(--bg),#071028);color:#e6eef8;margin:0;padding:40px;}
.container{max-width:900px;margin:0 auto}
.card{background:linear-gradient(180deg,var(--card),#071022);padding:28px;border-radius:16px;box-shadow:0 10px 30px rgba(2,6,23,0.7);margin-bottom:24px}
h1{font-size:24px;margin:0 0 8px}
.inputtext{background:transparent;border:1px solid rgba(255,255,255,0.04);padding:8px 10px;border-radius:8px;color:inherit;width:100%;margin-bottom:10px}
.btn{background:var(--accent);color:white;padding:10px 14px;border-radius:10px;border:none;cursor:pointer;font-weight:600}
.message{padding:12px;margin-bottom:12px;background:rgba(255,255,255,0.02);border-radius:10px}
.message.user{background:rgba(124,58,237,0.2)}
.message.doctor{background:rgba(43,181,140,0.2)}
.message-meta{font-size:13px;color:var(--muted)}
footer{margin-top:18px;text-align:center;color:var(--muted);font-size:13px}
.thin{opacity:0.8}
</style>
</head>
<body>
<div class="container">
<div class="card">
<h1>Dreamcodes - Virtueller Hausarzt Chat</h1>
<textarea id="userMsg" class="inputtext" placeholder="Schreibe deine gesundheitliche Frage hier..."></textarea>
<button id="sendBtn" class="btn">Absenden</button>
<div id="error" style="color:#ffb4b4;margin-top:10px"></div>
</div>
<div id="chat"></div>
<footer><div class="thin">Powered by Dreamcodes.NET</div></footer>
</div>
<script>
async function fetchHistory(){
    const resp=await fetch('?action=history');
    const data=await resp.json();
    const chat=document.getElementById('chat');
    chat.innerHTML='';
    data.forEach(m=>{
        const div=document.createElement('div');
        div.className='card message '+m.role;
        div.innerHTML=`<div class='message-meta'>${m.role==='user'?'Du':'Hausarzt'} - ${m.time}</div><p>${m.message}</p>`;
        chat.appendChild(div);
    });
    chat.scrollTop=chat.scrollHeight;
}

document.getElementById('sendBtn').addEventListener('click',async()=>{
    const msg=document.getElementById('userMsg').value;
    if(!msg) return;
    document.getElementById('error').textContent='';
    const fd=new FormData(); fd.append('message',msg);
    try{
        const resp=await fetch('?action=send',{method:'POST',body:fd});
        const data=await resp.json();
        if(data.error){ document.getElementById('error').textContent=data.error; return; }
        document.getElementById('userMsg').value='';
        fetchHistory();
    }catch(e){document.getElementById('error').textContent='Netzwerkfehler'}
});

fetchHistory();
</script>
</body>
</html>
Vorheriges Tutorial
Nächstes Tutorial

Hier etwas für dich dabei?