import { AgentTaskStep } from 'src/agent/agent.task'; import { getUserInput } from 'src/agent/agent.input'; import { ModalController } from '@ionic/angular/standalone'; import { FmodeChatCompletion } from 'fmode-ng'; import { extactAndParseJsonFromString } from 'src/agent/agent.json'; export function TaskInqueryUserStory(options:{ modalCtrl:ModalController shareData:any} ):AgentTaskStep{ let task1 = new AgentTaskStep({title:"导诊:根据患者描述导诊对应科室",shareData:options.shareData}) task1.handle = ()=>{ return new Promise(async (resolve,reject)=>{ // 获取用户输入的诗词 let userInput = await getUserInput(options.modalCtrl,{fieldsArray:[ {name:"症状口述",type:"text",desc:"描述下感觉到的症状或不适。"} ]}); if(!userInput?.['症状口述']){ task1.error = "无症状口述,无法判断科室" resolve(false); } // 文本生成 let PromptTemplate = `您是一名专业的医护人员,在门诊大厅负责导诊服务,请您根据患者的症状口述,为其选择合适的科室进行挂号。 患者症状口述:${userInput['症状口述']} 结果以JSON格式表示: 症状名称为具体的症状,症状描述为用户的感受,持续时间若没有直接说,可以写近期即可。 { "keshi":"科室名称", "sympList":[ {"title":"症状名称","desc":"症状描述","duration":"持续时间"} ] } ` let completion = new FmodeChatCompletion([ {role:"system",content:""}, {role:"user",content:PromptTemplate} ]) completion.sendCompletion().subscribe((message:any)=>{ if(task1.progress < 0.5){ task1.progress += 0.1 } if(task1.progress >= 0.5 && task1.progress <= 0.9){ task1.progress += 0.01 } if(task1.progress >= 0.9){ task1.progress += 0.001 } // 打印消息体 console.log(message.content) // 赋值消息内容给组件内属性 if(message.complete){ // 判断message为完成状态,则设置isComplete为完成 options.shareData.userStory = extactAndParseJsonFromString(message.content) options.shareData.userStory['症状口述'] = userInput['症状口述'] task1.progress = 1 resolve(true) } }) }) } return task1 }