11wqe1 пре 11 месеци
родитељ
комит
78adeee443

+ 5 - 1
src/common/axios.config.js

@@ -21,7 +21,11 @@ axios.interceptors.request.use((config) => {
 			config.headers = {
 				'Content-Type': 'application/json',
 		}
-	 } else if (config.data && config.data[0].post == '1' && config.method === 'post') {
+	 }else if(config.url.indexOf('https://gpt.cocorobo.cn/')!=-1){
+        config.headers = {
+            'Content-Type': 'application/json',
+    }
+ } else if (config.data && config.data[0].post == '1' && config.method === 'post') {
         config.data = 'mode=' + (Object.values(config.data[0]).join(',')) //序列化post 参数
     } else if (config.method === 'post') {
 

+ 29 - 5
src/components/classRoomHelper/component/dialogArea.vue

@@ -19,7 +19,13 @@
               <span v-else>Ai</span>
             </div>
             <div class="d_t_c_a_right">
+              <div class="d_t_c_a_r_content" style="display: flex;justify-content: space-between;flex-wrap: wrap;" v-if="item.content.includes('图片')">
+                <div  v-for="i in pan(item.aiContent)">
+                    <img style="width: 120px;height: 120px;" :src="i.image" alt="" @click="previewImg(i.image)">
+                </div>
+              </div>
               <div
+                v-else
                 class="d_t_c_a_r_content"
                 v-loading="item.loading"
                 v-html="item.aiContent"
@@ -39,7 +45,7 @@
             />
             选择角色
           </div>
-					<div class="d_b_ba-item" @click.stop="clear()">
+          <div class="d_b_ba-item" @click.stop="clear()">
             清空聊天记录
           </div>
         </div>
@@ -314,10 +320,24 @@ export default {
       chatList: []
     };
   },
+  computed: {
+    pan() {
+      return (content) => {
+        try {
+        return JSON.parse(content)
+      } catch (error) {
+        return []
+      }
+      };
+    }
+  },
   methods: {
-		clear(){
-			this.chatList = [];
-		},
+    previewImg(url) {
+      this.$hevueImgPreview(url);
+    },
+    clear() {
+      this.chatList = [];
+    },
     // addCharacter(){
     // 	this.$message.info("点击了添加新角色")
     // },
@@ -363,7 +383,7 @@ export default {
           assistant_id: this.choseRoleItem.assistant_id,
           userId: this.userid,
           message: _text,
-          session_name: `${this.courseId}-studyStudent-dialog`,
+          session_name: `${this.courseId}-studyStudent`,
           uid: _uid,
           file_ids: []
         };
@@ -409,6 +429,7 @@ export default {
           mind_map_question: ""
         };
         this.text = "";
+        console.log('发送信息',params);
 
         this.ajax
           .post("https://gpt4.cocorobo.cn/chat", params)
@@ -571,6 +592,7 @@ export default {
                 });
               }
               this.chatList = _chatList;
