iT邦幫忙

2024 iThome 鐵人賽

DAY 30
0
Software Development

就是要來點 A.I. 的 TopAOAIConnector App系列 第 30

EP 30 - 進階處理應用在聊天時的 UI 效果 (III)

  • 分享至 

  • xImage
  •  

Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~

在本系列文會展開使用 Avalonia UI 技術所建立的 TopAOAIConnector App 。由於使用 Avalonia UI 可以很快速的進行各平台的 桌面 應用程式開發,並且透過此 TopAOAIConnector App 來串接 Azure OpenAI Service 時所需的功能研究。

本篇是 就是要來點 A.I. 的 TopAOAIConnector App 系列文的 EP30。


EP 29 的調整完畢後,整體雖能夠連續傳檔跟詢問問題,但在操作上仍會發現一些錯誤顯示的狀況。

在本回來處理一下吧!


首先,找到 ViewModels/ChatPageViewModel.cs 的 ChatPageViewModel 類別,幫其設計增加一個欄位。

private string lastFileName = string.Empty;

完成如下圖紅框:
01-1

再找到 ChatPageViewModel 類別當中的 Attach 方法,在 if 判斷的條件增加一個判段敘述本為:

if (!string.IsNullOrEmpty(fileContent) && messages.Count > 1)

替換為:

if (!string.IsNullOrEmpty(fileContent) && messages.Count > 1 && !string.IsNullOrEmpty(lastFileName))

在 Attach 方法最後的 if 判斷是否呼叫 Aoai 回應的部分也做調整,原本為:

if (!isInputTextEmpty)

替換為:

if (!isInputTextEmpty || messages.Count > 2)

改變處如下圖紅框:
01-2

繼續找到 ChatPageViewModel 類別當中的 BuildInline 方法,在前一回的 if 判斷內容稍作改變,找到原本撰寫:

fileName = string.Empty;

在其上方增加:

lastFileName = fileName;

改變處如下圖紅框:
01-3

而由於改變顯示的處理,所以相對的有可能改變 ChatText 的部分還要控制調整一下,例如在 ChatPage 用來選取不同系統角色扮演的 ComboBox 。

繼續找到 ChatPageViewModel 類別當中的 Selected 方法,原本撰寫:

private void Selected()
{
    System.Diagnostics.Debug.WriteLine("Selected...");

    messages.Clear();
    messages.Add(ChatMessage.CreateSystemMessage(SelectedSystemRole!.Prompt));

    ChatText = $"Welcome to TopAOAIConnector!{Environment.NewLine}";
}

變更其方法設計與內容:

private void Selected(Control control)
{
    System.Diagnostics.Debug.WriteLine("Selected...");

    if (control is not null && control is SelectableTextBlock selectableTextBlock)
    {
        messages.Clear();
        messages.Add(ChatMessage.CreateSystemMessage(SelectedSystemRole!.Prompt));

        InputText = string.Empty;

        fileName = string.Empty;
        fileContent = string.Empty;

        selectableTextBlock.Inlines?.Clear();

        appandText = $"Welcome to TopAOAIConnector!{Environment.NewLine}";
        selectableTextBlock.Text = ChatText = appandText;
    }
}

調整處如下圖紅框:
02-1

另外也還需變更一下 Views/ChatPageView 的使用 SelectedCommand 的 ComboBox:

<InvokeCommandAction Command="{Binding SelectedCommand}" />

將 selectableTextBlock 透過 CommandParameter 傳遞:

<InvokeCommandAction Command="{Binding SelectedCommand}" CommandParameter="{Binding #mainChatText}" />

調整處如下圖紅框:
02-2

接著來偵錯執行(F5)與測試看看吧!

首先,在 ChatPage 當中先確認在 ComboBox 的選項中有不同的系統角色扮演,若沒有的話請到 SettingPage 當中新增:
03-1

輸入 "總結下列新聞為 40 字。" 的問題,直接點選 "Send":
03-2

等待回應與顯示結果:
03-3

附加新聞內容檔案,並等待回應與顯示結果:
03-4

輸入 "其中提到的人物名稱有?" 的問題,直接點選 "Send":
03-5

等待回應與顯示結果:
03-6

切換到 "Movie Reviewer Role" 的系統角色扮演,按照設計切換後先前的對話紀錄與畫面都會清除:
04-1

輸入 "在這部電影的男女主角扮演的情感表現特別有帶入到原著的描繪。":
04-2

等待回應與顯示結果:
04-3

輸入 "電影的改編與原著差異似乎很大。":
04-4

等待回應與顯示結果:
04-5

完成!!!


上一篇
EP 29 - 進階處理應用在聊天時的 UI 效果 (II)
系列文
就是要來點 A.I. 的 TopAOAIConnector App30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言