character-detail.component.ts 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { Component, OnInit } from '@angular/core';
  2. import { ActivatedRoute, Router } from '@angular/router';
  3. import { CharacterService } from '../services/character.service';
  4. import { Character } from '../services/character.service';
  5. import { IonBackButton, IonButton, IonButtons, IonCard, IonCardContent, IonCardHeader, IonCardSubtitle,
  6. IonCardTitle, IonContent, IonHeader, IonTitle, IonToolbar, ModalController } from '@ionic/angular/standalone';
  7. import { CommonModule } from '@angular/common';
  8. import { ChatPanelOptions, FmodeChat, openChatPanelModal } from 'fmode-ng';
  9. @Component({
  10. selector: 'app-character-detail',
  11. templateUrl: './character-detail.component.html',
  12. styleUrls: ['./character-detail.component.scss'],
  13. standalone: true,
  14. imports: [IonHeader, IonToolbar, IonTitle, IonContent, IonCard, IonBackButton, IonButtons,
  15. IonCardHeader, IonCardTitle, IonCardSubtitle, IonCardContent, CommonModule, IonButton]
  16. })
  17. export class CharacterDetailComponent implements OnInit {
  18. character!: Character;
  19. characterNotFound: boolean = false;
  20. constructor(private route: ActivatedRoute, private characterService: CharacterService, private router: Router, private modalCtrl: ModalController) {}
  21. ngOnInit() {
  22. const characterId = this.route.snapshot.paramMap.get('id');
  23. if (characterId) {
  24. this.characterService.getCharacterById(characterId).subscribe(character => {
  25. if (character) {
  26. this.character = character;
  27. this.characterNotFound = false;
  28. } else {
  29. this.characterNotFound = true;
  30. console.error('角色未找到');
  31. }
  32. });
  33. }
  34. }
  35. startChat() {
  36. const chatOptions: ChatPanelOptions = {
  37. roleId: "2DXJkRsjXK",
  38. onChatInit: (chat: FmodeChat) => {
  39. // 设置智能体的名字为角色名称
  40. chat.role.set("name", this.character.name);
  41. let newAvatar = "https://nova-cloud.obs.cn-south-1.myhuaweicloud.com/storage/aigc/imagine/U6UU36FsN8-0.png?x-image-process=image/resize,m_fixed,w_300"
  42. chat.role.set("avatar", newAvatar); // 设置角色头像
  43. chat.role.set("desc", "新的角色简介");
  44. console.log(chat.role?.toJSON()) // 查看角色数据,内部属性均可覆盖
  45. // 决赛设定
  46. chat.role.set("prompt", `你的名字是${this.character.name},你将作为${this.character.name}和用户聊天,
  47. 你的性别是${this.character.gender},你有着${this.character.appearance}外貌,你的性格是${this.character.personality},
  48. 请你在聊天过程中,按照你的人物设定和用户进行对话,并且当你准备好了时,请开始聊天`);
  49. // 设置角色的外貌特征和性格特点
  50. chat.role.set("appearance", this.character.appearance);
  51. chat.role.set("personality", this.character.personality);
  52. // 设置角色头像
  53. chat.role.set("avatar", this.character.avatar);
  54. },
  55. onChatSaved: (chat: FmodeChat) => {
  56. console.log("onChatSaved",chat,chat?.chatSession,chat?.chatSession?.id);
  57. // 在后端设置一张表,记录当前用户、对话角色,还有chatId为chat?.chatSession?.id
  58. // 页面中加载历史对话表,循环时候,调用restoreChat()将存储的chatId传入,即可实现
  59. },
  60. };
  61. openChatPanelModal(this.modalCtrl, chatOptions);
  62. }
  63. restoreChat(chatId:string){
  64. let options:ChatPanelOptions = {
  65. roleId:"2DXJkRsjXK",
  66. chatId:chatId
  67. }
  68. openChatPanelModal(this.modalCtrl,options)
  69. }
  70. }