ChatPanel.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using System.Collections.Generic;
  2. using Fort23.Core;
  3. using Fort23.UTool;
  4. using UnityEngine;
  5. namespace Fort23.Mono
  6. {
  7. [UIBinding(prefab = "ChatPanel")]
  8. public partial class ChatPanel : UIPanel
  9. {
  10. private DeepSeekAI deepSeekAI = new DeepSeekAI("sk-9f161d962acd420e882941b5e41dd3ae");
  11. private List<ChatMessage> messages = new List<ChatMessage>();
  12. private bool isSend = false;
  13. private void Init()
  14. {
  15. isAddStack = false;
  16. IsShowAppBar = false;
  17. }
  18. protected override void AddEvent()
  19. {
  20. }
  21. protected override void DelEvent()
  22. {
  23. }
  24. public override void AddButtonEvent()
  25. {
  26. Btn_Send.onClick.AddListener(() => { SendMessage(); });
  27. Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); });
  28. }
  29. private async CTask CreatMessageWidget(bool isUser, string message)
  30. {
  31. GameObject widget = isUser ? UserChatMessageWidget : SysteamChatWidget;
  32. ChatMessageWidget chatMessageWidget = await UIManager.Instance.CreateGComponentForObject<ChatMessageWidget>(widget, null, Content, isInstance: true);
  33. chatMessageWidget.CustomInit(message);
  34. }
  35. public async override CTask<bool> AsyncInit(object[] uiData)
  36. {
  37. AssetHandle assetHandle = await AssetBundleLoadManager.Instance.LoadAssetAsyncTask<TextAsset>("repository.txt");
  38. TextAsset ta = assetHandle.AssetObject<TextAsset>();
  39. var systeamMessage = new ChatMessage
  40. {
  41. role = "system",
  42. content = ta.text,
  43. };
  44. messages.Add(systeamMessage);
  45. return await base.AsyncInit(uiData);
  46. }
  47. private async void SendMessage()
  48. {
  49. if (isSend)
  50. return;
  51. isSend = true;
  52. var userMessage = new ChatMessage
  53. {
  54. role = "user",
  55. content = InputField.text
  56. };
  57. messages.Add(userMessage);
  58. //生成消息ui
  59. await CreatMessageWidget(true, userMessage.content);
  60. var request = new ChatCompletionRequest
  61. {
  62. model = "deepseek-chat",
  63. messages = messages,
  64. max_tokens = 1024,
  65. };
  66. var response = await deepSeekAI.SendChatCompletionToDeepSeek(request);
  67. if (response?.choices != null && response.choices.Count > 0)
  68. {
  69. var assistantMessage = response.choices[0].message;
  70. messages.Add(assistantMessage);
  71. await CreatMessageWidget(false, assistantMessage.content);
  72. isSend = false;
  73. }
  74. else
  75. {
  76. LogTool.Warning("No response from DeepSeek.");
  77. isSend = false;
  78. }
  79. InputField.text = "";
  80. }
  81. public async static CTask OpenPanel()
  82. {
  83. EventSystemManager.Instance.isOpenUi = true;
  84. await UIManager.Instance.LoadAndOpenPanel<ChatPanel>(null);
  85. }
  86. public override void Close()
  87. {
  88. EventSystemManager.Instance.isOpenUi = false;
  89. isSend = false;
  90. UIManager.Instance.DormancyAllGComponent<ChatMessageWidget>();
  91. messages.Clear();
  92. base.Close();
  93. }
  94. }
  95. }