|
|
@@ -136,6 +136,88 @@ export class Tab3Page {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+ /** 示例:角色聊天面板 */
|
|
|
+ async openrole(filmrole:CloudObject){
|
|
|
+ //验证用户登录
|
|
|
+ let currentUser = new CloudUser();
|
|
|
+ if(!currentUser?.id){
|
|
|
+ console.log("用户未登录,请登录后重试");
|
|
|
+ let user = await openUserLoginModal(this.modalCtrl);
|
|
|
+ if(!user?.id){
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ localStorage.setItem("company","E4KpGvTEto")
|
|
|
+
|
|
|
+ let filmchat = new CloudObject("FilmChat");
|
|
|
+ let now = new Date();
|
|
|
+ let dateStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
|
|
|
+ filmchat.set({
|
|
|
+ title:`${currentUser?.get("username")}与${filmrole?.get("name")}的聊天记录${dateStr}`,
|
|
|
+ filmrole:filmrole.toPointer(),
|
|
|
+ user:currentUser.toPointer(),
|
|
|
+ })
|
|
|
+
|
|
|
+ // let chatMessages: string[] = []; // 用于保存所有聊天记录
|
|
|
+
|
|
|
+ let options:ChatPanelOptions = {
|
|
|
+ roleId:"2DXJkRsjXK",
|
|
|
+ onChatInit:(chat:FmodeChat)=>{
|
|
|
+ console.log("onChatInit");
|
|
|
+ console.log("预设角色",chat.role);
|
|
|
+ chat.role.set("name",filmrole?.get("name"));
|
|
|
+ chat.role.set("age",filmrole?.get("age"));
|
|
|
+ chat.role.set("title",filmrole?.get("title"));
|
|
|
+ chat.role.set("desc",filmrole?.get("desc"));
|
|
|
+ // chat.role.set("tags",["全能","活泼开朗"]);
|
|
|
+ chat.role.set("avatar",filmrole?.get("avatar") || "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/Q4Zif7fTbK-0.png")
|
|
|
+ chat.role.set("prompt",`
|
|
|
+# 角色设定
|
|
|
+你是${filmrole?.get("title")},你叫${filmrole?.get("name")},大家一般叫你${filmrole?.get("nickname")},你的背景描述如下${filmrole?.get("description")},你的性格特点如下${filmrole?.get("traits")},需要完成一次轻松愉快陪聊服务。
|
|
|
+
|
|
|
+# 对话环节
|
|
|
+1.开始话题(根据角色设定陪用户聊天)
|
|
|
+2.主动提出话题
|
|
|
+- 先破冰,介绍自己,引导用户介绍他自己。
|
|
|
+4.话题走向
|
|
|
+- 根据设定的剧情背景,性格特点等等陪用户聊天。
|
|
|
+4.结束聊天
|
|
|
+- 委婉的和用户结束聊天,若用户还想继续聊天可以再陪伴一会儿。
|
|
|
+- 若用户有结束聊天的意愿,在聊天的最后表达期待和用户的下次聊天。在消息结尾附带: [完成]
|
|
|
+
|
|
|
+# 开始话语
|
|
|
+当你准备好了,可以以${filmrole?.get("name")}的身份,向用户打招呼,开启话题。`);
|
|
|
+ },
|
|
|
+ onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
|
|
|
+ console.log("onMessage",message)
|
|
|
+ let content:any = message?.content
|
|
|
+ if(typeof content == "string"){
|
|
|
+ // if(content?.indexOf("[完成]")>-1){
|
|
|
+ // console.log("陪聊已完成")
|
|
|
+
|
|
|
+ filmchat.set({
|
|
|
+ dialogue: content // 保存聊天内容
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ filmchat.save()
|
|
|
+
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ onChatSaved:(chat:FmodeChat)=>{
|
|
|
+ // chat?.chatSession?.id 本次会话的 chatId
|
|
|
+ console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ openChatPanelModal(this.modalCtrl,options)
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
// openChat(){
|
|
|
// let options:ChatPanelOptions = {
|
|
|
// roleId:"2DXJkRsjXK",
|
|
|
@@ -191,14 +273,20 @@ export class Tab3Page {
|
|
|
ngOnInit() {
|
|
|
// 生命周期:页面加载后,运行医生列表加载函数
|
|
|
this.loadFilmPartnerList()
|
|
|
+ this.loadFilmRoleList()
|
|
|
}
|
|
|
|
|
|
// 创建用于数据列表存储的属性
|
|
|
filmpartnerList:Array<CloudObject> = []
|
|
|
+ filmroleList:Array<CloudObject> = []
|
|
|
// 查询并加载列表的函数
|
|
|
async loadFilmPartnerList(){
|
|
|
let query = new CloudQuery("FilmPartner");
|
|
|
this.filmpartnerList = await query.find()
|
|
|
}
|
|
|
+ async loadFilmRoleList(){
|
|
|
+ let query = new CloudQuery("FilmRole");
|
|
|
+ this.filmroleList = await query.find()
|
|
|
+ }
|
|
|
}
|
|
|
|