Browse Source

refactor:designed all tasks.

s202226701053 6 months ago
parent
commit
47a6e0fee0

+ 42 - 0
E-Cover-app/src/agent/tasks/generate/generate-picture.ts

@@ -0,0 +1,42 @@
+import { ModalController } from "@ionic/angular";
+import { ImagineWork, DalleOptions } from 'fmode-ng';
+import { AgentTaskStep } from "src/agent/agent.task";
+
+export function TaskGeneratePicture(options: {
+    modalCtrl: ModalController
+    shareData: any
+}
+): AgentTaskStep {
+    let task3 = new AgentTaskStep({ title: "预览图片生成", shareData: options.shareData.userProfile })
+    task3.handle = () => {
+        console.log("任务3:生成预览图片(Picture)执行中...");
+        return new Promise(resolve => {
+            // let userInput = await getUserInput(options.modalCtrl,{fieldsArray:[
+            //   {name:"绘图要求",type:"text",desc:"画风、构图等等"}
+            // ]});
+            // console.log(userInput)
+            let imagineWork = new ImagineWork();
+            // 图片生成
+            const designPrompt = JSON.stringify(options.shareData.designPrompt);
+            let PicturePrompt = `您是一名专业的服装画师,请根据客户的身高、体重等数据,精准地画出穿搭效果图。
+                以下是用户的数据:${designPrompt}`
+            console.log(PicturePrompt);
+            let imgOptions: DalleOptions = { prompt: PicturePrompt }
+            let countDownInt = setInterval(() => {
+                task3.progress += 0.01
+            }, 1000)
+            imagineWork?.draw(imgOptions).subscribe((work: any) => {
+                console.log("imagineWork", work?.toJSON())
+                console.log("images", work?.get("images"))
+                if (work?.get("images")?.length) {
+                    options.shareData.images = work?.get("images");
+                    clearInterval(countDownInt);
+                    task3.progress = 1;
+                    resolve(true);
+                }
+            })
+        })
+    }
+    return task3;
+}
+

+ 63 - 0
E-Cover-app/src/agent/tasks/generate/generate-prompt.ts

@@ -0,0 +1,63 @@
+import { ModalController } from "@ionic/angular";
+import { FmodeChatCompletion } from "fmode-ng";
+import { extactAndParseJsonFromString } from "src/agent/agent.json";
+import { AgentTaskStep } from "src/agent/agent.task";
+
+export function TaskGeneratePrompt(options: {
+    modalCtrl: ModalController
+    shareData: any
+}
+): AgentTaskStep {
+    let task2 = new AgentTaskStep({ title: "穿搭思路生成", shareData: options.shareData.userProfile })
+    task2.handle = () => {
+        console.log("任务2:穿搭思路生成(Prompt)执行中...");
+        return new Promise(async (resolve, reject) => {
+            //获取当前任务集共享数据:userProfile
+            const userProfileJson = options.shareData.userProfileJson;
+
+            let PromptTemplate = `您是一名专业的服装搭配师,根据客户的身高、体重等数据,为客户推荐适合TA的穿搭方案。
+            客户的要求如下:${userProfileJson}
+            结果以JSON格式表示:(以下是JSON格式的参考方案)
+            {
+                "schemeName":"方案名(例如:夏日小清新)",
+                "gender":"性别",
+                "age":"年龄",
+                ......
+                (传入的json中有什么属性就补上什么)
+                "schemeList":{
+                    "上衣":["name":"上衣特征描述(简洁,例如:轻薄短袖衬衫)","desc":"穿搭思路描述(具体,例如:选择一款轻薄透气的短袖衬衫,颜色可以是浅蓝色或淡灰色,搭配细条纹或小格纹图案,以增加层次感。衬衫的剪裁要稍微宽松,以便于活动,适合办公室环境。)"],
+                    "下装":["name":"下装特征描述","desc":"穿搭思路描述"],
+                    ......
+                    (身上所有的衣服从里到外全部写出来加入schemeList中,例如冬季穿衣较多,从里到外有内衬衣、毛衣、夹克、棉袄、外套等。若部分有就将其部分写出来。
+                    还有不要写笼统的“上衣”“下装”“配饰”等词条,要写例如“裤子”“棉毛衫”“项链”“围巾”等具体的服装类型的词条)
+                }
+            }
+            `;
+            let completion = new FmodeChatCompletion([
+                { role: "system", content: "" },
+                { role: "user", content: PromptTemplate }
+            ])
+            completion.sendCompletion().subscribe((message: any) => {
+                if (task2.progress < 0.5) {
+                    task2.progress += 0.1
+                }
+                if (task2.progress >= 0.5 && task2.progress <= 0.9) {
+                    task2.progress += 0.01
+                }
+                if (task2.progress >= 0.9) {
+                    task2.progress += 0.001
+                }
+                // 打印消息
+                console.log(message.content)
+                // 赋值消息内容给任务集共享数据
+                if(message.complete){ // 判断message为完成状态,则设置isComplete为完成
+                options.shareData.designPrompt=extactAndParseJsonFromString(message.content)
+                task2.progress = 1;
+                console.log(options.shareData);
+                resolve(true);
+                }
+            })
+        })
+    }
+    return task2;
+}

