tool6.page.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import { Component, OnInit } from '@angular/core';
  2. import { IonicModule, LoadingController } from '@ionic/angular';
  3. import { FormsModule } from '@angular/forms';
  4. import { Router } from '@angular/router';
  5. import { FmodeChatCompletion, MarkdownPreviewModule } from 'fmode-ng';
  6. import { CompWordEntryComponent } from '../comp-word-entry/comp-word-entry.component';
  7. import { CloudObject, CloudQuery, CloudUser } from '../lib/ncloud';
  8. import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton,IonIcon, ModalController, IonTextarea, IonInput, IonCard, IonCardHeader, IonCardTitle, IonThumbnail, IonCardContent, IonCardSubtitle, IonItem, IonList, IonLabel, IonAvatar, IonSelect, IonSelectOption, AlertController, IonButtons, IonProgressBar, IonText } from '@ionic/angular/standalone';
  9. import { CommonModule } from '@angular/common';
  10. import { AvatarModule, ChatPanelOptions, DalleOptions, FmodeChat, FmodeChatMessage, ImagineWork, openChatPanelModal } from 'fmode-ng';
  11. @Component({
  12. selector: 'app-tool6',
  13. templateUrl: './tool6.page.html',
  14. styleUrls: ['./tool6.page.scss'],
  15. standalone: true,
  16. imports: [
  17. IonicModule,
  18. FormsModule,
  19. MarkdownPreviewModule,
  20. CompWordEntryComponent,
  21. // IonHeader,
  22. // IonToolbar,
  23. // IonTitle,
  24. // IonContent,
  25. // IonButton,
  26. // IonTextarea,
  27. // IonInput,
  28. IonIcon,
  29. IonCard,
  30. IonCardHeader,
  31. IonCardTitle,
  32. IonCardSubtitle,
  33. IonCardContent,
  34. IonThumbnail,
  35. IonItem,
  36. IonList,
  37. CommonModule,
  38. IonLabel,
  39. IonAvatar,
  40. IonSelect,
  41. IonSelectOption,
  42. // IonButtons,
  43. IonProgressBar,
  44. IonText
  45. ],
  46. })
  47. export class Tool6Page implements OnInit {
  48. constructor(private router: Router) {
  49. this.currentUser = new CloudUser();
  50. }
  51. ngOnInit() { }
  52. currentUser: CloudUser;
  53. // 用户输入提示词
  54. titlel: string = "";
  55. titleInput(ev: any) {
  56. console.log(ev.detail.value);
  57. this.titlel = ev.detail.value;
  58. }
  59. style: string = "";
  60. styleInput(ev: any) {
  61. this.style = ev.detail.value;
  62. }
  63. // 生成的小说大纲
  64. generatedOutline: string = "";
  65. // 属性:组件内用于展示消息内容的变量
  66. responseMsg: any = "";
  67. // 方法:实例化completion对象,传入消息数组,并订阅生成的可观察对象。
  68. isComplete: boolean = false; // 定义完成状态属性,用来标记是否补全完成
  69. sendMessage() {
  70. console.log("create");
  71. let PromptTemplate = `
  72. 您作为一名专业的小说作者,请您根据用户提供的要求${this.style},给出小说世界架构,要求做到系统性:世界架构应具备完整的系统性,包括政治、经济、文化、社会结构、宗教信仰等各个方面,形成一个相互关联的整体。
  73. 逻辑性:世界的规则和设定应具有内在逻辑,确保各种元素之间的关系合理,避免出现不合常理的情况。
  74. 丰富性:世界应具有丰富的细节,包括地理环境、历史背景、种族文化等,能够让读者感受到一个生动而多元的世界。
  75. 可探索性:好的世界架构应允许角色和读者探索不同的地域、文化和历史,激发好奇心和冒险精神。
  76. 一致性:世界设定应在整个故事中保持一致,确保角色的行为和情节的发展符合世界的规则和背景。
  77. 动态性:世界应具有动态变化的特性,包括历史的演变、政治的变迁和文化的交融,使故事充满活力。
  78. 冲突与张力:世界架构中应包含各种冲突和张力,包括种族之间、国家之间或文化之间的对立,推动情节的发展。
  79. 多样性:好的世界架构应包含多种文化、种族和社会形态,反映出人类社会的多样性和复杂性。
  80. 角色的影响:角色在世界中的地位和影响力应得到合理体现,角色的行动能够对世界产生实质性的影响。
  81. 情感共鸣:世界架构应能够引发读者的情感共鸣,使他们能够与故事中的角色和事件产生联系,增强代入感。但是你不用对于特点进行详细介绍
  82. `;
  83. console.log(PromptTemplate);
  84. let completion = new FmodeChatCompletion([
  85. { role: "system", content: "" },
  86. { role: "user", content: PromptTemplate }
  87. ]);
  88. completion.sendCompletion().subscribe((message: any) => {
  89. // 打印消息体
  90. console.log(message.content);
  91. // 赋值消息内容给组件内属性
  92. this.responseMsg = message.content;
  93. if (message?.complete) { // 判断message为完成状态,则设置isComplete为完成
  94. this.isComplete = true;
  95. // 将生成的小说大纲放入文本框中
  96. this.generatedOutline = this.responseMsg;
  97. }
  98. });
  99. }
  100. saveNovel() {
  101. let consult = new CloudObject("NovelAriticle")
  102. let now = new Date();
  103. let dateStr = `${now.getFullYear()}-${now.getMonth()+1}-${now.getDate()}`
  104. // 对象权限的精确指定
  105. let completion = new FmodeChatCompletion([
  106. {role:"system",content:""},
  107. ])
  108. completion.sendCompletion().subscribe((message:any)=>{
  109. // 打印消息体
  110. console.log(message.content)
  111. // 赋值消息内容给组件内属性
  112. if (message?.complete ) {
  113. consult.set({
  114. user: this.currentUser.toPointer(),
  115. username: this.currentUser.data["username"],
  116. required: `${this.style}`,
  117. content2: `${this.generatedOutline}`,
  118. date: dateStr,
  119. title :`世界架构`,
  120. category: `工具箱内容`
  121. });
  122. consult.save();
  123. console.log(consult);
  124. }
  125. })
  126. }
  127. }