+              // console.log(' this.chatList', this.chatList);
               this.loading = false;
               this.chatLoading = false;
             } else {
@@ -800,9 +822,11 @@ export default {
     },
     choseRole(item) {
       this.choseRoleItem = item;
+      console.log("选择角色", this.choseRoleItem);
     },
     noChangeRole() {
       this.cardType = 0;
+      this.choseRoleItem = {};
       // this.subjectsType = this.rightSubjects;
       // this.roleType = this.rightRole;
     },

+ 151 - 77
src/components/classRoomHelper/component/searchArea.vue

@@ -30,7 +30,11 @@
       <div class="s_t_chat" v-for="(item, index) in chatList" :key="index">
         <div
           class="s_t_c_user"
-          v-if="item.content && item.content != 'wanSearch'"
+          v-if="
+            item.content &&
+              item.content != 'wanSearch' &&
+              item.content != 'getImage'
+          "
         >
           <div class="s_t_c_u_left">
             <div class="s_t_c_u_l_content">{{ item.content }}</div>
@@ -41,7 +45,10 @@
           </div>
         </div>
 
-        <div class="s_t_c_ai" v-if="item.content != 'wanSearch'">
+        <div
+          class="s_t_c_ai"
+          v-if="item.content != 'wanSearch' && item.content != 'getImage'"
+        >
           <div class="aiCopy">
             <img
               style="width: 30px;"
@@ -53,33 +60,42 @@
             <span>Ai</span>
           </div>
           <div class="s_t_c_a_right">
+            <div class="s_t_c_a_r_content" style="display: flex;justify-content: space-between;flex-wrap: wrap;" v-if="item.content.includes('图片')">
+              <div  v-for="i in pan(item.aiContent)">
+                  <img style="width: 120px;height: 120px;" :src="i.image" alt=""  @click="previewImg(i.image)">
+              </div>
+            </div>
             <div
+              v-else
               class="s_t_c_a_r_content"
               v-loading="item.loading"
               v-html="item.aiContent"
             ></div>
+
             <!-- <div
               class="s_t_c_a_r_contentImage"
-              v-loading="loading && index == chatList.length - 1"
-              v-if="item.type == 1"
+              v-loading="item.loading"
+
             >
-              <span style="margin-bottom: 10px;">为您找到以下图片:</span>
-              <img
-                v-for="(item, index) in item.content"
+            
+              <span style="margin-bottom: 10px;">为您找到以下图片: {{ item.content }}</span> -->
+              <!-- {{ item.aiContent }} -->
+              <!-- <img
+                v-for="(i, index) in item.aiContent"
                 @click.stop="$hevueImgPreview(item)"
                 :key="index"
-                :src="item"
-              />
-              <div class="imgNumberBlock">
+                :src="i.image"
+              /> -->
+              <!-- <div class="imgNumberBlock">
                 <div class="imgNumber" v-for="(i,index) in imgNumList" :key="index+'b'">
                   {{ i }}
                 </div>
                 <div  class="imgNumber" style="background: none;">
                   <img style="width: 36px;height: 30px;" src="https://ccrb.s3.cn-northwest-1.amazonaws.com.cn/Frame%20131715569413607.png" alt="">
                 </div>
-              </div>
-            </div> -->
-            <div class="s_t_c_a_r_time">{{ item.createtime }}</div>
+              </div> -->
+            <!-- </div> -->
+            <!-- <div class="s_t_c_a_r_time">{{ item.createtime }}</div> -->
           </div>
         </div>
 
@@ -163,10 +179,24 @@ export default {
       chatList: []
     };
   },
