跳到主要內容

【Azure OpenAI】o1 模型與 2024-09-01-preview API

距離上篇在 Early Access Playground 試用 o1 模型後又過了兩週,今天終於等到 API 開放使用啦!本篇將紀錄如何使用 Python SDK 存取 o1 模型。 系列文章 【Azure OpenAI】快速試用 o1 模型 模型佈署 在先前開放的 Early Access Playground 中使用 o1 是不需要另外佈署模型的,不過回到使用 API 來存取 o1 模型,就需要像之前的模型一樣先進行佈署才能使用,相信大家都很熟悉了。 使用 Python SDK 一樣使用熟悉的 openai 套件: 2024-09-01-preview 初始化的方式與先前模型都一樣,需要注意的是 o1 模型目前只能使用最新的 API 版本 2024-09-01-preview 來訪問。 Chat Completions 將 model 填入 o1-preview ,或是你的模型佈署名稱, messages 也一樣是歷史對話堆疊的 List。 回應如下: 查看 Token 使用量 內建 Chain of Thought 的 o1 比起過往的模型會消耗較多的 Token,因此我們特別把 Token 使用量拉出來看。 回應如下: 其中 prompt_tokens 、 completion_tokens 、 total_tokens 在先前的 API 就已經存在了,分別代表Token 的 Input、Output 與總使用量,而在新的 completion_tokens_details 中可以看到  reasoning_tokens 使用了 320 個 Tokens,居然佔了總輸出 Token 的 80% 以上! 控制 Token 成本 已往我們可以使用  max_tokens 參數來控制 Token 的用量,但在 o1 模型中棄用了 max_tokens ,取而代之的是使用  max_completion_tokens 參數,來看看這段程式碼: 回應如下: 沒東西?那再看一次 Token 量。 回應如下: Token 居然是有被使用的! 這表示 max_completion_tokens 並不像過往使用  max_tokens 這麼簡單,先前在回應遇到...

【Azure Data Factory】當 ZIP 上傳到 Blob Storage 時自動執行解壓縮(中)

接續前一篇,我們已經完成了 Data Factory 到 Blob Storage 的連線設定,如果還沒看過的話建議先從下方連結觀看,接著我們會正式開始編寫執行解壓縮的 Pipeline。

相關連結:【Azure Data Factory】當 ZIP 上傳到 Blob Storage 時自動執行解壓縮(上)

在 Azure Data Factory 中新增資料集

而在開始建立解壓縮 Pipeline 前,還需要先完成資料集的設定,所有會接觸到的資料都需要先使用 Data Factory 中的資料集做一次宣告,才能在 Pipeline 中被使用。

首先選到左邊的「作者」→「資料集」→「新增資料集」,

新增資料集

右側彈跳出的視窗中一樣選擇 Gen2 做為資料存放區,而資料格式如果還不確定的話可以直接選擇「二進位」,

選擇二進位資料格式

接著進入設定屬性頁面,這邊可以直接從下拉選單找到剛剛建立好的連結服務,而下面的檔案路徑先保持空白就好,我們後面再把它填上,

資料集屬性設定

點擊確定後就會看到建立出來的資料集,是一個二進位的格式。再來我們先進到「參數」的頁籤中,如下圖分別新增名為「folderPath」與「fileName」的參數:

在資料集中新增兩個參數

建好參數後再回到第一個「連接」頁籤,先將壓縮類型選到我們這次的目標:.zip 檔,而檔案路徑就比較特別一點,需要如下圖填入「@dataset().folderPath」與「@dataset().fileName」:

資料集中的連接設定

「@dataset().folderPath」與「@dataset().fileName」是資料集內內建的變數表達式,分別表示使用我們在「參數」頁籤設定的「folderPath」與「fileName」兩個參數,所以後續在使用這個資料集時我們需要在呼叫的當下給定「folderPath」與「fileName」兩個參數的值,而這兩個值會再傳遞到「@dataset().folderPath」與「@dataset().fileName」中。

第二個資料集

如同前面提到的:資料集是資料的一個宣告,可以把我們剛剛設定好的第一個資料集視作要被解壓縮的 .zip 檔,而現在對於被解壓縮出來的資料也需要使用第二個資料集來表示它。

與前面的動作都一致,選到「作者」→「資料集」→「新增資料集」→ 資料存放區:「Azure Data Lake Storage Gen2」→ 資料格式類型:「二進位」,這邊注意到需要與第一個資料集有不同的名稱,因為它代表的是不同的資料。

第二個資料集的屬性設定

