page-ai-chat.component.ts 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
  2. import { IonButton, IonContent, IonFooter, IonHeader, IonInput, IonItem, IonTitle, IonToolbar, ModalController } from '@ionic/angular/standalone';
  3. import { ChatPanelOptions, FmodeChat, FmodeChatCompletion,FmodeChatMessage,MarkdownPreviewModule, openChatPanelModal } from 'fmode-ng';
  4. import { CommonModule } from '@angular/common';
  5. import { FormsModule,} from '@angular/forms'; // 导入 FormsModule
  6. import { Router } from '@angular/router';
  7. // 引用设计的对象类和查询类
  8. import { CloudObject, CloudQuery } from 'src/lib/ncloud';
  9. @Component({
  10. selector: 'app-page-ai-chat',
  11. templateUrl: './page-ai-chat.component.html',
  12. styleUrls: ['./page-ai-chat.component.scss'],
  13. standalone: true,
  14. imports:[IonButton,IonHeader,IonToolbar,IonTitle,IonContent,IonFooter,IonInput,CommonModule,FormsModule,MarkdownPreviewModule,IonItem ]
  15. })
  16. export class PageAiChatComponent implements OnInit {
  17. constructor(private modalCtrl:ModalController,
  18. private router:Router, private cdRef:ChangeDetectorRef) { }
  19. ngOnInit() {
  20. // 生命周期:页面加载后,运行用户列表加载函数
  21. this.loadUserProfileList()
  22. }
  23. chatId:any= null;
  24. //AI聊天
  25. openFashionChat(){
  26. localStorage.setItem("company","E4KpGvTEto")
  27. let consult = new CloudObject("AIChat")
  28. let now = new Date();
  29. let chatStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
  30. consult.set({
  31. title:`运动咨询记录${chatStr}}`,
  32. })
  33. let options:ChatPanelOptions = {
  34. roleId:"2DXJkRsjXK",
  35. onChatInit:(chat:FmodeChat)=>{
  36. console.log("onChatInit");
  37. console.log("预设角色",chat.role);
  38. chat.role.set("name","Neon");
  39. chat.role.set("title","运动教练");
  40. chat.role.set("desc","一名亲切和蔼的运动教练,Neon,年龄24岁");
  41. chat.role.set("tags",["运动","健康"]);
  42. chat.role.set("avatar","https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/qz3QJnQqfb-0.png")
  43. chat.role.set("prompt",`
  44. #角色设定
  45. 您是一名专业的运动教练,名叫Neon,年龄24岁,热爱运动,对自己的能力充满信心,总是努力保持克制。与家人有着牢固而密切的联系。有强烈的服务意识。非常关心她的朋友。擅长根据用户的需求和个性推荐运动方案。您的风格亲切、活泼,自信旨在帮助用户找到最适合他们的运动方案。
  46. #对话环节
  47. 0破冰,跟用户打招呼,并引导用户聊运动或健康的话题,可以慢慢引导,不要太突兀,比如:
  48. “今天的心情怎么样?”
  49. 1拓展话题
  50. “你平时喜欢什么样的运动类型呢?有没有特别喜欢的运动项目比如篮球,跑步?”
  51. “如果有一个运动目标,你希望我给出哪方面的运动建议,比如运动目标,运动频率或运动强度你会选择哪个呢?”
  52. “你觉得在运动过程中,最让你困扰的是什么?是运动技巧还是运动强度呢?”
  53. “有没有什么运动是你一直想尝试但还没有机会的?我们可以一起聊聊!”
  54. 2根据用户的详细描述给出运动方案,
  55. 3引导收尾
  56. “今天聊得很开心呢!如果你还有其他问题或者想法,随时可以告诉我哦。”
  57. “如果你觉得今天的聊天已经足够了,我也很乐意下次再和你聊更多强身健体的话题!”
  58. “希望你能找到自己喜欢的运动风格,期待下次再见!”
  59. # 开始话语
  60. 当您准备好了,可以以一个运动教练的身份,向来访的用户打招呼。`);
  61. },
  62. onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
  63. console.log("onMessage",message)
  64. let content:any = message?.content
  65. if(typeof content == "string"){
  66. if(content?.indexOf("[运动方案完成]")>-1){
  67. console.log("运动方案已完成")
  68. consult.set({
  69. content:content // 穿搭方案内容
  70. })
  71. consult.save();
  72. }
  73. }
  74. },
  75. onChatSaved:(chat:FmodeChat)=>{
  76. // chat?.chatSession?.id 本次会话的 chatId
  77. console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
  78. this.chatId = chat?.chatSession?.id
  79. }
  80. }
  81. openChatPanelModal(this.modalCtrl,options)
  82. }
  83. /**
  84. * 开始聊天
  85. */
  86. openChat(){
  87. let options:ChatPanelOptions = {
  88. roleId:"2DXJkRsjXK",
  89. onChatSaved:(chat:FmodeChat)=>{
  90. // chat?.chatSession?.id 本次会话的 chatId
  91. console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
  92. },
  93. }
  94. openChatPanelModal(this.modalCtrl,options)
  95. }
  96. /**
  97. * 恢复聊天
  98. * @chatId 从onChatSaved生命周期中,获取chat?.chatSession?.id
  99. */
  100. restoreChat(chatId:string){
  101. let options:ChatPanelOptions = {
  102. roleId:"2DXJkRsjXK",
  103. chatId:chatId
  104. }
  105. openChatPanelModal(this.modalCtrl,options)
  106. }
  107. // 创建用于数据列表存储的属性
  108. UserProfileList:Array<CloudObject> = []
  109. // 查询并加载用户列表的函数
  110. async loadUserProfileList(){
  111. let query = new CloudQuery("UserProfile");
  112. this.UserProfileList = await query.find();
  113. console.log("UserProfileList",this.UserProfileList)
  114. }
  115. //跳转到自己写的AI聊天页面
  116. goaichat(){
  117. this.router.navigate(['/tabs/chat'])
  118. }
  119. }