1.inquiry-user-story.ts 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { AgentTaskStep } from 'src/agent/agent.task';
  2. import { getUserInput } from 'src/agent/agent.input';
  3. import { ModalController } from '@ionic/angular/standalone';
  4. import { FmodeChatCompletion } from 'fmode-ng';
  5. import { extactAndParseJsonFromString } from 'src/agent/agent.json';
  6. export function TaskInqueryUserStory(options:{
  7. modalCtrl:ModalController
  8. shareData:any}
  9. ):AgentTaskStep{
  10. let task1 = new AgentTaskStep({title:"导诊:根据患者描述导诊对应科室",shareData:options.shareData})
  11. task1.handle = ()=>{
  12. return new Promise(async (resolve,reject)=>{
  13. // 获取用户输入的诗词
  14. let userInput = await getUserInput(options.modalCtrl,{fieldsArray:[
  15. {name:"症状口述",type:"text",desc:"描述下感觉到的症状或不适。"}
  16. ]});
  17. if(!userInput?.['症状口述']){
  18. task1.error = "无症状口述,无法判断科室"
  19. resolve(false);
  20. }
  21. // 文本生成
  22. let PromptTemplate = `您是一名专业的医护人员,在门诊大厅负责导诊服务,请您根据患者的症状口述,为其选择合适的科室进行挂号。
  23. 患者症状口述:${userInput['症状口述']}
  24. 结果以JSON格式表示:
  25. 症状名称为具体的症状,症状描述为用户的感受,持续时间若没有直接说,可以写近期即可。
  26. {
  27. "keshi":"科室名称",
  28. "sympList":[
  29. {"title":"症状名称","desc":"症状描述","duration":"持续时间"}
  30. ]
  31. }
  32. `
  33. let completion = new FmodeChatCompletion([
  34. {role:"system",content:""},
  35. {role:"user",content:PromptTemplate}
  36. ])
  37. completion.sendCompletion().subscribe((message:any)=>{
  38. if(task1.progress < 0.5){
  39. task1.progress += 0.1
  40. }
  41. if(task1.progress >= 0.5 && task1.progress <= 0.9){
  42. task1.progress += 0.01
  43. }
  44. if(task1.progress >= 0.9){
  45. task1.progress += 0.001
  46. }
  47. // 打印消息体
  48. console.log(message.content)
  49. // 赋值消息内容给组件内属性
  50. if(message.complete){ // 判断message为完成状态,则设置isComplete为完成
  51. options.shareData.userStory = extactAndParseJsonFromString(message.content)
  52. options.shareData.userStory['症状口述'] = userInput['症状口述']
  53. task1.progress = 1
  54. resolve(true)
  55. }
  56. })
  57. })
  58. }
  59. return task1
  60. }