+  computed: {
+    pan() {
+      return (content) => {
+        try {
+        return JSON.parse(content)
+      } catch (error) {
+        return []
+      }
+      };
+    }
+  },
   methods: {
-		clear(){
-			this.chatList = [];
-		},
+    previewImg(url) {
+      this.$hevueImgPreview(url);
+    },
+    clear() {
+      this.chatList = [];
+    },
     choiceRole() {
       this.cardType = 1;
     },
@@ -181,7 +211,7 @@ export default {
     send(_text = this.text) {
       if (this.loading || this.chatLoading) return this.$message.info("请稍等");
       if (_text.trim().length == 0) return this.$message.info("请输入内容");
-			let _msg = ``;
+      let _msg = ``;
       this.chatLoading = true;
       let _uuid = uuidv4();
       this.chatList.push({
@@ -198,64 +228,106 @@ export default {
         loading: true
       });
       this.scrollBottom();
-			if(_text.indexOf("视频")!=-1){
-				_msg = `
-					ATTENTION: Use '##' or '####'  to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".
-
-					---
-					## 任务
-					你的任务是根据用户的请求,结合“课程信息”,在https://www.bilibili.com/ 等教育网站上搜索相关视频,并且按照“输出格式”将结果输出给用户。
-					### 课程信息(读取【课程中心】相关信息)
-					#### 课程标题:${this.courseDetail.title}
-					#### 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
-					#### 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
-					#### 课程其他内容(【课程中心】-【导出信息】的内容)
-					#### 课程实时语音转录文本的结果(未来支持,目前无视)
-					---
-					## 规则
-					- 输出结果必须真实有效,不要捏造无效的视频链接
-					- 如果没有相关内容,请跟用户表明没有找到相关主题内容,然后推荐近似内容
-					---
-					## 输出
-					- 在ted.com等教育网站上搜索视频,并且以有序列表的形式将结果输出给用户
-					- 请一步步思考如何根据现有信息推送视频,但是最终输出结果不需要包含你的思考过程,只需要包含视频标题+链接。
-					---
-					## 输出格式
-					视频标题 + 视频链接
-					---
-
-				`
-			}
-			// else if(_text.indexOf('图片')!=-1){
-			// 	_msg = `
-			// 		ATTENTION: Use '##' or '####'  to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".
-				
-			// 		---
-			// 		## 任务
-			// 		你的任务是根据用户的请求,结合“课程信息”,搜索4张图片,将搜索结果以2*2的排列格式返回给用户。
-			// 		### 课程信息(读取【课程中心】相关信息)
-			// 		#### 课程标题:${this.courseDetail.title}
-			// 		#### 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
-			// 		#### 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
-			// 		#### 课程其他内容(【课程中心】-【导出信息】的内容)
-			// 		#### 课程实时语音转录文本的结果(未来支持,目前无视)
-			// 		---
-			// 		## 规则
-			// 		- 输出结果基于“课程信息”,避免提供与“课程信息”无关的图片。
-			// 		- 当你判断用户的请求与“课程信息”不相关时,你需要向用户解释他的请求与“课程信息”无关。
-			// 		- 如果用户坚持生成跟“课程信息”无关的图片时,你只需要按照用户的请求搜索1张图片。
-			// 		---
-			// 		## 输出
-			// 		- 搜索4张图片,将搜索结果以2*2的排列格式输出给用户
-			// 		- 请一步步思考如何根据现有信息推送图片,但是不需要输出图片以外的内容。
-			// 		-----
-			// 	`
-			// }
-			let history = [];
-			if(_msg){
-				history.push({ role: "user", content: _msg })
-			}
-			history.push({ role: "user", content: _text })
+      if (_text.indexOf("视频") != -1) {
+        _msg = `
+        NOTICE
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+Instruction: Based on the context, follow "Format example", write content.
+
+# Context
+## 任务
+你的任务是根据用户的请求,结合“课程信息”,在Ted.com等教育网站上搜索相关视频,并且按照“输出格式”将结果输出给用户。
+课程信息
+课程标题:${this.courseDetail.title}
+分类:${this.courseDetail.name ? this.courseDetail.name : "无"}
+学生年级:${this.courseDetail.classname ? this.courseDetail.classname : "无"}
+
+## 规则
+    1. 输出结果必须真实有效,不要捏造无效的视频链接
+    2. 当课程信息中的子条目内容为“无”时,无视这些条目进行输出即可。
+    3. 如果没有相关内容,请跟用户表明没有找到相关视频链接内容,然后推荐搜索建议
+    4. 在ted.com等教育网站上搜索视频,并且以有序列表的形式将结果输出给用户
+    5. 请一步步思考如何根据现有信息推送视频,但是最终输出结果不需要包含你的思考过程,只需要包含视频标题+链接。
+
+# Format example
+视频来源: Ted.com
+视频标题:How AI could save (not destroy) education
+视频内容:介绍了一款AI教育软件
+视频链接https://www.ted.com/talks/sal_khan_how_ai_could_save_not_destroy_education
+				`;
+      } else if (_text.indexOf("图片") != -1) {
+        console.log("图片");
+        this.text = "";
+        let params = {
+          page: 1,
+          pagesize: 4,
+          query: _text
+        };
+        this.$message.info(_text);
+        this.chatList.push({
+          role: "user",
+          content: `getImage`,
+          uid: _uuid,
+          AI: "AI",
+          aiContent: "",
+          oldContent: "",
+          isShowSynchronization: false,
+          filename: "",
+          index: this.chatList.length,
+          is_mind_map: false,
+          loading: true
+        });
+        this.ajax
+          .post("https://gpt.cocorobo.cn/search_image", params)
+          .then(res => {
+            let data = res.data.FunctionResponse.result;
+            // console.log('res',res.data.FunctionResponse.result);
+            this.chatList.find(i => i.uid == _uuid).aiContent = JSON.stringify(data);
+            this.chatList.find(i => i.uid == _uuid).loading = false;
+            this.chatLoading = false;
+            this.insertChat(_uuid);
+
+            // console.log('resresresres',res);
+            // if (res.data.FunctionResponse.result == "发送成功") {
+
+            // } else {
+            //   this.$message.warning(res.data.FunctionResponse.result);
+            // }
+          });
+
+        return;
+      }
+      console.log(9999);
+      //         num=0
+      //       	_msg = `
+      //         NOTICE
+      // Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+      // ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+      // Instruction: Based on the context, follow "Format example", write content.
+
+      // # Context
+      // ## 任务
+      // 你的任务是根据用户的请求,结合以下“课程信息”包含的子条目(“课程标题”,“主题”,“学科”以及“年级”),向用户输出相关的4张图片,将结果2*2的形式返回给用户。
+      // 课程信息
+      // 课程标题:${this.courseDetail.title}
+      // 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
+      // 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
+
+      // ## 规则
+      //     1. 输出内容应该与“课程信息”相关,避免提供无关的信息。
+      //     2. 当课程信息中的子条目内容为“无”时,无视这些条目进行输出即可。
+      //     3. 搜索建议的结果应该符合伦理规范。
+
+      // ## 输出格式
+      //     1. 以2*2的格式输出应包括4张相关的图片。
+      //       `
+      //       }
+      let history = [];
+      if (_msg) {
+        history.push({ role: "user", content: _msg });
+      }
+      history.push({ role: "user", content: _text });
       let params = {
         model: "gpt-3.5-turbo",
         temperature: 0,
@@ -458,8 +530,10 @@ export default {
 			你的任务是根据“课程信息”,提供用户需要的搜索建议,将搜索建议的结果以有序列表的形式返回给用户。
 			## 课程信息
 			#### 课程标题:${this.courseDetail.title}
-			#### 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
-			#### 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
+			#### 分类:${this.courseDetail.name ? this.courseDetail.name : "无"}
+			#### 学生年级:${
+        this.courseDetail.classname ? this.courseDetail.classname : "无"
+      }
 			---
 
 			## 规则

+ 118 - 107
src/components/classRoomHelper/component/taskArea.vue

@@ -67,7 +67,13 @@
               <span v-else>Ai</span>
           </div>
           <div class="t_t_c_a_right">
+            <div class="t_t_c_a_r_content" style="display: flex;justify-content: space-between;flex-wrap: wrap;" v-if="item.content.includes('图片')">
+              <div  v-for="i in pan(item.aiContent)">
+                  <img style="width: 120px;height: 120px;" :src="i.image" alt=""  @click="previewImg(i.image)">
+              </div>
+            </div>
             <div
+              v-else
               class="t_t_c_a_r_content"
               v-loading="item.loading"
               v-html="item.aiContent"
@@ -129,7 +135,21 @@ export default {
       chatList: []
     };
   },
+  computed: {
+    pan() {
+      return (content) => {
+        try {
+        return JSON.parse(content)
+      } catch (error) {
+        return []
+      }
+      };
+    }
+  },
   methods: {
+    previewImg(url) {
+      this.$hevueImgPreview(url);
+    },
 		clear(){
 			this.chatList = [];
 		},
@@ -311,125 +331,116 @@ export default {
       if (this.loading || this.chatLoading) return this.$message.info("请稍等");
       let _msg = ``;
       if (_text == "扩展知识") {
+        // return console.log(this.courseDetail);
         _msg = `
-				  ATTENTION: Use '##' or '####'  to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".
-					
-					---
-					## 任务
-					你的任务是根据用户的请求,结合“课程信息”,向用户推荐相关的知识点,将结果以有序列表的形式返回给用户。
-					## 课程信息(读取【课程中心】相关信息)
-					#### 课程标题:${this.courseDetail.title}
-					#### 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
-					#### 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
-
-					---
-					## 规则
-					- 输出结果基于“课程信息”,避免提供无关的信息。
-					- 搜索建议的结果符合伦理规范。
-
-					---
-					## 输出
-					- 输出应包括3个相关的扩展知识点。
-					- 请一步步思考如何根据现有信息推送扩展知识点,但是不需要输出扩展知识以外的内容。
-
-					---
-					## 输出内容
-					搜索建议应以有序列表形式呈现,每个建议包括关键词和简短描述。
-
-					---
-					## Format example
-					世界奇观众多,数不胜数,本文仅从5000+起步记述,按这个标准,世界第一高峰珠穆朗玛峰、第二高峰乔戈里峰、第四高峰洛子峰、第五高峰马卡鲁峰、第六高峰卓奥友峰均为刚刚及格或者未达标。他们均位于群山腹地,距离低海拔地区较远。
-					先说答案:南迦帕尔巴特,海拔8125,距离28公里处相对高度差为7081米,且可直视峰顶。注意这几个条件,因为抛开他们的话,后面会有数据上的争议。但有了这些限制条件,可以说,南迦·帕尔巴特峰几乎在所有排行榜上都是当之无愧的冠军,来看看它的数据:世界海拔第9高峰,位于喜马拉雅山脉的西端"地结"(属于巴控克什米尔地区)上,海拔8125米,被印度河深切环绕。顺着该山西北一条山脊往下,可以直达一片面积还不算很小的平地——该平地最低点的一条河仅有1044米。
-					关于麦金利山的说法,麦金利山位于美国阿拉斯加州东南部,海拔6193米,约有5500米的相对高差,不但不是高差最大的山,而且论排名,前30也很难进去。因为这个数据如果放在亚洲实在是比较普通。毕竟相对高差是建立在绝对高度的基础上的,想要相对高差突破7000+,那么你的绝对高度当然要先过这个数。而世界所有的7000+高峰,均位于亚洲的大喜马拉雅和喀喇昆仑地区。除了南迦帕尔巴特峰之外,世界第七高峰海拔8167米的道拉吉里峰和第十高峰海拔8093米的安娜普尔娜峰之间,有一条海拔仅在1050-1500米,宽约20公里的卡利甘达基谷地,这里有着12公里距离,双侧均为6900-7000米高差的恐怖纪录。卡利甘达基峡谷数据和壮观程度要超过雅鲁藏布大峡谷,实为世界第一大峡谷,只是国人为了面子问题佯作不知。
-					`;
+        NOTICE
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+Instruction: Based on the context, follow "Format example", write content.
+
+# Context
+## 任务
+你的任务是根据用户的请求,结合以下“课程信息”包含的子条目(“课程标题”,“主题”,“学科”以及“年级”),向用户输出相关的扩展知识点,将结果以有序列表的形式返回给用户。
+课程信息
+课程标题:${this.courseDetail.title}
+分类:${this.courseDetail.name?this.courseDetail.name:"无"}
+学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
+
+## 规则
+1. 内容应该与“课程信息”相关,避免提供无关的信息。
+2. 当课程信息中的子条目内容为“无”时,无视这些条目进行即可。
+3. 搜索建议的结果应该符合伦理规范。
+4. 一步步思考如何根据“课程信息”来输出“扩展知识点”,但是你不需要“扩展知识点”以外的内容。
+
+## 格式要求
+1. 应包括5个相关的“扩展知识点”。
+2. 搜索建议应以有序列表形式呈现,每个建议包括关键词和简短描述。
+
+# Format example
+## 课程标题:垃圾回收
+主题:无
+学科:无
+年级:无
+1. 垃圾分类标准:不同国家的垃圾分类标准和方法。
+2. 可回收垃圾处理:可回收垃圾的处理流程和再利用方法。
+3. 有害垃圾的影响:有害垃圾对环境和人体健康的潜在影响。
+4. 垃圾减量化策略:减少垃圾产生的有效策略和实践。
+5. 环保教育活动:在学校中推广环保意识的活动和资源。
+        `;
       } else if (_text == "智能出题") {
         _msg = `
-				  ATTENTION: Use '##' or '####'  to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".
-
-					---
-					## 任务
-					你的任务是根据用户的请求,结合“课程信息”,向用户推荐相关的题目,将结果以有序列表的形式返回给用户。
-					## 课程信息(读取【课程中心】相关信息)
-					#### 课程标题:${this.courseDetail.title}
-					#### 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
-					#### 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
-
-					---
-					## 规则
-					- 输出结果基于“课程信息”,避免提供无关的信息。
-					- 搜索建议的结果符合伦理规范。
-
-					---
-					## 输出
-					- 输出应包括3个相关课程的题目。
-					- 请一步步思考如何根据现有信息出题,但是不需要输出相关课程以外的内容。
-
-					---
-					## 输出内容
-					搜索建议应以有序列表形式呈现,每个建议包括关键词和简短描述。
-
-					---
-					## Format example
-					题目:如果一个物体的动能是 50J,且其速度是 5 m/s,求该物体的质量。
+        NOTICE
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+Instruction: Based on the context, follow "Format example", write content.
+
+# Context
+## 任务
+你的任务是根据用户的请求,结合以下“课程信息”包含的子条目(“课程标题”,“主题”,“学科”以及“年级”),向用户输出相关的练习题目,将结果以有序列表的形式返回给用户。
+课程信息
+课程标题:${this.courseDetail.title}
+分类:${this.courseDetail.name?this.courseDetail.name:"无"}
+学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
+
+## 规则
+1. 练习题目内容应该与“课程信息”相关,避免提供无关的信息。
+2. 当课程信息中的子条目内容为“无”时,无视这些条目进行输出即可。
+3. 一步步思考如何根据“课程信息”输出“练习题目”,但是你不需要输出“练习题目”以外的内容。
+4.输出练习题目后,提示用户“希望这些题目能帮到你,如果需要其他类型题目或者更多题目,可以随时向我输入你的需求”
+
+## 格式要求
+1. 输出应包括3道相关的“练习题目”。
+2. 练习题目默认只包含3道4选1的单选题,除非用户在提示词中更具体地指明了题目类型和数量。
+3. 练习题目应以有序列表形式呈现,每个建议包括关键词和简短描述。
+
+# Format example
+## 课程标题:垃圾回收
+主题:无
+学科:无
+年级:无
+1. 垃圾回收的主要目的是: a) 增加垃圾的数量 b) 减少垃圾的数量 c) 提高垃圾的质量 d) 增加垃圾的种类
+2. 以下哪种垃圾是可以回收的? a) 食物残渣 b) 塑料瓶 c) 湿纸巾 d) 动物粪便
+3. 垃圾分类中,玻璃瓶通常属于哪一类? a) 可回收垃圾 b) 厨余垃圾 c) 有害垃圾 d) 其他垃圾
 
