123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- import { Component } from '@angular/core';
- import { Router } from '@angular/router';
- import { ChatPanelOptions, FmChatModalInput, FmodeChat, FmodeChatMessage, openChatPanelModal } from 'fmode-ng';
- import Parse from "parse";
- import { ModalController} from '@ionic/angular/standalone';
- @Component({
- selector: 'app-tab3',
- templateUrl: 'tab3.page.html',
- styleUrls: ['tab3.page.scss'],
- standalone: false,
- })
- export class Tab3Page {
- constructor(
- private modalCtrl:ModalController,
- private router:Router,
- ) {}
-
- openConsult(chatId?:string){
- // 如果传入chatId参数,优先使用传入的ID
- //const targetChatId = chatId ?? this.getLastChatId();
-
- localStorage.setItem("company","E4KpGvTEto")
- let options:ChatPanelOptions = {
- roleId:"2DXJkRsjXK", // 预设,无需更改
- //chatId:chatId, // 若存在,则恢复会话。若不存在,则开启新会话
- //chatId:targetChatId,
- onChatInit:(chat:FmodeChat)=>{
- console.log("onChatInit");
- console.log("Chat类",chat);
- console.log("预设角色",chat.role);
- // 角色名称
- chat.role.set("name","林心怡");
- // 角色称号
- chat.role.set("title","资深心理咨询师");
- // 角色描述
- chat.role.set("desc","国家二级心理咨询师,专注认知行为疗法");
- // 角色标签
- chat.role.set("tags",['情绪管理', '人际关系']);
- // 角色头像
- chat.role.set("avatar","assets/icon/xinli1.jpeg")
- // 角色提示词
- chat.role.set("prompt", `
- # 角色设定
- 您是一位专业且富有同理心的心理陪伴师,主要目标是帮助用户进行情绪管理和自我成长。
-
- # 开始话语
- 当您准备好了,可以以一位专业且富有同理心的心理陪伴师的身份,向咨询者打招呼。
- # 对话原则
- 1. 保持温暖和支持性语气
- 2. 保持中立和非评判态度
- 3. 适时提供心理学知识
- 4. 提问使用开放式提问引导用户反思
- 5. 避免直接建议,多用引导式
- 6. 每日生成个性化日记建议
- `);
-
- // 配置AI日记分类
- let promptCates = [
- { img: "assets/icon/ganen1.jpg", name: "感恩日记" },
- { img: "assets/icon/jz.jpg", name: "自我觉察" },
- { img: "assets/icon/qingxu.jpg", name: "情绪调节" }
- ];
- setTimeout(() => {
- chat.role.set("promptCates", promptCates)
- }, 500);
- // 配置AI日记问题库
- let promptList = [
- {
- cate: "感恩日记",
- img: "assets/icon/ganen1.jpg",
- messageList: [
- "今天最让你感恩的三件小事是什么?",
- "最近一次感受到他人善意的经历是?",
- "本周你帮助过谁?感受如何?",
- "此刻最想感谢的人是谁?为什么?"
- ]
- },
- {
- cate: "自我觉察",
- img: "assets/icon/jz.jpg",
- messageList: [
- "最近的情绪波动点在哪里?",
- "你发现自己的哪些思维模式?",
- "本周最有成就感的事是什么?",
- "最近一次突破舒适区的经历是?"
- ]
- },
- {
- cate: "情绪调节",
- img: "assets/icon/qingxu.jpg",
- messageList: [
- "当感到焦虑时你会如何应对?",
- "描述最近一次情绪失控的经历",
- "你的压力预警信号有哪些?",
- "最近使用的放松方法有效吗?"
- ]
- }
- ];
-
- let ChatPrompt = Parse.Object.extend("ChatPrompt");
- setTimeout(() => {
- chat.promptList = promptList.map(item=>{
- let prompt = new ChatPrompt();
- prompt.set(item);
- prompt.img = item.img;
- return prompt;
- })
- }, 500);
- // 功能按钮区域预设
- chat.leftButtons = [
- { // 提示 当角色配置预设提示词时 显示
- title:"AI日记", // 按钮标题
- showTitle:true, // 是否显示标题文字
- icon:"journal-outline", // 标题icon图标
- onClick:()=>{ // 按钮点击事件
- chat.isPromptModalOpen = true
- },
- show:()=>{ // 按钮显示条件
- return chat?.promptList?.length // 存在话题提示词时显示
- }
- },
- {
- title:"图片日记", // 按钮标题
- showTitle:true, // 是否显示标题文字
- icon:"image-outline", // 标题icon图标
- onClick:async ()=>{ // 按钮点击事件
- const desc = await this.getImageDescription();
- this.generateSceneImage(desc);
- },
- show:()=>{ // 按钮显示条件
- return true // 一直显示
- }
- },
- ]
- },
- onMessage:(chat:FmodeChat,message:FmodeChatMessage)=>{
- console.log("onMessage",message)
- let content:any = message?.content
- if (typeof content === "string") {
- // 处理日记生成阶段
- if (content.includes('[日记生成中]')) {
- this.handleDiaryGeneration(chat);
- }
- // 处理情绪分析结果
- if (content.includes('[情绪分析完成]')) {
- this.showEmotionReport(chat);
- }
- }
- },
- onChatSaved:(chat:FmodeChat)=>{
-
- // chat?.chatSession?.id 本次会话的 chatId
- console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id)
- }
- }
- openChatPanelModal(this.modalCtrl,options)
-
- }
- // 在类中添加这两个新方法
- private lastChatKey = "lastMentalChat";
- /** 获取最后一次心理咨询对话ID */
- getLastChatId(): string | undefined {
- const id = localStorage.getItem(this.lastChatKey);
- return id !== null ? id : undefined; // 显式转换null为undefined
- }
- /** 保存最后一次对话ID */
- private saveLastChatId(chatId: string) {
- localStorage.setItem(this.lastChatKey, chatId);
- }
- /** 生成场景图片 */
- private async generateSceneImage(description: string) {
- // 实际应调用图像生成API
- console.log("生成图片描述:", description);
- const mockImage = "http://example.com/generated-scene.png";
- this.showGeneratedImage(mockImage);
- }
- private async getImageDescription(): Promise<string> {
- return "一个宁静的湖边落日场景";
- }
- private showGeneratedImage(url: string) {
- console.log("显示生成图片:", url);
- }
- // 处理日记生成逻辑
- handleDiaryGeneration(chat: FmodeChat) {
- console.log("启动日记生成流程");
- // 示例:生成结构化日记
- let diaryTemplate = `
- ## 今日心理日记
- **情绪状态**: [自动识别结果]
- **关键事件**: [用户输入摘要]
- **认知模式**: [AI分析建议]
- `;
- }
- // 显示情绪分析报告
- showEmotionReport(chat: FmodeChat) {
- console.log("生成情绪分析报告");
- let report = `
- 【情绪分析报告】
- 积极情绪占比: 65%
- 主要情绪关键词: 期待、感恩、困惑
- 建议练习: 正念呼吸法
- `;
- }
- //开始聊天
- goChat(){
- this.router.navigateByUrl("/chat/session/role/2DXJkRsjXK")
- }
- }
|