+ 13 - 20
E-Cover-app/src/agent/tasks/generate/generate-user-valiate.ts

@@ -10,6 +10,7 @@ export function TaskGenerateUserValiate(options: {
 ): AgentTaskStep {
     let task1 = new AgentTaskStep({ title: "检测输入合法性", shareData: options.shareData.userProfile })
     task1.handle = () => {
+        console.log("任务1:检测输入合法性(userValiate)执行中...");
         return new Promise(async (resolve, reject) => {
             //获取当前任务集共享数据:userProfile
             let userProfile = options.shareData.userProfile
@@ -22,25 +23,11 @@ export function TaskGenerateUserValiate(options: {
             //若必填项已填写,任务继续
             //穿搭提示词生成
             const userProfileJson=JSON.stringify(options.shareData.userProfile,null,);
-            console.log(userProfileJson)
-            let PromptTemplate = `您是一名专业的服装搭配师,根据客户的身高、体重等数据,为客户推荐适合TA的穿搭方案。
-            客户的要求如下:${userProfileJson}
-            结果以JSON格式表示:(以下是JSON格式的参考方案)
-            {
-                "schemeName":"方案名(例如:夏日小清新)",
-                "gender":"性别",
-                "age":"年龄",
-                ......
-                (传入的json中有什么属性就补上什么)
-                "schemeList":{
-                    "上衣":["name":"上衣特征描述(简洁,例如:轻薄短袖衬衫)","desc":"穿搭思路描述(具体,例如:选择一款轻薄透气的短袖衬衫,颜色可以是浅蓝色或淡灰色,搭配细条纹或小格纹图案,以增加层次感。衬衫的剪裁要稍微宽松,以便于活动,适合办公室环境。)"],
-                    "下装":["name":"下装特征描述","desc":"穿搭思路描述"],
-                    ......
-                    (身上所有的衣服从里到外全部写出来加入schemeList中,例如冬季穿衣较多,从里到外有内衬衣、毛衣、夹克、棉袄、外套等。若部分有就将其部分写出来
-                    还有不要写笼统的“上衣”“下装”“配饰”等词条,要写例如“裤子”“棉毛衫”“项链”“围巾”等具体的服装类型的词条)
-                }
-            }
-            `
+            console.log("接受输入:"+userProfileJson);
+            let PromptTemplate = `您是一名专业的语境分析师,现传入数据如下:${userProfileJson}。
+            分析其中的customDesc字段,如果与个性化服装搭配的主题无关,则只需要给我返回[无关],若有关,则返回[有关]。
+            当检测customDesc为空,即没有输入时,仍返回[有关]。`
+
             let completion = new FmodeChatCompletion([
                 { role: "system", content: "" },
                 { role: "user", content: PromptTemplate }
@@ -59,7 +46,13 @@ export function TaskGenerateUserValiate(options: {
                 console.log(message.content)
                 // 赋值消息内容给任务集共享数据
                 if (message.complete) {
-                    options.shareData = extactAndParseJsonFromString(message.content)
+                    if (message.content == "[无关]") {
+                        task1.progress = 1
+                        task1.error = "请勿输入与穿搭主题无关的内容!"
+                        resolve(false);
+                        return;
+                    }
+                    options.shareData.userProfileJson = userProfileJson
                     task1.progress = 1
                     console.log(options.shareData)
                     resolve(true);

+ 0 - 64
E-Cover-app/src/agent/tasks/inquiry/1.inquiry-user-story.ts

@@ -1,64 +0,0 @@
-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
-}

+ 0 - 79
E-Cover-app/src/agent/tasks/inquiry/2.inquiry-doctor-question.ts

@@ -1,79 +0,0 @@
-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 TaskInqueryDoctorQuestion(options:{
-    modalCtrl:ModalController
-    shareData:any}
-    ):AgentTaskStep{
-        /**
-         shareData.userStory // 已经拥有的用户描述数据
-         {
-                  "keshi": "神经内科",
-                  "sympList": [
-                      {
-                          "title": "偏头痛",
-                          "desc": "持续了2天的偏头疼",
-                          "duration": "2天"
-                      },
-                      {
-                          "title": "发冷",
-                          "desc": "感觉发冷,已经有一天",
-                          "duration": "1天"
-                      }
-                  ]
-              }
-         */
-        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 = `您是一名专业的${options.shareData.userStory.keshi}主任医生,患者简单描述了一下他的情况,请您思考下还有哪些需要询问。
-                症状口述:${options.shareData.userStory['症状口述']}
-                结果以JSON格式表示:
-                {
-                    "questionList":[
-                        {"title":"问题标题","desc":"问题描述"}
-                    ]
-                }
-                `
-                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.7){
-                            task1.progress += 0.001
-                        }
-                        // 打印消息体
-                        console.log(message.content)
-                        // 赋值消息内容给组件内属性
-                        if(message.complete){ // 判断message为完成状态,则设置isComplete为完成
-                            options.shareData.userStory.questionList = extactAndParseJsonFromString(message.content).questionList || []
-                            task1.progress = 1
-                            resolve(true)
-                        }
-                })
-            })
-
-        }
-        return task1
-}

+ 0 - 141
E-Cover-app/src/agent/tasks/inquiry/3.inquiry-user-answer.ts

@@ -1,141 +0,0 @@
-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 TaskInqueryUserAnswer(options:{
-    modalCtrl:ModalController
-    shareData:any}
-    ):AgentTaskStep{
-        /**
-         shareData.userStory // 已经拥有的医生主动询问
-         {
-            "questionList": [
-                {
-                    "title": "头痛的性质",
-                    "desc": "请问您的偏头痛是怎样的感觉?是刺痛、跳动还是压迫感?"
-                },
-            ]
-        }
-         */
-        let task1 = new AgentTaskStep({title:"诊断:患者回答具体内容后,医生给出诊断结果",shareData:options.shareData})
-        task1.handle = ()=>{
-            return new Promise(async (resolve,reject)=>{
-                // 获取用户输入的问题清单
-                let questionList = options.shareData.userStory.questionList.map((item:any)=>{return {name:item.title,desc:item.desc,type:"text"}})
-                
-                let userInputResult = await getUserInput(options.modalCtrl,{fieldsArray:questionList});
-                console.log(userInputResult)
-                questionList.forEach((question:any)=>{
-                    question.answer = userInputResult[question.name]
-                })
-            
-                // 文本生成
-                let qaContent = options.shareData.userStory.questionList.map((item:any)=>`医生问:${item.title},${item.desc}\n患者答:${item.answer||"没回答"}`).join("\n")
-                let PromptTemplate = `您是一名专业的${options.shareData.userStory.keshi}主任医生,根据具体的询问,给出初步诊断。
-                症状口述:${options.shareData.userStory['症状口述']}
-                具体询问:${qaContent}
-                结果以JSON格式表示:
-                症状名称为具体的症状,症状描述为用户的感受,持续时间若没有直接说,可以写近期即可。
-                {
-                    "title":"病例标题",
-                    "desc":"病情概括",
-                    "content":"给出完整的治疗方案和建议"
-                }
-                `
-                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.diagResult = extactAndParseJsonFromString(message.content)
-                            task1.progress = 1
-                            resolve(true)
-                        }
-                })
-            })
-
-        }
-        return task1
-}
-
-
-const TestShareData = {
-userStory : {
-  "keshi": "神经内科",
-  "sympList": [
-      {
-          "title": "偏头疼",
-          "desc": "已经持续了2天了",
-          "duration": "2天"
-      },
-      {
-          "title": "发冷",
-          "desc": "感觉已经有一天",
-          "duration": "1天"
-      }
-  ],
-  "症状口述": "偏头疼已经持续了2天了,发冷感觉已经有一天。",
-  "questionList": [
-      {
-          "title": "头痛的性质",
-          "desc": "请描述您的头痛是搏动性、压迫性还是其他类型?",
-          "answer":"压迫性头疼"
-      },
-      {
-          "title": "头痛的部位",
-          "desc": "您的头痛主要集中在头部的哪个区域?",
-          "answer":"左侧头疼"
-      },
-      {
-          "title": "伴随症状",
-          "desc": "除了头痛和发冷,您还有其他的症状吗?例如恶心、呕吐、视力模糊或对光敏感等?",
-          "answer":"有点恶心但是没有呕吐"
-      },
-      {
-          "title": "发冷的性质",
-          "desc": "您感到发冷时是否伴随有发热、出汗或其他症状?",
-          "answer":"没有"
-      },
-      {
-          "title": "既往病史",
-          "desc": "您是否有偏头痛或其他头痛的病史?",
-          "answer":"没有"
-      },
-      {
-          "title": "生活习惯",
-          "desc": "您最近的生活习惯是否有变化?例如睡眠不足、压力增大或饮食不规律?",
-          "answer":"经常熬夜,学习压力大"
-      },
-      {
-          "title": "药物使用",
-          "desc": "您是否有服用任何药物来缓解头痛或其他症状?",
-          "answer":"没有"
-      },
-      {
-          "title": "家族病史",
-          "desc": "您的家族中是否有人有类似的头痛或神经系统疾病史?",
-          "answer":"没有"
-      },
-      {
-          "title": "过敏史",
-          "desc": "您是否有药物或其他物质的过敏史?",
-          "answer":"没有"
-      }
-  ]
-}
-}

+ 0 - 55
E-Cover-app/src/agent/tasks/poem/poem-desc.ts

@@ -1,55 +0,0 @@
-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';
-
-export function TaskPoemPictureDesc(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:"诗文句子或段落"}
-                ]});
-                console.log("已获取用户输入:",userInput)
-                if(userInput){
-                    console.log("已获取诗文内容:",userInput['诗文内容'])
-                }
-                if(!userInput?.['诗文内容']){
-                    task1.error = "缺少诗文内容,请重新开始"
-                    resolve(false);
-                }
-
-                    // 文本生成
-                let PromptTemplate = `您是一名专业的美术画家,请您根据古诗文的内容,将其描述的画面、场景、人物、物品等用最简短的语言表达,直接写出画面,并且以中国的古风意境为主
-                诗文如下:
-                ${userInput['诗文内容']}
-                `
-                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.01
-                        }
-                        // 打印消息体
-                        // console.log(message.content)
-                        // 赋值消息内容给组件内属性
-                        options.shareData.PictureDescResult = message.content
-                        if(message.complete){ // 判断message为完成状态,则设置isComplete为完成
-                            task1.progress = 1
-                            resolve(true)
-                        }
-                })
-            })
-
-        }
-        return task1
-}

