aiplan-page.component.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. import { Component, OnInit } from '@angular/core';
  2. import {
  3. IonButton,
  4. IonCard,
  5. IonCardHeader,
  6. IonCardSubtitle,
  7. IonCardTitle,
  8. IonCol,
  9. IonContent,
  10. IonGrid,
  11. IonHeader,
  12. IonInput,
  13. IonItem,
  14. IonList,
  15. IonRow,
  16. IonTextarea,
  17. IonTitle,
  18. IonToolbar,
  19. } from '@ionic/angular/standalone';
  20. /** 引用:从fmode-ng库引用FmodeChatCompletion类 */
  21. import { FmodeChatCompletion, MarkdownPreviewModule } from 'fmode-ng';
  22. @Component({
  23. selector: 'app-aiplan-page',
  24. templateUrl: './aiplan-page.component.html',
  25. styleUrls: ['./aiplan-page.component.scss'],
  26. standalone: true,
  27. imports: [
  28. IonHeader,
  29. IonTitle,
  30. IonToolbar,
  31. IonCard,
  32. IonContent,
  33. IonList,
  34. IonItem,
  35. IonInput,
  36. IonCardHeader,
  37. IonCardTitle,
  38. IonCardSubtitle,
  39. IonTextarea,
  40. IonButton,
  41. IonGrid,
  42. IonRow,
  43. IonCol,
  44. MarkdownPreviewModule,
  45. ],
  46. })
  47. export class AiplanPageComponent implements OnInit {
  48. constructor() {}
  49. ngOnInit() {}
  50. trainingType: string = '';
  51. sex: string = '';
  52. weight: number = NaN;
  53. trainingTime: number = NaN;
  54. trainingIntensity: string = '';
  55. trainingSite: string = '';
  56. needs: string = '';
  57. aiplan: string = '';
  58. userInputOntrainingType(ev: any) {
  59. this.trainingType = ev.detail.value;
  60. }
  61. userInputOnsex(ev: any) {
  62. this.sex = ev.detail.value;
  63. }
  64. userInputOnweight(ev: any) {
  65. this.weight = ev.detail.value;
  66. }
  67. userInputOntrainingTime(ev: any) {
  68. this.trainingTime = ev.detail.value;
  69. }
  70. userInputOntrainingIntensity(ev: any) {
  71. this.trainingIntensity = ev.detail.value;
  72. }
  73. userInputOntrainingSite(ev: any) {
  74. this.trainingSite = ev.detail.value;
  75. }
  76. userInputOnneeds(ev: any) {
  77. this.needs = ev.detail.value;
  78. }
  79. reset() {
  80. // 重置表单数据(有问题)
  81. // this.trainingType = '';
  82. // this.weight = NaN;
  83. // this.trainingTime = NaN;
  84. // this.trainingIntensity = '';
  85. // this.trainingSite = '';
  86. // this.needs = '';
  87. // 重置表单数据(无错误)
  88. let ipts = document.querySelectorAll('ion-input');
  89. let textarea = document.querySelectorAll('ion-textarea');
  90. ipts.forEach((ipt) => {
  91. ipt.value = '';
  92. });
  93. textarea.forEach((text) => {
  94. text.value = '';
  95. });
  96. }
  97. // submit() {
  98. // // 提交表单数据
  99. // // let data = {
  100. // // trainingType: this.trainingType,
  101. // // weight: this.weight,
  102. // // trainingTime: this.trainingTime,
  103. // // trainingIntensity: this.trainingIntensity,
  104. // // trainingSite: this.trainingSite,
  105. // // needs: this.needs,
  106. // // };
  107. // // 用户输入数据提取
  108. // let ipts = document.querySelectorAll('ion-input');
  109. // let textarea = document.querySelectorAll('ion-textarea');
  110. // let userinputs = '';
  111. // ipts.forEach((ipt) => {
  112. // userinputs += ipt.value + ' ';
  113. // });
  114. // textarea.forEach((text) => {
  115. // userinputs += text.value + ' ';
  116. // });
  117. // let userinputlist = userinputs.split(' ');
  118. // let data = {
  119. // trainingType: userinputlist[0],
  120. // sex: userinputlist[1],
  121. // weight: userinputlist[2],
  122. // trainingTime: userinputlist[3],
  123. // trainingIntensity: userinputlist[4],
  124. // trainingSite: userinputlist[5],
  125. // needs: userinputlist[6],
  126. // };
  127. // console.log(data);
  128. // // ai对话实现
  129. // let prompt = `我是一名体重为${data.weight}kg的${data.sex}性,我只有${data.trainingTime}分钟来${data.trainingType},我希望训练强度${data.trainingIntensity}一点,而我想训练的部位为${data.trainingSite}, 一些其他的需求有${data.needs}。 请你作为一名专业的健身教练,根据我提供的信息,为我制定${data.trainingType}计划。`;
  130. // console.log(prompt);
  131. // let token = `r:E4KpGvTEto-187799890851732794669`;
  132. // localStorage.setItem('token', token);
  133. // let messageList = [
  134. // {
  135. // role: 'system',
  136. // content: `${new Date().toLocaleString}`,
  137. // },
  138. // {
  139. // role: 'user',
  140. // content: prompt,
  141. // },
  142. // ];
  143. // //fmode-chat
  144. // let completion = new TestChatCompletion(messageList);
  145. // completion.createCompletionByStream();
  146. // this.aiplan = '';
  147. // setInterval(() => {
  148. // // console.log(messageList);
  149. // this.aiplan = messageList[messageList.length - 1].content;
  150. // }, 1000);
  151. // }
  152. isComplete: boolean = true;
  153. sendMessage() {
  154. // 用户输入数据提取 不建议
  155. // let ipts = document.querySelectorAll('ion-input');
  156. // let textarea = document.querySelectorAll('ion-textarea');
  157. // let userinputs = '';
  158. // ipts.forEach((ipt) => {
  159. // userinputs += ipt.value + ' ';
  160. // });
  161. // textarea.forEach((text) => {
  162. // userinputs += text.value + ' ';
  163. // });
  164. // let userinputlist = userinputs.split(' ');
  165. // let data = {
  166. // trainingType: userinputlist[0],
  167. // sex: userinputlist[1],
  168. // weight: userinputlist[2],
  169. // trainingTime: userinputlist[3],
  170. // trainingIntensity: userinputlist[4],
  171. // trainingSite: userinputlist[5],
  172. // needs: userinputlist[6],
  173. // };
  174. // console.log(data);
  175. this.isComplete = false;
  176. this.aiplan = '';
  177. // ai对话实现
  178. let prompt = `我是一名体重为${this.weight}kg的${this.sex}性,我只有${this.trainingTime}分钟来${this.trainingType},我希望训练强度${this.trainingIntensity}一点,而我想训练的部位为${this.trainingSite}, 一些其他的需求有${this.needs}。 请你作为一名专业的健身教练,根据我提供的信息,为我制定${this.trainingType}计划。`;
  179. console.log(prompt);
  180. let completion = new FmodeChatCompletion([
  181. { role: 'system', content: '' },
  182. { role: 'user', content: prompt },
  183. ]);
  184. completion.sendCompletion().subscribe((message: any) => {
  185. // 打印消息体
  186. // console.log(message.content);
  187. // 赋值消息内容给组件内属性
  188. this.aiplan = message.content;
  189. if (message?.complete) {
  190. // 判断message为完成状态,则设置isComplete为完成
  191. this.isComplete = true;
  192. }
  193. });
  194. }
  195. }