using System.Collections.Generic; using Fort23.Core; using Fort23.UTool; using UnityEngine; namespace Fort23.Mono { [UIBinding(prefab = "ChatPanel")] public partial class ChatPanel : UIPanel { private DeepSeekAI deepSeekAI = new DeepSeekAI("sk-9f161d962acd420e882941b5e41dd3ae"); private DeepSeekAI huoSahnAI = new DeepSeekAI("4001c395-31cb-4d27-bec8-8f03cae63c2d"); private List messages = new List(); private bool isSend = false; private void Init() { isAddStack = true; IsShowAppBar = false; } protected override void AddEvent() { } protected override void DelEvent() { } public override void AddButtonEvent() { Btn_Send.onClick.AddListener(() => { SendMessage(); }); Btn_Close.onClick.AddListener(() => { UIManager.Instance.HideUIUIPanel(this); }); } private async CTask CreatMessageWidget(bool isUser, string message) { GameObject widget = isUser ? UserChatMessageWidget : SysteamChatWidget; ChatMessageWidget chatMessageWidget = await UIManager.Instance.CreateGComponentForObject(widget, null, Content, isInstance: true); chatMessageWidget.CustomInit(message); } public async override CTask AsyncInit(object[] uiData) { AssetHandle assetHandle = await AssetBundleLoadManager.Instance.LoadAssetAsyncTask("repository.txt"); TextAsset ta = assetHandle.AssetObject(); var systeamMessage = new ChatMessage { role = "system", content = ta.text, }; messages.Add(systeamMessage); return await base.AsyncInit(uiData); } private async void SendMessage() { if (isSend) return; isSend = true; var userMessage = new ChatMessage { role = "user", content = InputField.text }; messages.Add(userMessage); //生成消息ui await CreatMessageWidget(true, userMessage.content); var request = new ChatCompletionRequest { // model = "deepseek-chat", model = "doubao-1.5-pro-32k-250115", messages = messages, max_tokens = 4096, }; var response = await huoSahnAI.SendChatCompletionToDeepSeek(request); if (response?.choices != null && response.choices.Count > 0) { var assistantMessage = response.choices[0].message; messages.Add(assistantMessage); await CreatMessageWidget(false, assistantMessage.content); isSend = false; } else { LogTool.Warning("No response from DeepSeek."); isSend = false; } InputField.text = ""; } public async static CTask OpenPanel() { EventSystemManager.Instance.isOpenUi = true; await UIManager.Instance.LoadAndOpenPanel(null); } public override void Close() { EventSystemManager.Instance.isOpenUi = false; isSend = false; UIManager.Instance.DormancyAllGComponent(); messages.Clear(); base.Close(); } } }