+ 0 - 43
E-Cover-app/src/agent/tasks/poem/poem-picture.ts

@@ -1,43 +0,0 @@
-import { ModalController } from '@ionic/angular/standalone';
-import { AgentTaskStep } from 'src/agent/agent.task';
-import { ImagineWork, DalleOptions } from 'fmode-ng';
-
-
-export function TaskPoemPictureCreate(options:{
-    modalCtrl:ModalController
-    shareData:any}):AgentTaskStep{
-    let task2 = new AgentTaskStep({title:"意境绘制",shareData:options.shareData})
-    task2.handle = ()=>{
-      return new Promise(resolve=>{
-        // let userInput = await getUserInput(options.modalCtrl,{fieldsArray:[
-        //   {name:"绘图要求",type:"text",desc:"画风、构图等等"}
-        // ]});
-        // console.log(userInput)
-        console.log("意境绘制:执行过程")
-
-        if(!options.shareData.PictureDescResult){
-          task2.error = "缺少古风描述结果,请重新执行。"
-          resolve(false)
-        }
-        let imagineWork = new ImagineWork();
-        // 图片生成
-        let PicturePrompt = `${options.shareData.PictureDescResult}\n风格:中国古风。画面不带任何文字。`
-        let imgOptions:DalleOptions = {prompt:PicturePrompt}
-        let countDownInt = setInterval(()=>{
-          task2.progress += 0.01
-        },1000)
-        imagineWork?.draw(imgOptions).subscribe((work:any)=>{
-            console.log("imagineWork",work?.toJSON())
-            console.log("images",work?.get("images"))
-            if(work?.get("images")?.length){
-              options.shareData.images = work?.get("images");
-              clearInterval(countDownInt);
-              task2.progress = 1
-              resolve(true)
-            }
-        })
-      })
-
-    }
-    return task2
-}

