iT邦幫忙

2026 iThome 鐵人賽

DAY 18
0
AI Engineering

30 天從資料處理、分析到生成式 AI 的整合應用與實作學習系列 第 18 篇

資料輸入方式:Scanner 與 HTTP Request

  • 分享至 

  • xImage
  •  

昨天在遇到 Gemini API 過載的問題,讓我發現從使用者的角度來看感覺只問了一個問題,但實際上背後需要和 Gemini API request 兩次。這也讓我意識到,按照之前想把睡眠分析助手做成 LINE Bot,這個背後其實需要經過更多資料傳遞。如果之後希望使用者可以從 LINE 操作,就會遇到另一個問題:使用者輸入的文字要怎麼傳進 可以分析的 Java?

使用者輸入是怎麼進入程式的?

目前我的程式和使用者其實是在同一台電腦上操作,所以最簡單的方法就是直接從 Terminal 輸入,再讓 Java 取得這段文字。但在 Web 上的使用方式就不太一樣。例如平常在網站送出表單、搜尋資料或傳送訊息,使用者輸入的內容並不是直接出現在 Server 的程式裡,而是需要先透過網路傳送,再由 Server 接收和處理。

Scanner 和 HTTP Request

由於之後想嘗試連接到 LINE Bot,所以想先比較 Scanner 和 HTTP Request。
Scanner 可以直接讀取 Terminal 裡的文字,因為 Terminal 和 Java 都是在目前的電腦環境中,所以不需要經過網路。但 LINE 和我的 Java 程式是分開的,Java 沒有辦法直接使用 Scanner 去讀取 LINE 裡面的訊息。這時就需要透過網路把資料傳過來,而 HTTP Request 就可以理解成其中一種在 Client 和 Server 之間傳送資料的方式。差別主要在資料從哪裡來。因此接下來需要改變的是使用者的問題怎麼進入 Java,以及分析結果怎麼回到使用者手上。

為什麼先用 Scanner?

想在了解HTTP Request之前,把使用者輸入和後面的分析功能分開。
一個程式除了功能有沒有做出來之外,同時也需要考慮使用者怎麼把資料傳給程式。

從Scanner的輸入方法,學到 System.in 是 Java 的標準輸入,而 nextLine() 可以取得使用者輸入的一整行文字。取得內容後,再直接傳進原本的 processUserQueryWithTools(),這樣使用者輸入什麼問題,就可以把問題交給後面的 Gemini 和 Java 分析。另外學到可以使用 continue 避免使用者因為空白輸入造成問題,以及把沒有內容的問題直接傳給 Gemini,浪費沒必要的 API Request。

接下來如果要改成 LINE Bot,就需要把現在直接從 Terminal 取得資料的方式,改成讓 Java 可以接收從網路傳來的資料,因此會再之後繼續認識 HTTP、Server 和 Webhook。


上一篇
延續簡易Tool Calling,處理 Function Response
系列文
30 天從資料處理、分析到生成式 AI 的整合應用與實作學習 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言