43 lines
2.3 KiB
PHP
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";
|