+ 30 - 24
E-Cover-app/src/app/generate-option/generate-option.component.html

@@ -59,6 +59,12 @@
   <ion-button (click)="sendMsgAndGoGenerateResult()">
     生成
   </ion-button>
+  <!-- 诗词意境绘画生成结果 -->
+  @if(shareData.images) {
+  @for(imageUrl of shareData.images;track imageUrl){
+  <img [src]="imageUrl" alt="" srcset="">
+  }
+  }
 </ion-content>
 <div id="container">
   <div id="popover-container">
@@ -66,31 +72,31 @@
     <p>正在生成,请耐心等待...</p>
     <ul>
       @for(step of taskList;track step.title;){
-        <div>
-          <!-- 待开始 -->
-          @if(step.progress==0 && !step.error){
-            <ion-icon name="radio-button-off-outline"></ion-icon>
-          }
-          <!-- 进行中 -->
-          @if(step.progress!=0 && step.progress!=1){
-            <ion-icon name="reload-outline"></ion-icon>
-          }
-          <!-- 已完成 -->
-          @if(step.progress==1){
-            <ion-icon name="checkmark-circle-outline"></ion-icon>
-          }
-          <!-- 已出错 -->
-          @if(step.error){
-            <ion-icon name="close-circle-outline"></ion-icon>
-          }
-          {{step.title}}  @if(step.progress){<span>{{step.progress * 100 | number:"2.0-0"}}%</span>}
-    
-          @if(step.error){
-            <span style="color:red;">{{step.error}}</span>
-          }
-        </div>   
+      <div>
+        <!-- 待开始 -->
+        @if(step.progress==0 && !step.error){
+        <ion-icon name="radio-button-off-outline"></ion-icon>
+        }
+        <!-- 进行中 -->
+        @if(step.progress!=0 && step.progress!=1){
+        <ion-icon name="reload-outline"></ion-icon>
+        }
+        <!-- 已完成 -->
+        @if(step.progress==1){
+        <ion-icon name="checkmark-circle-outline"></ion-icon>
+        }
+        <!-- 已出错 -->
+        @if(step.error){
+        <ion-icon name="close-circle-outline"></ion-icon>
+        }
+        {{step.title}} @if(step.progress){<span>{{step.progress * 100 | number:"2.0-0"}}%</span>}
+
+        @if(step.error){
+        <span style="color:red;">{{step.error}}</span>
+        }
+      </div>
       }
