|
@@ -1,127 +1,131 @@
|
|
|
import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
|
|
|
import { IonButton, IonContent, IonFooter, IonHeader, IonInput, IonItem, IonTitle, IonToolbar, ModalController } from '@ionic/angular/standalone';
|
|
|
-import { ChatPanelOptions, FmodeChat, FmodeChatCompletion,FmodeChatMessage,MarkdownPreviewModule, openChatPanelModal } from 'fmode-ng';
|
|
|
+import { ChatPanelOptions, FmodeChat, FmodeChatCompletion, FmodeChatMessage, MarkdownPreviewModule, openChatPanelModal } from 'fmode-ng';
|
|
|
import { CommonModule } from '@angular/common';
|
|
|
-import { FormsModule,} from '@angular/forms'; // 导入 FormsModule
|
|
|
+import { FormsModule } from '@angular/forms'; // 导入 FormsModule
|
|
|
import { Router } from '@angular/router';
|
|
|
// 引用设计的对象类和查询类
|
|
|
import { CloudObject, CloudQuery } from 'src/lib/ncloud';
|
|
|
|
|
|
-
|
|
|
@Component({
|
|
|
selector: 'app-page-ai-chat',
|
|
|
templateUrl: './page-ai-chat.component.html',
|
|
|
styleUrls: ['./page-ai-chat.component.scss'],
|
|
|
standalone: true,
|
|
|
- imports:[IonButton,IonHeader,IonToolbar,IonTitle,IonContent,IonFooter,IonInput,CommonModule,FormsModule,MarkdownPreviewModule,IonItem ]
|
|
|
+ imports: [IonButton, IonHeader, IonToolbar, IonTitle, IonContent, IonFooter, IonInput, CommonModule, FormsModule, MarkdownPreviewModule, IonItem]
|
|
|
})
|
|
|
-export class PageAiChatComponent implements OnInit {
|
|
|
-
|
|
|
- constructor(private modalCtrl:ModalController,
|
|
|
- private router:Router, private cdRef:ChangeDetectorRef) { }
|
|
|
+export class PageAiChatComponent implements OnInit {
|
|
|
+
|
|
|
+ UserProfileList: Array<CloudObject> = []; // 存储用户信息
|
|
|
+
|
|
|
+ // 当前用户头像的URL
|
|
|
+ currentUserAvatarUrl: string = '';
|
|
|
+ chatId!: string;
|
|
|
+
|
|
|
+ constructor(private modalCtrl: ModalController,
|
|
|
+ private router: Router, private cdRef: ChangeDetectorRef) { }
|
|
|
+
|
|
|
+ ngOnInit() {
|
|
|
+ // 生命周期:页面加载后,运行用户列表加载函数
|
|
|
+ this.loadUserProfileList();
|
|
|
+ }
|
|
|
|
|
|
- ngOnInit() {
|
|
|
- // 生命周期:页面加载后,运行用户列表加载函数
|
|
|
- this.loadUserProfileList()
|
|
|
+ // 查询并加载用户列表的函数
|
|
|
+ async loadUserProfileList() {
|
|
|
+ let query = new CloudQuery("UserProfile");
|
|
|
+ this.UserProfileList = await query.find();
|
|
|
+ console.log("UserProfileList", this.UserProfileList);
|
|
|
+
|
|
|
+ // 假设用户的头像字段是 'avatar',你可以根据实际字段来修改
|
|
|
+ if (this.UserProfileList.length > 0) {
|
|
|
+ const user = this.UserProfileList[0]; // 假设你要使用第一个用户的头像
|
|
|
+ this.currentUserAvatarUrl = user.get('avatar'); // 提取头像 URL
|
|
|
}
|
|
|
- chatId:any= null;
|
|
|
- //AI聊天
|
|
|
-openFashionChat(){
|
|
|
- localStorage.setItem("company","E4KpGvTEto")
|
|
|
- let consult = new CloudObject("AIChat")
|
|
|
+ }
|
|
|
+
|
|
|
+ // AI聊天
|
|
|
+ openFashionChat() {
|
|
|
+ localStorage.setItem("company", "E4KpGvTEto");
|
|
|
+ let consult = new CloudObject("AIChat");
|
|
|
let now = new Date();
|
|
|
- let chatStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
|
|
|
+ let chatStr = `${now.getFullYear()}-${now.getMonth() + 1}-${now.getDate()}`;
|
|
|
consult.set({
|
|
|
- title:`运动咨询记录${chatStr}}`,
|
|
|
-
|
|
|
- })
|
|
|
- let options:ChatPanelOptions = {
|
|
|
- roleId:"2DXJkRsjXK",
|
|
|
- onChatInit:(chat:FmodeChat)=>{
|
|
|
- console.log("onChatInit");
|
|
|
- console.log("预设角色",chat.role);
|
|
|
- chat.role.set("name","Neon");
|
|
|
- chat.role.set("title","运动教练");
|
|
|
- chat.role.set("desc","一名亲切和蔼的运动教练,Neon,年龄24岁");
|
|
|
- chat.role.set("tags",["运动","健康"]);
|
|
|
- chat.role.set("avatar","https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/qz3QJnQqfb-0.png")
|
|
|
- chat.role.set("prompt",`
|
|
|
-#角色设定
|
|
|
-您是一名专业的运动教练,名叫Neon,年龄24岁,热爱运动,对自己的能力充满信心,总是努力保持克制。与家人有着牢固而密切的联系。有强烈的服务意识。非常关心朋友。擅长根据用户的需求给出康复方案。您的风格亲切、活泼,自信旨在帮助用户找到最适合他们的康复方案。
|
|
|
+ title: `运动咨询记录${chatStr}`,
|
|
|
+ });
|
|
|
+
|
|
|
+ let options: ChatPanelOptions = {
|
|
|
+ roleId: "2DXJkRsjXK",
|
|
|
+ onChatInit: (chat: FmodeChat) => {
|
|
|
+ console.log("onChatInit");
|
|
|
+ console.log("预设角色", chat.role);
|
|
|
+ chat.role.set("name", "Neon");
|
|
|
+ chat.role.set("title", "运动教练");
|
|
|
+ chat.role.set("desc", "一名亲切和蔼的运动教练,Neon,年龄24岁");
|
|
|
+ chat.role.set("tags", ["运动", "健康"]);
|
|
|
+
|
|
|
+ // 使用当前用户的头像
|
|
|
+ const avatarUrl = this.currentUserAvatarUrl || "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/qz3QJnQqfb-0.png";
|
|
|
+ chat.role.set("avatar", avatarUrl); // 设置头像
|
|
|
|
|
|
-#对话环节
|
|
|
-0破冰,跟用户打招呼,并引导用户聊运动或健康的话题,可以慢慢引导,不要太突兀,比如:
|
|
|
-“今天的心情怎么样?”
|
|
|
-1拓展话题
|
|
|
-“你平时喜欢什么样的运动类型呢?有没有特别喜欢的运动项目比如篮球,跑步?”
|
|
|
-“你受伤了嘛,需要我给出一些建议吗,比如运动目标,运动频率或运动强度你会选择哪个呢?适当的建议可以减少运动造成的伤害”
|
|
|
-“你觉得在运动过程中,最让你困扰的是什么?是运动技巧还是运动强度呢?”
|
|
|
-“有没有什么运动是你一直想尝试但还没有机会的?我们可以一起聊聊!”
|
|
|
-2根据用户的详细描述给出康复方案,
|
|
|
-3引导收尾
|
|
|
-“今天聊得很开心呢!如果你还有其他问题或者想法,随时可以告诉我哦。”
|
|
|
-“如果你觉得今天的聊天已经足够了,我也很乐意下次再和你聊更多强身健体的话题!”
|
|
|
-“希望你能找到自己喜欢的运动风格,期待下次再见!”
|
|
|
-# 开始话语
|
|
|
-当您准备好了,可以以一个专业的康复教练的身份,向来访的用户打招呼。`);
|
|
|
- },
|
|
|
- onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
|
|
|
- console.log("onMessage",message)
|
|
|
- let content:any = message?.content
|
|
|
- if(typeof content == "string"){
|
|
|
+ chat.role.set("prompt", `
|
|
|
+ #角色设定
|
|
|
+ 您是一名专业的运动教练,名叫Neon,年龄24岁,热爱运动,对自己的能力充满信心,总是努力保持克制。与家人有着牢固而密切的联系。有强烈的服务意识。非常关心朋友。擅长根据用户的需求给出康复方案。您的风格亲切、活泼,自信旨在帮助用户找到最适合他们的康复方案。
|
|
|
|
|
|
- if(content?.indexOf("[运动方案完成]")>-1){
|
|
|
- console.log("运动方案已完成")
|
|
|
- consult.set({
|
|
|
- content:content
|
|
|
- })
|
|
|
- consult.save();
|
|
|
+ #对话环节
|
|
|
+ 0破冰,跟用户打招呼,并引导用户聊运动或健康的话题,可以慢慢引导,不要太突兀,比如:
|
|
|
+ “今天的心情怎么样?”
|
|
|
+ 1拓展话题
|
|
|
+ “你平时喜欢什么样的运动类型呢?有没有特别喜欢的运动项目比如篮球,跑步?”
|
|
|
+ “你受伤了嘛,需要我给出一些建议吗,比如运动目标,运动频率或运动强度你会选择哪个呢?适当的建议可以减少运动造成的伤害”
|
|
|
+ “你觉得在运动过程中,最让你困扰的是什么?是运动技巧还是运动强度呢?”
|
|
|
+ “有没有什么运动是你一直想尝试但还没有机会的?我们可以一起聊聊!”
|
|
|
+ 2根据用户的详细描述给出康复方案,
|
|
|
+ 3引导收尾
|
|
|
+ “今天聊得很开心呢!如果你还有其他问题或者想法,随时可以告诉我哦。”
|
|
|
+ “如果你觉得今天的聊天已经足够了,我也很乐意下次再和你聊更多强身健体的话题!”
|
|
|
+ “希望你能找到自己喜欢的运动风格,期待下次再见!”
|
|
|
+ # 开始话语
|
|
|
+ 当您准备好了,可以以一个专业的康复教练的身份,向来访的用户打招呼。
|
|
|
+ `);
|
|
|
+ },
|
|
|
+ onMessage: (chat: FmodeChat, message: FmodeChatMessage) => {
|
|
|
+ console.log("onMessage", message);
|
|
|
+ let content: any = message?.content;
|
|
|
+ if (typeof content == "string") {
|
|
|
+ if (content?.indexOf("[运动方案完成]") > -1) {
|
|
|
+ console.log("运动方案已完成");
|
|
|
+ consult.set({
|
|
|
+ content: content
|
|
|
+ });
|
|
|
+ consult.save();
|
|
|
+ }
|
|
|
}
|
|
|
+ },
|
|
|
+ onChatSaved: (chat: FmodeChat) => {
|
|
|
+ console.log("onChatSaved", chat, chat?.chatSession, chat?.chatSession?.id);
|
|
|
+ this.chatId = chat?.chatSession?.id;
|
|
|
}
|
|
|
- },
|
|
|
- onChatSaved:(chat:FmodeChat)=>{
|
|
|
- // chat?.chatSession?.id 本次会话的 chatId
|
|
|
- console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
|
|
|
- this.chatId = chat?.chatSession?.id
|
|
|
- }
|
|
|
+ };
|
|
|
+ openChatPanelModal(this.modalCtrl, options);
|
|
|
}
|
|
|
- openChatPanelModal(this.modalCtrl,options)
|
|
|
-}
|
|
|
|
|
|
- /**
|
|
|
- * 开始聊天
|
|
|
- */
|
|
|
- openChat(){
|
|
|
- let options:ChatPanelOptions = {
|
|
|
- roleId:"2DXJkRsjXK",
|
|
|
- onChatSaved:(chat:FmodeChat)=>{
|
|
|
- // chat?.chatSession?.id 本次会话的 chatId
|
|
|
- console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
|
|
|
- },
|
|
|
+ // 开始聊天
|
|
|
+ openChat() {
|
|
|
+ let options: ChatPanelOptions = {
|
|
|
+ roleId: "2DXJkRsjXK",
|
|
|
+ onChatSaved: (chat: FmodeChat) => {
|
|
|
+ console.log("onChatSaved", chat, chat?.chatSession, chat?.chatSession?.id);
|
|
|
+ },
|
|
|
+ };
|
|
|
+ openChatPanelModal(this.modalCtrl, options);
|
|
|
}
|
|
|
- openChatPanelModal(this.modalCtrl,options)
|
|
|
-}
|
|
|
-
|
|
|
- /**
|
|
|
- * 恢复聊天
|
|
|
- * @chatId 从onChatSaved生命周期中,获取chat?.chatSession?.id
|
|
|
- */
|
|
|
- restoreChat(chatId:string){
|
|
|
- let options:ChatPanelOptions = {
|
|
|
- roleId:"2DXJkRsjXK",
|
|
|
- chatId:chatId
|
|
|
- }
|
|
|
- openChatPanelModal(this.modalCtrl,options)
|
|
|
- }
|
|
|
-
|
|
|
-// 创建用于数据列表存储的属性
|
|
|
-UserProfileList:Array<CloudObject> = []
|
|
|
-// 查询并加载用户列表的函数
|
|
|
-async loadUserProfileList(){
|
|
|
- let query = new CloudQuery("UserProfile");
|
|
|
- this.UserProfileList = await query.find();
|
|
|
- console.log("UserProfileList",this.UserProfileList)
|
|
|
-}
|
|
|
-
|
|
|
|
|
|
+ // 恢复聊天
|
|
|
+ restoreChat(chatId: string) {
|
|
|
+ let options: ChatPanelOptions = {
|
|
|
+ roleId: "2DXJkRsjXK",
|
|
|
+ chatId: chatId
|
|
|
+ };
|
|
|
+ openChatPanelModal(this.modalCtrl, options);
|
|
|
+ }
|
|
|
}
|