更新
This commit is contained in:
@@ -39,4 +39,39 @@ skillExpect(($augmented[1]['content'] ?? '') === '只输出 JSON', 'original sys
|
||||
skillExpect(($augmented[2]['content'] ?? '') === $question, 'original user question is preserved');
|
||||
skillExpect(NihaixiaClinicalSkill::augmentMessages($augmented) === $augmented, 'stream retries do not duplicate the skill');
|
||||
|
||||
$source = NihaixiaClinicalSkill::knowledgeSource();
|
||||
skillExpect($source['commit'] === '270e94e637c4249dc411e54ac6715f21247de3cb', 'metadata pins the complete vendored commit');
|
||||
skillExpect($source['url'] === NihaixiaClinicalSkill::REPOSITORY_URL . '/blob/' . $source['commit'] . '/SKILL.md', 'metadata links directly to the fixed skill document');
|
||||
skillExpect($source['sections'] === ['六经速查表', '六经辨证诊断公式', '七步走辨证思维模式'], 'metadata names only the extracted sections');
|
||||
skillExpect(NihaixiaClinicalSkill::knowledgeSourceForPromptVersion('patient-longitudinal-report-v2') === null, 'legacy prompt versions do not acquire fabricated sources');
|
||||
skillExpect(NihaixiaClinicalSkill::knowledgeSourceForPromptVersion('patient-longitudinal-report-nihaixia-ancient-v4') === $source, 'new ancient-book reports retain the existing skill attribution');
|
||||
|
||||
foreach ([
|
||||
[app\adminapi\logic\tcm\DiagnosisAiLogic::class, ['report_content' => '{}']],
|
||||
[app\adminapi\logic\tcm\PatientAiReportLogic::class, ['report_json' => '{}', 'source_summary_json' => '{"diagnosis_count":2}', 'source_diagnosis_ids_json' => '[11,12]', 'source_snapshot' => 'PRIVATE PATIENT INPUT']],
|
||||
] as [$class, $row]) {
|
||||
$format = new ReflectionMethod($class, 'formatReportRow');
|
||||
$args = $class === app\adminapi\logic\tcm\DiagnosisAiLogic::class ? ['',] : [];
|
||||
$legacy = $format->invoke(null, $row + ['prompt_version' => 'report-v2'], ...$args);
|
||||
$currentVersion = $class === app\adminapi\logic\tcm\DiagnosisAiLogic::class
|
||||
? 'patient-context-case-explain-nihaixia-v3'
|
||||
: 'patient-longitudinal-report-nihaixia-v3';
|
||||
$current = $format->invoke(null, $row + ['prompt_version' => $currentVersion], ...$args);
|
||||
skillExpect($legacy['knowledge_source'] === null, $class . ' omits a claim for old reports');
|
||||
skillExpect($current['knowledge_source'] === $source, $class . ' returns a pinned source for saved skill reports');
|
||||
skillExpect(!str_contains(json_encode($current), 'PRIVATE PATIENT INPUT'), 'public report metadata does not expose the source snapshot');
|
||||
if ($class === app\adminapi\logic\tcm\PatientAiReportLogic::class) {
|
||||
skillExpect($current['source_summary'] === ['diagnosis_count' => 2], 'patient summary comes from the saved report');
|
||||
skillExpect($current['source_diagnosis_ids'] === [11, 12], 'patient source IDs come from the saved report');
|
||||
}
|
||||
}
|
||||
|
||||
$formatDiagnosis = new ReflectionMethod(app\adminapi\logic\tcm\DiagnosisAiLogic::class, 'formatReportRow');
|
||||
$currentSources = ['source_summary' => ['diagnosis_count' => 2], 'source_diagnosis_ids' => [11, 12]];
|
||||
$matching = $formatDiagnosis->invoke(null, ['case_fingerprint' => 'matching', 'report_content' => '{}'], 'matching', $currentSources);
|
||||
$stale = $formatDiagnosis->invoke(null, ['case_fingerprint' => 'old', 'report_content' => '{}'], 'matching', $currentSources);
|
||||
skillExpect($matching['source_diagnosis_ids'] === [11, 12], 'matching report exposes current source IDs');
|
||||
skillExpect($matching['source_summary'] === ['diagnosis_count' => 2], 'matching report exposes current source counts');
|
||||
skillExpect($stale['source_diagnosis_ids'] === [] && $stale['source_summary'] === [], 'stale report does not borrow current patient sources');
|
||||
|
||||
echo "Nihaixia clinical skill contract passed.\n";
|
||||
|
||||
Reference in New Issue
Block a user