再來比起第一個資料集,這邊只需要用到「@dataset().folderPath」一個參數,至於為什麼這邊不需要用到檔案名稱,是因為一般情況下我們不會提前知道解壓縮出來的檔案名稱,所以第二個資料集在這邊更像是對「存放路徑」的宣告。

在 Azure Data Factory 中新增管線

與新增資料集的動作類似,選到「作者」→「管線」→「新增管線」,接著如下圖設定兩個管線內的全域參數,等一下我們會用到它們

設定管線內的全域參數

再來如下圖將「移動和轉換」→「複製資料」拖移到中間空白畫布中:

在管線中建立複製資料活動

開始設定「複製資料」的內容,首先到「來源」頁籤,來源資料集在這個範例中就是 .zip 檔,所以選擇第一個資料集,這時會彈出資料集需要的兩個參數,如下圖完成設定:

複製資料活動的來源設定

「@pipeline().parameters.folderPath」與「@pipeline().parameters.fileName」也是內建的變數,代表使用管線全域參數來代入。

再來如下圖切到下一個「接收器」頁籤,這邊當然就是選擇第二個資料集做為接收資料集,一樣需要代入對應的管線全域參數,之後在「Copy behavior」這邊建議設定「Preserve hierarchy」,這樣在解壓縮後就能保持 .zip 檔內的資料夾架構。

到此完成整個管線的設定!

測試資料

完成後當然是趕快來測試看看了,測試用的資料只需要普通到不能再普通的 .zip 檔,這邊我建立一個名為 test 的 .txt 檔,在 Windows 中右鍵把它壓成 test.zip。

很普通的測試資料

接著把 test.zip 上傳到上一篇建立的 Blob Storage 中備用即可。

測試資料上傳至 Blob Storage

管線偵錯模式

Data Factory 非常貼心的提供了管線發布前的偵錯模式,直接點擊畫布上方的「偵錯」,會在右方跳出以下畫面:
輸入觸發管線的值

還記得我們先前編輯管線時,有設定了兩個管線全域參數,這邊就是輸入我們想用怎樣的參數值來觸發這次的管線執行;因為剛剛的測試資料直接放在 Container 的根目錄,所以第一個「folderPath」填入 Container 名即可,但要注意這邊有很詭異的兩個斜線是固定的格式,而「fileName」當然就是填入測試資料的檔案名稱。

設定完成按下「確定」就會看到管線開始執行,等待約 10 秒就會看到執行成功的畫面囉!

管線執行成功

回到 Blob Storage 的畫面來看看檔案的狀態:

如預期地從 test.zip 中解壓縮出 test.txt,測試成功!

總結

我們完成了解壓縮管線的設定,並且手動的觸發一次管線執行,也成功解壓縮出測試資料;但回想我們的執行方式,在開始時需要輸入檔案路徑與檔案名稱,似乎不是這麼的方便好用,所以在下一篇中會使用 Data Factory 的觸發程序來自動填上這些值,請繼續收看!

系列文章

留言

這個網誌中的熱門文章

【Azure OpenAI】購買 PTU 時微軟不會告訴你的事

Provisioned Throughput Units 一直是目前在 Azure OpenAI 對於延遲問題的最有效解法,同時也是官方最推薦的方案。有別於基本的隨付即用,PTU 具有穩定、可預測的延遲等優勢,適合用於正式上線的生產環境。 但 PTU 的成本是一個不可忽視的問題,儘管選購最小單位量的 PTU,也是需要應用到達一定規模後才看得出使用效益。在確認是否購買 PTU 時,除了詳細閱讀官方文件並使用官方推出的計算機規劃額度外,以下幾點或許也是你該注意的。 不可自行購買 PTU 首先,是的,截自撰文當日 (2024/07/09) PTU 只能透過微軟業務窗口洽詢購買細節,這可能對於多數用戶是不友善的,但我相信這個過程很快就能得到優化。 相關連結: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/provisioned-throughput#how-do-i-get-access-to-provisioned PTU 的可用區域僅供參考 在官方文件中記錄了下述表格,其中詳細的呈現各種模型的 PTU 在不同地區的可用性,但這張表只是一個參考,因為當你洽詢業務窗口時你會得到另一張不同的表格。 其中對於台灣用戶可能最有影響的,是我們沒辦法在日本東部購買 gpt-4o 模型的 PTU,對於想透過購買 PTU 以降低模型延遲的用戶來說這是一個矛盾的選擇,當然更不用提隨之產生的跨區傳輸量成本。 一樣截至撰文為止,為何在打勾區域✅無法購買的問題,官方並沒有給出任何理由,或許是我們採購量沒有達到官方需要解釋的程度😔 相關連結: https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/provisioned-throughput#what-models-and-regions-are-available-for-provisioned-throughput 有別於你認知的定價策略 承如前述,PTU 的成本絕對是導入時的重要考量點。 PTU 的售價到底是多少 事實上 PTU 的官方售價早就是公開的秘密,稱之為秘密是因為 PTU 的售價截至目前並沒有被列在官方文件或定價計算機中,但在最新的 Azure OpenAI S...

