|
@@ -9,6 +9,9 @@ import { TriageTask } from './consult-tasks/consult-tasks';
|
|
import { SymptomInputModalComponent } from './consult-tasks/symptom-input/symptom-input.modal';
|
|
import { SymptomInputModalComponent } from './consult-tasks/symptom-input/symptom-input.modal';
|
|
import { getUserForm } from '../lib/tasks/task-user-form/get-user-form';
|
|
import { getUserForm } from '../lib/tasks/task-user-form/get-user-form';
|
|
import { JobIntentionTask, UserBasicInfoTask, UserInterestsTask } from './job-workflow/task.job';
|
|
import { JobIntentionTask, UserBasicInfoTask, UserInterestsTask } from './job-workflow/task.job';
|
|
|
|
+import { TaskUserForm } from '../lib/tasks/task-user-form/task-user-form';
|
|
|
|
+import { TaskCompletionJson } from '../lib/tasks/task-completion-json/task-completion-json';
|
|
|
|
+import { TaskCompletionText } from '../lib/tasks/task-completion-text/task-completion-text';
|
|
|
|
|
|
@Component({
|
|
@Component({
|
|
selector: 'app-page-flow-test',
|
|
selector: 'app-page-flow-test',
|
|
@@ -54,6 +57,200 @@ export class PageFlowTestComponent {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ async consultWorkflow() {
|
|
|
|
+ const tasks = [
|
|
|
|
+ // 描述病情任务(用户信息采集)
|
|
|
|
+ new TaskUserForm({
|
|
|
|
+ title: '病情描述',
|
|
|
|
+ modalCtrl: this.modalCtrl,
|
|
|
|
+ fieldList: [
|
|
|
|
+ {
|
|
|
|
+ type: "String",
|
|
|
|
+ key: "userDesc",
|
|
|
|
+ name: "病情描述",
|
|
|
|
+ required: true,
|
|
|
|
+ placeholder: "请详细描述您的症状、持续时间和不适感"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ type: "String",
|
|
|
|
+ key: "duration",
|
|
|
|
+ name: "持续时间",
|
|
|
|
+ required: false,
|
|
|
|
+ placeholder: "例如:3天、2周等"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ type: "Radio",
|
|
|
|
+ key: "painLevel",
|
|
|
|
+ name: "疼痛程度",
|
|
|
|
+ required: false,
|
|
|
|
+ options: [
|
|
|
|
+ { label: "无疼痛", value: "none" },
|
|
|
|
+ { label: "轻度", value: "mild" },
|
|
|
|
+ { label: "中度", value: "moderate" },
|
|
|
|
+ { label: "重度", value: "severe" }
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ ],
|
|
|
|
+ initialData: {}
|
|
|
|
+ }),
|
|
|
|
+
|
|
|
|
+ // 智能分诊任务(AI分析)
|
|
|
|
+ new TaskCompletionJson({
|
|
|
|
+ title: '智能分诊',
|
|
|
|
+ promptTemplate: `您是一名专业的分诊护士,根据患者描述推荐最合适的科室。严格按照以下JSON格式返回:
|
|
|
|
+ {
|
|
|
|
+ "department": "科室名称",
|
|
|
|
+ "reason": "分诊理由(50字以内)"
|
|
|
|
+ }
|
|
|
|
+ 患者主诉:{{userDesc}}
|
|
|
|
+ 持续时间:{{duration}}
|
|
|
|
+ 疼痛程度:{{painLevel}}`,
|
|
|
|
+ input: [
|
|
|
|
+ { name: 'userDesc', type: 'string', required: true },
|
|
|
|
+ { name: 'duration', type: 'string', required: false },
|
|
|
|
+ { name: 'painLevel', type: 'string', required: false }
|
|
|
|
+ ],
|
|
|
|
+ output: [
|
|
|
|
+ { name: 'department', type: 'string', required: true },
|
|
|
|
+ { name: 'reason', type: 'string' }
|
|
|
|
+ ]
|
|
|
|
+ }),
|
|
|
|
+ // 2. 问诊信息收集
|
|
|
|
+ new TaskUserForm({
|
|
|
|
+ title: '详细问诊',
|
|
|
|
+ modalCtrl: this.modalCtrl,
|
|
|
|
+ fieldList: [
|
|
|
|
+ {
|
|
|
|
+ type: "TextArea", key: "symptoms", name: "详细症状", required: true,
|
|
|
|
+ placeholder: "请详细描述您的症状、部位、性质和变化情况"
|
|
|
|
+ },
|
|
|
|
+ { type: "String", key: "medicalHistory", name: "既往病史", required: false },
|
|
|
|
+ { type: "String", key: "allergies", name: "过敏史", required: false },
|
|
|
|
+ { type: "String", key: "medications", name: "当前用药", required: false },
|
|
|
|
+ {
|
|
|
|
+ type: "Radio", key: "needTests", name: "是否需要检查", required: true,
|
|
|
|
+ options: [
|
|
|
|
+ { label: "需要", value: true },
|
|
|
|
+ { label: "不需要", value: false }
|
|
|
|
+ ]
|
|
|
|
+ }
|
|
|
|
+ ],
|
|
|
|
+ initialData: {}
|
|
|
|
+ }),
|
|
|
|
+
|
|
|
|
+ // 3. 检查建议生成(条件性任务)
|
|
|
|
+ new TaskCompletionText({
|
|
|
|
+ title: '检查建议',
|
|
|
|
+ promptTemplate: `作为专业医生,根据以下问诊信息为患者推荐适当的检查项目:
|
|
|
|
+ 症状描述:{{symptoms}}
|
|
|
|
+ 既往病史:{{medicalHistory || '无'}}
|
|
|
|
+ 过敏史:{{allergies || '无'}}
|
|
|
|
+ 当前用药:{{medications || '无'}}
|
|
|
|
+
|
|
|
|
+ 请列出建议的检查项目,说明每项检查的目的,并用通俗语言解释检查过程。`,
|
|
|
|
+ outputProperty: "testRecommendations",
|
|
|
|
+ inputVariables: ["symptoms", "medicalHistory", "allergies", "medications"],
|
|
|
|
+ modelOptions: {
|
|
|
|
+ temperature: 0.3,
|
|
|
|
+ maxTokens: 300
|
|
|
|
+ }
|
|
|
|
+ }),
|
|
|
|
+
|
|
|
|
+ new TaskUserForm({
|
|
|
|
+ title: '检查结果录入',
|
|
|
|
+ modalCtrl: this.modalCtrl,
|
|
|
|
+ fieldList: [
|
|
|
|
+ {
|
|
|
|
+ type: "TextArea",
|
|
|
|
+ key: "testResults",
|
|
|
|
+ name: "检查结果",
|
|
|
|
+ required: true,
|
|
|
|
+ placeholder: "请粘贴或输入您的检查报告结果(包括各项指标和参考值)"
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ type: "DatePicker",
|
|
|
|
+ key: "testDate",
|
|
|
|
+ name: "检查日期",
|
|
|
|
+ required: true,
|
|
|
|
+ default: new Date()
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ }),
|
|
|
|
+ // 4. 诊断与处方生成
|
|
|
|
+ new TaskCompletionJson({
|
|
|
|
+ title: '诊断与处方',
|
|
|
|
+ promptTemplate: `作为主治医生,请根据以下信息给出诊断结果和治疗方案:
|
|
|
|
+ ## 患者信息
|
|
|
|
+ 主诉:{{userDesc}}
|
|
|
|
+ 详细症状:{{symptoms}}
|
|
|
|
+ {{#if medicalHistory}}既往病史:{{medicalHistory}}{{/if}}
|
|
|
|
+ {{#if allergies}}过敏史:{{allergies}}{{/if}}
|
|
|
|
+ {{#if medications}}当前用药:{{medications}}{{/if}}
|
|
|
|
+ ## 检查信息
|
|
|
|
+ 检查日期:{{testDate}}
|
|
|
|
+ 检查结果:{{testResults}}
|
|
|
|
+
|
|
|
|
+ 请按照以下JSON格式返回...`, // 保持原有JSON格式要求
|
|
|
|
+ input: [
|
|
|
|
+ { name: 'userDesc', type: 'string', required: true },
|
|
|
|
+ { name: 'symptoms', type: 'string', required: true },
|
|
|
|
+ { name: 'medicalHistory', type: 'string', required: false },
|
|
|
|
+ { name: 'allergies', type: 'string', required: false },
|
|
|
|
+ { name: 'medications', type: 'string', required: false },
|
|
|
|
+ { name: 'testResults', type: 'string', required: false }
|
|
|
|
+ ],
|
|
|
|
+ output: [
|
|
|
|
+ { name: 'diagnosis', type: 'string', required: true },
|
|
|
|
+ { name: 'treatmentPlan', type: 'string', required: true },
|
|
|
|
+ { name: 'medications', type: 'array', required: false },
|
|
|
|
+ { name: 'followUp', type: 'string', required: false },
|
|
|
|
+ { name: 'notes', type: 'string', required: false }
|
|
|
|
+ ],
|
|
|
|
+ modelOptions: {
|
|
|
|
+ temperature: 0.1, // 低随机性确保医疗准确性
|
|
|
|
+ maxTokens: 500
|
|
|
|
+ }
|
|
|
|
+ }),
|
|
|
|
+
|
|
|
|
+ // 5. 患者教育材料生成(可选任务)
|
|
|
|
+ new TaskCompletionText({
|
|
|
|
+ title: '患者教育',
|
|
|
|
+ promptTemplate: `根据以下诊断和治疗方案,生成患者友好的教育材料:
|
|
|
|
+ 诊断:{{diagnosis}}
|
|
|
|
+ 治疗方案:{{treatmentPlan}}
|
|
|
|
+ 用药指导:{{#each medications}}- {{this.name}}: {{this.dosage}}, 用药{{this.duration}}{{/each}}
|
|
|
|
+
|
|
|
|
+ 请用通俗易懂的语言解释:
|
|
|
|
+ 1. 疾病的基本知识
|
|
|
|
+ 2. 为什么需要这个治疗方案
|
|
|
|
+ 3. 用药注意事项
|
|
|
|
+ 4. 日常生活建议
|
|
|
|
+ 5. 何时需要紧急就医`,
|
|
|
|
+ outputProperty: "patientEducation",
|
|
|
|
+ inputVariables: ["diagnosis", "treatmentPlan", "medications"],
|
|
|
|
+ modelOptions: {
|
|
|
|
+ temperature: 0.5, // 中等随机性使语言更自然
|
|
|
|
+ maxTokens: 600
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ // 创建工作流
|
|
|
|
+ const workflow = {
|
|
|
|
+ title: '门诊问诊工作流',
|
|
|
|
+ desc: '1.导诊',
|
|
|
|
+ taskList: tasks
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ this.executor.setWorkflow(workflow);
|
|
|
|
+ const modal = await this.modalCtrl.create({
|
|
|
|
+ component: FlowDisplayComponent,
|
|
|
|
+ componentProps: { executor: this.executor }
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ await modal.present();
|
|
|
|
+ await this.executor.start();
|
|
|
|
+ }
|
|
async jobWorkflow() {
|
|
async jobWorkflow() {
|
|
// 创建工作流
|
|
// 创建工作流
|
|
const workflow = {
|
|
const workflow = {
|
|
@@ -62,7 +259,7 @@ export class PageFlowTestComponent {
|
|
taskList: [
|
|
taskList: [
|
|
new UserBasicInfoTask(this.modalCtrl),
|
|
new UserBasicInfoTask(this.modalCtrl),
|
|
new JobIntentionTask(this.modalCtrl),
|
|
new JobIntentionTask(this.modalCtrl),
|
|
- new UserInterestsTask(this.modalCtrl)
|
|
|
|
|
|
+ // new UserInterestsTask(this.modalCtrl)
|
|
]
|
|
]
|
|
};
|
|
};
|
|
|
|
|