Files
zyt/server/tests/NihaixiaClinicalSkillTest.php
T
2026-10-08 15:49:53 +08:00

43 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
require dirname(__DIR__) . '/vendor/autoload.php';
use app\common\service\NihaixiaClinicalSkill;
function skillExpect(bool $condition, string $message): void
{
if (!$condition) {
fwrite(STDERR, "FAIL: {$message}\n");
exit(1);
}
}
$reference = NihaixiaClinicalSkill::reference();
skillExpect(str_contains($reference, NihaixiaClinicalSkill::VERSION), 'pinned skill version is present');
skillExpect(str_contains($reference, '六经主证:太阳:'), 'reference is read from the installed six-meridian table');
skillExpect(str_contains($reference, '条件线索:太阳病(脉浮 + 头项强痛 + 恶寒)'), 'clinical clues are read from the installed diagnostic formulas');
skillExpect(str_contains($reference, '辨证步骤:定表里→分阴阳→辨寒热'), 'seven-step method is read from the installed skill');
skillExpect(str_contains($reference, '未满足关键证据时不得强行归经'), 'diagnostic clues require patient evidence');
skillExpect(str_contains($reference, '不得据此建议停用现有治疗'), 'historical cases cannot override treatment safety');
skillExpect(strlen($reference) < 3000, 'reference is bounded for staged clinical prompts');
$question = '请分析当前患者的口渴和高血糖。';
$query = NihaixiaClinicalSkill::augmentQuery($question);
skillExpect(str_contains($query, $question), 'original clinical question is preserved');
skillExpect(substr_count($query, NihaixiaClinicalSkill::VERSION) === 1, 'query receives the skill once');
skillExpect(NihaixiaClinicalSkill::augmentQuery($query) === $query, 'query retries do not duplicate the skill');
$messages = [
['role' => 'system', 'content' => '只输出 JSON'],
['role' => 'user', 'content' => $question],
];
$augmented = NihaixiaClinicalSkill::augmentMessages($messages);
skillExpect(count($augmented) === 3, 'chat messages receive one skill system reference');
skillExpect(($augmented[1]['content'] ?? '') === '只输出 JSON', 'original system format is preserved');
skillExpect(($augmented[2]['content'] ?? '') === $question, 'original user question is preserved');
skillExpect(NihaixiaClinicalSkill::augmentMessages($augmented) === $augmented, 'stream retries do not duplicate the skill');
echo "Nihaixia clinical skill contract passed.\n";