【Azure OpenAI】o1 模型與 2024-09-01-preview API

距離上篇在 Early Access Playground 試用 o1 模型後又過了兩週,今天終於等到 API 開放使用啦!本篇將紀錄如何使用 Python SDK 存取 o1 模型。 系列文章 【Azure OpenAI】快速試用 o1 模型 模型佈署 在先前開放的 Early Access Playground 中使用 o1 是不需要另外佈署模型的,不過回到使用 API 來存取 o1 模型,就需要像之前的模型一樣先進行佈署才能使用,相信大家都很熟悉了。 使用 Python SDK 一樣使用熟悉的 openai 套件: 2024-09-01-preview 初始化的方式與先前模型都一樣,需要注意的是 o1 模型目前只能使用最新的 API 版本 2024-09-01-preview 來訪問。 Chat Completions 將 model 填入 o1-preview ,或是你的模型佈署名稱, messages 也一樣是歷史對話堆疊的 List。 回應如下: 查看 Token 使用量 內建 Chain of Thought 的 o1 比起過往的模型會消耗較多的 Token,因此我們特別把 Token 使用量拉出來看。 回應如下: 其中 prompt_tokens 、 completion_tokens 、 total_tokens 在先前的 API 就已經存在了,分別代表Token 的 Input、Output 與總使用量,而在新的 completion_tokens_details 中可以看到  reasoning_tokens 使用了 320 個 Tokens,居然佔了總輸出 Token 的 80% 以上! 控制 Token 成本 已往我們可以使用  max_tokens 參數來控制 Token 的用量,但在 o1 模型中棄用了 max_tokens ,取而代之的是使用  max_completion_tokens 參數,來看看這段程式碼: 回應如下: 沒東西?那再看一次 Token 量。 回應如下: Token 居然是有被使用的! 這表示 max_completion_tokens 並不像過往使用  max_tokens 這麼簡單,先前在回應遇到...

【Document Intelligence】使用 Layout Model 實作 Semantic Chunking

在這個 LLM 時代 RAG 可說是一個非常熱的議題,其中來源資料的品質幾乎決定了整個 RAG 應用的成敗,而在一系列的資料處理流程中,又以 Chunking 做為一個重要的環節,像是常見的固定長度、重疊等等都是基本的 Chunking 策略。 Semantic Chunking 是一種進階的 Chunking 手法,比起基本的固定長度切分,Semantic Chunking 希望藉由語意分析劃分出更具有意義的 Chunk。本篇將使用在 Document Intelligence 中新推出的 Layout Model 文檔分析 API 來實作 Semantic Chunking。 Markdown 與 Semantic Chunking Markdown 是一種具有結構的標記語言,對於人類在閱讀上是非常友好的,而對於 LLM 來說當然也是如此,不過在現實上,我們提供給 RAG 的文件往往都不是 Markdown。 現在我們將使用 Layout Model 來解決這個問題,其提供的文檔分析 API 可以在一次呼叫中將傳入的 PDF、PPT 等常見格式文檔轉換成 Markdown 格式,這個轉換過程中包含了 OCR、文件結構分析等步驟,這也就代表轉換出的 Markdown 結構在某種程度上是蘊含文件語意的。 最後我們將使用這個 Markdown 結構做為 Chunking 的依據,以此來實現 Semantic Chunking。 建立 Document Intelligence 建立 AI 類服務時基本上都不用做太複雜的設定,這邊唯一要注意的是我們預計要使用的 Layout Model API 目前只有在美東、美西 2 與西歐三個地區提供,建議時需要留意選擇的地區。 Document Intelligence Studio 與其他 AI 服務一樣,Document Intelligence 也有提供 Studio 讓我們快速體驗功能,從 Studio 首頁進入「Layout」頁面,我們使用內建的範例文件來看看文檔分析 API 的能力。 首先選擇一篇範例文件,再調整「Output format style」為「Markdown 」後點擊上方的「Run an...