WFU

2023/9/16

使用 iOS 的 捷徑,透過呼叫 OpenAI API 轉換格式後,增加 Google 日曆行程

📝 OpenAI 和 Google 日曆整合指南

此指南將教你如何使用 iOS 的「捷徑」與 Google Apps Script,使你能夠方便地將資訊增加到 Google 日曆中。


📌 需求:

① 口說增加 google 日曆行程
② 複製文件或信件上的開會資訊,轉存為 google 日曆行程
③ 跳出文字輸入區,輸入後增加 google 日曆行程


🛠 所需操作 app 或介面:

① iOS 的捷徑
② Google apps script


📋 前置作業

① OpenAI API Key
② 你想要預設輸入的 google 日曆群組 (google 日曆 ID) (怎麼找日曆ID 可參照 https://support.google.com/a/answer/1626902?hl=zh-Hant )


🔧 Google Apps Script 步驟

① 網址: https://script.google.com/ 。開「新專案」,在預設的「檔案:程式碼.gs」內,複製以下程式碼貼上。也可連至 GitHub 複製程式碼 
const CALENDAR_ID = '你的calendar ID';  // 替換成你的calendar ID
const OPENAI_API_TOKEN = 'Bearer sk-你的openAI API';  // 替換成你的openAI API

function doGet(e) {
  handleRequest(e.parameter.action);
}

function doPost(e) {
  handleRequest(e.postData.contents);
}

function handleRequest(data) {
  var eventData = JSON.parse(openAIGPT35Turbo(data));
  Calendar.Events.insert(eventData, CALENDAR_ID);
}

function openAIGPT35Turbo(userPrompt) {
  var url = 'https://api.openai.com/v1/chat/completions';
  var headers = {
    'Authorization': OPENAI_API_TOKEN,
    'Content-Type': 'application/json'
  };
 
  var inputPrompt = '今天的日期是 ' + getFormattedDate() + '。請將使用者輸入的句子轉為 google calendar json 格式,目的是添加新的行程於 google calendar中。輸出只需要寫出 json 內容,其餘都不需要寫。';
  var data = {
    'model': 'gpt-3.5-turbo',
    'messages': [
      { 'role': 'system', 'content': inputPrompt },
      { 'role': 'user', 'content': userPrompt }
    ],
    'temperature': 0.1,
  };

  try {
    var response = UrlFetchApp.fetch(url, { 'method': 'post', 'headers': headers, 'payload': JSON.stringify(data) });
    return JSON.parse(response.getContentText())['choices'][0]['message']['content'];
  } catch (error) {
    Logger.log(error);
    return "Error: " + error;
  }
}

function getFormattedDate() {
  var today = new Date();
  var year = today.getFullYear();
  var month = String(today.getMonth() + 1).padStart(2, '0');
  var day = String(today.getDate()).padStart(2, '0');
  var daysInChinese = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
  return year + '-' + month + '-' + day + '(' + daysInChinese[today.getDay()] + ')';
}

② 在左側欄位的「服務」按「+」,增加「Google Calendar API」服務
③ 試著「執行」一次,會發生錯誤,目的是要開通 google 帳號的權限
④ 右上角「部署」-「新增部署作業」-「選取類型」-「網頁應用程式」,誰可以存取這一欄位選取「所有人」,右下角「部署」。部署後會產出一長串的「網址」,在下一個步驟會用到。


📱iOS 的捷徑步驟:

📸 請參照附加的截圖進行操作,或根據個人需求進行調整。 

需求 口說增加 google 日曆行程

第四步驟的「上一步驟的網址」就是 google apps script 部署後的網址,記得要貼上。網址貼上後,後面要加上"?action="的字串。

🚀啟動步驟: 「嘿,Siri,增加行程(這是我內定的捷徑名稱)



▶️ 示範①


需求 複製文字或信件上的開會資訊,轉存為 google 日曆行程

第四步驟的「前述網址」就是 google apps script 部署後的網址,記得要貼上。
🚀啟動步驟: 先把行程的文字內容圈選 -> 複製 -> 「嘿,Siri,貼上行程(這是我內定的捷徑名稱)



▶️ 示範②


需求 跳出文字輸入區,輸入後增加 google 日曆行程 (for mac only)

跳出文字輸入區的功能,只有在 mac 上才會啟動,在 iPhone 上只會出現 Siri 聽取的圖示。
第四步驟的「前述步驟網址」就是 google apps script 部署後的網址,記得要貼上。
🚀啟動步驟: 「嘿,Siri,輸入行程(這是我內定的捷徑名稱)




🎉 現在,你應該可以順利地使用這些功能了! 享受你的高效生產力吧!
🚀 希望這個指南能夠幫助你更容易地整合 OpenAI 和 Google 日曆!


2023/6/3

[學習筆記] 用 Whisper 來轉出 DeapLerning.AI 影片字幕檔

緣起

吳恩達 (Andrew Ng) 陸續在 DeepLearning.AI 上推出和 生成式AI 有關的免費課程。之前推出的 「ChatGPT Prompt Engineering for Developers」,每一小段的課程時間不長,又搭配成 Jupyter 程式視窗同步展示,同時又有字幕,這讓學習過程的體驗很不錯呀! 

日前吳恩達一次推出三個課程: (1) Building Systems with the ChatGPT API; (2) How Diffusion Models Work; (3) LangChain for LLM Application Development。這一下子突然冒出的資訊量實在是太大了,但重點是這次三段課程居然還沒有上「英文字幕」,在有口音且又沒有字幕下,這會讓我的學習的動力減少許多(殘念)。 

DeepLearning.AI 的影片檔按滑鼠右鍵是可以下載的,所以興起了今日突然興起的學習目標:「把影片檔用Whisper 轉出 SRT字幕檔,再用沉浸式翻譯轉為雙語字幕。」 對於程式小白的我,面對程式碼或是寫程式軟體的操作上還是會碰壁且一直卡關,一個早上的亂玩後還是有得到成果。

正在執行轉檔時的截圖



以下是自己學習/試誤的過程,記錄下來以免自己日後忘了: 

一、學習怎麼在 Visual Studio Code 開 python 虛擬環境 


OpenAI Whisper 要求的 python 版本是 3.9。Python很煩的是版本一大堆,每個程式要求的 python 版本或是另外安裝的 package 的版本都可能不一致。所以這次學習著如何在 Visual Studio Code 開 python 虛擬環境,讓彼此不同程式的執行環境是獨立出來的。



指令其實很簡單:python -m venv {虛擬環境的目錄名} 

後面比較麻煩的是一些小設定或安裝 package 時會出現錯誤,反正有出現錯誤訊息時,把整個訊息丟給 ChatGPT,通常都能得到還不錯的解決方式的回答。 

二、學習怎麼在本地端使用 Whisper 將語音轉字幕檔 


這部份網路上有不少人寫 step by step 的步驟,我主要參考的是: 

這邊我比較卡關的是 "choco install ffmpeg" 這一段的安裝,在虛擬環境下的設定有卡住,後來 google + chatGPT 解決。

三、一次只能轉一個檔的程式碼,改寫為一次轉整個目錄所有影音檔的程式碼 


因為一次只能轉一個檔很麻煩,不能放在背景讓它自己跑,因為前景正在打玩起來其實有點無聊的 Diablo4。這部份就是請 ChatGPT4 直接改寫,也測試 ChatGPT 最近的新功能 Share。 測過後發現分享原始對話串的人不能刪除原始對話,不然對方會無法載入繼續展開對話。 


四、用 沉浸式翻譯 外掛將 SRT 字幕翻擇成雙語字幕


沉浸式翻譯真的是好物,能解決大多數和文字類翻譯有關的需求。沉浸式翻譯內建「翻譯字幕檔案」,讚!

雖然它可以用 OpenAI API 來接 ChatGPT 3.5/4 來翻譯,但我最常選擇的是「Google翻譯」,因為其實是太快了。若對翻譯品質不太要求,只求讀得下去就好,選「Google翻譯」是最佳解。

成果

輸出設定如下:
  • 英文字幕:Whisper Model_Type = "medium" 
  • 雙語字幕:沉浸式翻譯的翻譯器「Google翻譯」
檔案下載:


2023/4/23

eGFR計算機

CKD Calculator







計算結果

2023/2/28

運用 ChatGPT 執行 EBM 的第1與第2步驟

 

簡介

Evidence-Based Medicine (EBM) 是一個從臨床經驗和最新的科學證據中獲得的醫學決策方法,它試圖解決傳統醫學中的局限性,這種方法可以幫助人們更好地了解不同治療方法的優缺點,以便做出更明智的決策。然而,初學者在實證五階段步驟(提出問題、搜集證據、評估證據、應用證據、評估結果)中常常遇到困難,初學者往往需要更多的指導與方向指引,此時使用自然語言處理技術的 ChatGPT 模型是可以用來幫助執行 EBM 的前面步驟。本文將介紹如何運用 ChatGPT 加速 EBM 的第1與第2步驟。


第1步驟:提出問題

在 EBM 的第1步驟中需要明確提出一個可回答的臨床問題。這個問題應該是明確的、具體的、可測量的、有關聯性的、可行的和有意義的。只需要輸入一個簡要的問題描述,使用 ChatGPT 可以判別是否為「前景問題」、並將問題轉換為 PICO 架構、也可以判斷問題的類型(治療/預後/診斷/傷害)。

運用 ChatGPT 下指令需要注意以下三點:明確的問題、適當的關鍵詞、適時的導正方向。

至於要用「英文」或是「中文」發問呢?雖然 ChatGPT 的訓練資料庫是英文為大宗,但兩種語言我個人試過後,感覺答案的精準度還是「英文」會好一些。若英文不夠好,或是懶的再用中翻英後再問它(可另開另一個 ChatGPT 對話串翻譯、或用 DeepL 來翻),直接問「中文」也是 OK 的。以下範例為求平易近人(?),和 ChatGPT 的溝通仍使用中文來問。

在開始新一串 ChatGPT EBM 對話的第一個指令,可以先指示你想要 ChatGPT 扮演的角色、遵守的原則或規則。

指令:我希望你能扮演一位專門在教「實證醫學(evidence based medicine)」教授的角色,你的目標聽眾是醫學生。資料來源以英文資料為主。除非我另有指定,以下的回答請盡可能翻譯成繁體中文來回答。如果你理解上述規則,請回答“是”。

下一步驟,我們可以測試 ChatGPT 是否熟悉實證醫學的基本常識。EBM第1步驟包含有前景問題、背景問題以及PICO架構。我們可以用這些問題來測試並指引 AI 教授的指導方向,好讓之後的對話能確保在正確的道路上。

指令一:請用少於100字的內容解釋 "background question" 和 "foreground question"。指令二:請用少於100字的內容解釋 "PICO framework"

進入正題,我在此網頁挑選了一個臨床問題: "對於患有SLE的成年患者,飲用薑黃茶是否比使用Plaquenil更有效地減輕關節疼痛?"(原文為: "In adult patients with SLE, is consuming turmeric tea more effective than Plaquenil at reducing joint pain?")。接下來,請 ChatGPT 判斷是「前景問題」或「背景問題」及拆解成 PICO 四要素。

指令:臨床問題是:「在患有SLE的成年患者中,飲用薑黃茶是否比使用Plaquenil更有效地減輕關節疼痛?(In adult patients with SLE, is consuming turmeric tea more effective than Plaquenil at reducing joint pain?)」,請問此問題是「前景問題」還是「背景問題」,並請用PICO架構拆解此臨床問題。

在進入第二步驟之前,我們需要仔細檢查PICO,確保所有的英文單詞都被轉換並查找其同義詞。此外,我們需要定義問題類型,包括治療、預後、診斷和傷害。透過這些步驟,我們可以判斷哪一種醫學文獻最適合用來解答此臨床問題。這些問題,ChatGPT 是做的到的…

指令:請將上述 PICO 轉換成英文關鍵字與同義字,並請分析此 PICO 是屬於哪一種問題類型(治療/預後/診斷/傷害)? 且適合用哪一種醫學文獻來解答此臨床問題?

第2步驟:搜尋證據

在EBM中,第二步驟的前半段在於把搜尋詞轉換為搜尋字串。轉換搜尋詞時,需要使用「同義詞」來進行搜索。以前教實證都會教 Mesh Terms 的使用,使用Mesh Terms進行轉換可以進一步提高搜索效率和準確性,不過越來越聰明的 Pubmed 已經具有自動轉換為MeSH terms的功能後,就比較少教了,但我們仍可試試 ChatGPT 在此方面的能力。決定好搜尋詞及 Mesh Terms後,就是選取 PICO 各部份的組合來進行搜尋,我們就請 Chat GPT 試看看最常使用 P+I 的組合。

指令:我想用上述的 PICO 中的 P+I 來進行 PubMed 的文獻搜尋,請建議適合的搜尋字串。且若有適合的 MeSH Terms也包含在內。

我把 ChatGPT 建議的「搜尋字串」直接貼到 PubMed 中搜尋,PubMed有顯示出搜尋詞有小錯誤,沒關係,我就接受這一點小失誤繼續看下去,目前有搜尋到 25 篇文獻。


接著試著把前 10 篇文獻的標題用 PubMed 的 Save 功能 (Summary) 匯出,請 ChatGPT 幫我挑選有符合原始 PICO 的文獻,他幫我挑出了兩篇。



這次用 ChatGPT 來執行 EBM 的第一及第二步驟就告一段落。ChatGPT 輸出結果仍然不完美,但能有這樣輸出我給予 80 分的評分!


總結

運用 ChatGPT 是可以做到 EBM 的第1與第2步驟。 然而,對於初學者來說,在使用 ChatGPT 進行問題求解時可能會遇到一些困難,由自然語言處理技術而生的 ChatGPT,他的回答是基於大量的訓練數據生成的,但這並不意味著它的回答是正確的,這時就會需要「人腦」去確保 ChatGPT 給出的答案是可靠的。

有人會問,AI 是否讓學習實證醫學變得無意義?實際上,AI 可能使得學習實證醫學變得更重要,因為你需要具備相關專業能力,才能判斷 AI 給出的答案是否正確。對於已經具備基本能力的人來說,善用 AI 可以縮短執行 EBM 或是寫 EBM 報告的時間。

使用 ChatGPT 時,需要注意問題的明確性、關鍵詞的適當性和答案的可靠性。在我與 ChatGPT 玩的過程中,有時他回答的方向會飄向奇怪的遠方,這時可以按「Regenerate reponse」請他重新回答,或是下一題請他導回正確方向。來來回回和 ChatGPT 對話是一件很好玩也很舒壓(?)的事,AI這幾個月的進步實在太快了,我們都應該抱著一頭熱的看熱鬧心情,一起來玩來趕上這個熱潮才是!


利益揭露

本文章的撰寫是極多次使用 Notion AI 功能,合併使用人腦修改而成。不負責任的目視計算,約保留 40% Notion AI 產出的文字。