page-chat.component.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { Component } from '@angular/core';
  2. import { TestChatCompletion, TestChatMessage } from '../class-chat-completion';
  3. // 引入Parse第三方库
  4. import * as Parse from "parse"
  5. @Component({
  6. selector: 'app-page-chat', // 组件的选择器,用于在模板中引用组件
  7. templateUrl: './page-chat.component.html', // 组件的模板文件路径
  8. styleUrls: ['./page-chat.component.scss'] // 组件的样式文件路径
  9. })
  10. export class PageChatComponent {
  11. currentUser = Parse.User.current() // 当前用户对象
  12. currentTab: string = 'all'; // 当前选项卡的标识符
  13. changeTab(tab: string) {
  14. this.currentTab = tab;
  15. }
  16. messageList: Array<TestChatMessage> = [] // 消息列表数组
  17. userInput: string = "" // 用户输入的内容
  18. completion: TestChatCompletion | undefined // 完成对象
  19. constructor() {
  20. this.ref() // 调用ref方法加载AI定制对话的20条消息
  21. }
  22. // 加载AI定制对话的20条消息
  23. async ref() {
  24. let query = new Parse.Query('AIPet') // 创建Parse查询对象
  25. query.equalTo('user', Parse.User.current()?.id) // 设置查询条件,筛选出当前用户的消息
  26. query.descending('createdAt') // 按照创建时间降序排序
  27. query.limit(20) // 设置查询结果的数量上限为20条
  28. let request = await query.find() // 执行查询
  29. request.forEach(item => {
  30. this.messageList.push({
  31. role: "user",
  32. content: item.get('userMessage')
  33. }) // 将用户消息添加到消息列表中
  34. this.messageList.push({
  35. role: "assistant",
  36. content: item.get('aiMessage')
  37. }) // 将AI助手的消息添加到消息列表中
  38. })
  39. }
  40. send() {
  41. this.messageList.push({
  42. role: "user",
  43. content: this.userInput
  44. }) // 将用户输入的消息添加到消息列表中
  45. let obj = Parse.Object.extend('AIPet') // 创建Parse对象
  46. let AIPet = new obj() // 创建AIRecipe对象
  47. AIPet.set('user', {
  48. __type: 'Pointer',
  49. className: '_User',
  50. objectId: Parse.User.current()?.id
  51. }) // 设置AIRecipe对象的user字段为当前用户的指针
  52. AIPet.set('userMessage', this.userInput) // 设置AIPet对象的userMessage字段为用户输入的消息
  53. this.completion = new TestChatCompletion(this.messageList) // 创建TestChatCompletion对象,并传入消息列表
  54. this.completion?.createCompletionByStream(async (isComplete: Boolean) => {
  55. if (isComplete) {
  56. let currentBackMsg = this.messageList[this.messageList.length - 1]
  57. console.log(currentBackMsg);
  58. AIPet.set('aiMessage', currentBackMsg?.content) // 设置AIPet对象的aiMessage字段为AI助手的回复消息
  59. await AIPet.save() // 保存AIPet对象到Parse数据库
  60. console.log('已保存');
  61. }
  62. }) // 通过流式API创建完成对象,并传入回调函数
  63. this.userInput = "" // 清空用户输入
  64. console.log(this.messageList);
  65. }
  66. // AI计划
  67. planOptions: any = {
  68. gender: "未知",
  69. targets: []
  70. } // 计划选项对象,包含性别和目标属性
  71. setOption(key: string, event: any) {
  72. this.planOptions[key] = event.detail.value; // 更新计划选项对象的属性值
  73. }
  74. sendPlan() {
  75. let content = `宠物的性别:${this.planOptions.gender},品种,年龄:,体重,
  76. 信息:${this.planOptions.targets?.join(";")}
  77. 补充:
  78. 请扮演符合上述信息既可爱又体贴的宠物陪伴我聊天
  79. ` // 构建计划的内容字符串
  80. console.log(content)
  81. return
  82. this.messageList.push({
  83. role: "user",
  84. content: content
  85. }) // 将计划的内容添加到消息列表中
  86. this.completion = new TestChatCompletion(this.messageList) // 创建TestChatCompletion对象,并传入消息列表
  87. this.completion?.createCompletionByStream() // 通过流式API创建完成对象
  88. this.userInput = "" // 清空用户输入
  89. }
  90. }