-      </ul>
+    </ul>
     <ion-button (click)="hidePopover()">确定</ion-button>
   </div>
 </div>

+ 15 - 8
E-Cover-app/src/app/generate-option/generate-option.component.ts

@@ -8,6 +8,8 @@ import { FormsModule } from '@angular/forms';
 import { AgentTaskStep } from 'src/agent/agent.task';
 import { TaskGenerateUserValiate } from 'src/agent/tasks/generate/generate-user-valiate';
 import { TaskExecutor } from 'src/agent/agent.start';
+import { TaskGeneratePrompt } from 'src/agent/tasks/generate/generate-prompt';
+import { TaskGeneratePicture } from 'src/agent/tasks/generate/generate-picture';
 addIcons({ 'arrow-back-outline': arrowBackOutline, radioButtonOffOutline, closeCircleOutline, checkmarkCircleOutline, reloadOutline });
 @Component({
   selector: 'app-generate-option',
@@ -84,7 +86,7 @@ export class GenerateOptionComponent implements OnInit {
   };
   //自定义描述输入框定义变量
 
-  
+
   /**
    * @切换选项卡
    * 1.option:字典对象
@@ -213,14 +215,16 @@ export class GenerateOptionComponent implements OnInit {
    * 4.生成图片
    */
   doGenerateTask() {
-    console.log(this.userProfile);
+    console.log('生成任务开始执行');
     this.shareData.userProfile = this.userProfile;
-    let task1 = TaskGenerateUserValiate({ shareData: this.shareData, modalCtrl: this.modalCtrl })
+    //设置任务
+    let task1 = TaskGenerateUserValiate({ shareData: this.shareData, modalCtrl: this.modalCtrl });
+    let task2 = TaskGeneratePrompt({ shareData: this.shareData, modalCtrl: this.modalCtrl });
+    let task3 = TaskGeneratePicture({ shareData: this.shareData, modalCtrl: this.modalCtrl });
     //定义任务集
-    let GenerateTaskList = [task1]
+    let GenerateTaskList = [task1, task2, task3]
     this.taskList = GenerateTaskList;
-    TaskExecutor(GenerateTaskList)
-
+    TaskExecutor(GenerateTaskList);
   }
 
 
@@ -296,7 +300,8 @@ export class GenerateOptionComponent implements OnInit {
   /**
    * @提交生成判定
    */
-  submitJudge() {
+  showJudgePage() {
+    console.log("展示判断页面(加载进度)");
     let element = document.getElementById('container');
     if (element) {
       // 直接切换元素的显示状态
@@ -319,7 +324,9 @@ export class GenerateOptionComponent implements OnInit {
    * 2.调用goChatPanel方法
    */
   sendMsgAndGoGenerateResult() {
-    this.submitJudge();
+    this.showJudgePage();
+    console.log("展示当前读取到的用户信息:");
+    console.log(this.userProfile);
     this.doGenerateTask();
     //this.goChatPanel();
   }