import { Component, OnInit } from '@angular/core'; import { CommonModule } from '@angular/common'; import { FormsModule } from '@angular/forms'; import { IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonTextarea, IonInput, IonBackButton, IonButtons, IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonCol, IonRow, IonLabel, IonGrid } from '@ionic/angular/standalone'; import { FmodeChatCompletion, MarkdownPreviewModule } from 'fmode-ng'; @Component({ selector: 'app-character-generator', templateUrl: './character-generator.page.html', styleUrls: ['./character-generator.page.scss'], standalone: true, imports: [ CommonModule, // 确保 CommonModule 已经导入 FormsModule, IonHeader, IonToolbar, IonTitle, IonContent, IonButton, IonTextarea, IonInput, IonBackButton, IonButtons, IonCardContent, IonCardTitle, IonCardHeader, IonCard, IonCol, IonRow, IonLabel, IonGrid, // 引入fm-markdown-preview组件模块 MarkdownPreviewModule ], }) export class CharacterGeneratorPage implements OnInit { constructor() { } ngOnInit() { } types = [ '重生', '都市', '穿越', '玄幻', '系统文', '搞笑轻松', '历史古代', '武侠', '奇幻仙侠', '修仙', '末日求生', '东方玄幻', '异能', '科幻末世', '规则怪谈', '悬疑脑洞', '异世大陆', '种田文', '悬疑推理', '无脑爽文', '战神赘婿', '克苏鲁', '穿书' ]; selectedType: string = '重生'; selectType(type: string) { this.selectedType = type; } gender = [ '男', '女' ]; selectedGender: string = '男'; // 修改默认值 selectGender(gender: string) { this.selectedGender = gender; } userPrompt: string = "一个高中生,来自一个神秘的学校。"; promptInput(ev: any) { this.userPrompt = ev.detail.value; } responseMsg: any = ""; isComplete: boolean = false; sendMessage() { console.log("create"); let PromptTemplate = ` 您作为一名专业的${this.selectedType}小说作者,请您根据用户提供的期望描述,给出一个性别为${this.selectedGender}、符合${this.selectedType}类型特点的人物描述。 以下是用户的期望描述:${this.userPrompt} `; // 添加系统角色提示 let systemPrompt = ` 你是一名专业的小说作者,擅长各种类型的小说创作。请根据用户提供的信息,生成一个符合特定类型特点的人物描述。 `; let completion = new FmodeChatCompletion([ { role: "system", content: systemPrompt }, { role: "user", content: PromptTemplate } ]); completion.sendCompletion().subscribe((message: any) => { console.log(message.content); this.responseMsg = message.content; if (message?.complete) { this.isComplete = true; } }); } copyToClipboard() { const textarea = document.createElement('textarea'); textarea.value = this.responseMsg; document.body.appendChild(textarea); textarea.select(); document.execCommand('copy'); document.body.removeChild(textarea); alert('内容已复制到剪贴板'); } }