ChatPanel.cs 3.5 KB

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