-					答案:2 kg
 
-					题目:写出与 "quick" 同义的词。
-
-					答案:fast
-
-					题目:世界上最高的山是什么山。
-					A:喜马拉雅山
-					B:珠穆朗玛峰
-					C:天山
-					D:阿尔卑斯山
-
-					答案:B
 					`;
       } else if (_text == "智能总结") {
         _msg = `
-				  ATTENTION: Use '##' or '####'  to SPLIT SECTIONS, not '#'.Output format carefully referenced "Format example".
-
-					---
-					## 任务
-					你的任务是根据用户的请求,结合“课程信息”,向用户推荐相关的课程总结,将结果以有序列表的形式返回给用户。
-					## 课程信息(读取【课程中心】相关信息)
-					#### 课程标题:${this.courseDetail.title}
-					#### 分类:${this.courseDetail.name?this.courseDetail.name:"无"}
-					#### 学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
-
-					---
-					## 规则
-					- 输出结果基于“课程信息”,避免提供无关的信息。
-					- 搜索建议的结果符合伦理规范。
-
-					---
-					## 输出
-					- 输出应对应相关课程的总结。
-					- 请一步步思考如何根据现有信息总结课程,但是不需要输出相关课程以外的内容。
-
-					---
-					## 输出内容
-					搜索建议应以有序列表形式呈现,每个建议包括关键词和简短描述。
-
-					---
-					## Format example
-					珠穆朗玛峰(中国/尼泊尔边界,海拔8848米)
-
-					世界之巅。
-
-					乔戈里峰(K2,中国/巴基斯坦边界,海拔8611米)
-
-					世界第二高峰,峰顶呈金字塔形,山势险峻异常,是国际登山界公认的8000米以上攀登难度最大的山峰。
-
-					干城章嘉峰(印度/尼泊尔边界,海拔8586米)
-
-					世界第三高峰,全球14座8000米级雪山中位置最靠东的高山,山顶呈工字形,山体巨大,靠近喜马拉雅山脉南麓,远眺壮观异常。
+        NOTICE
+Language: Please use the same language as the user requirement, if the user speaks Chinese, the specific text of your answer should also be in Chinese.
+ATTENTION: Use '##' to SPLIT SECTIONS, not '#'. Output format carefully referenced "Format example".
+Instruction: Based on the context, follow "Format example", write content.
+
+# Context
+## 任务
+你的任务是根据用户的请求,结合以下“课程信息”包含的子条目(“课程标题”,“主题”,“学科”,“年级”以及“学习内容”),对课程进行课程总结,请根据输出格式将内容输出给用户。
+课程信息
+课程标题:${this.courseDetail.title}
+分类:${this.courseDetail.name?this.courseDetail.name:"无"}
+学生年级:${this.courseDetail.classname?this.courseDetail.classname:"无"}
+
+## 规则
+1. “课程总结”内容应该与“课程信息”相关,避免提供无关的信息。
+2. 当课程信息中的子条目内容为“无”时,无视这些条目进行输出即可。
+3. 一步步思考如何根据“课程信息”输出“课程总结”。
+
+## 格式要求
+1. 以无序列表的形式输出“课程信息”中的“课程标题”,“主题”,“学科”以及“年级”,若这些条目中的内容为“无”,则不需要输出
+-----
+# Format example
+## 课程标题:垃圾回收
+主题:无
+学科:无
+年级:无
+课程信息
+课程标题:垃圾回收
+学科:自然科学 语文 数学
+学习内容:学习内容包含一份引导学生思考为何要进行垃圾回收的文档材料
 
-					从70千米外海拔500-2000米的大吉岭地区远眺海拔8586米的世界第三高峰干城章嘉峰,极限高差可达8000+。
 					`;
       }
       if (!_msg) return;
+      // console.log(_msg)
       this.chatLoading = true;
       let _uuid = uuidv4();
       this.chatList.push({